Fix name-typo in NEWS
[coquelicot.git] / lib / coquelicot / helpers.rb
1 # -*- coding: UTF-8 -*-
2 # Coquelicot: "one-click" file sharing with a focus on users' privacy.
3 # Copyright © 2010-2013 potager.org <jardiniers@potager.org>
4 #           © 2011 mh / immerda.ch <mh+coquelicot@immerda.ch>
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU Affero General Public License as
8 # published by the Free Software Foundation, either version 3 of the
9 # License, or (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU Affero General Public License for more details.
15 #
16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19 require 'rubygems'
20
21 module Coquelicot
22   module Helpers
23     def can_provide_git_repository?
24       return @@can_provide_git_repository if defined?(@@can_provide_git_repository)
25
26       # Test if `git update-server-info` was executed in the local repository
27       @@can_provide_git_repository =
28          File.readable?(File.expand_path('coquelicot.git/info/refs', settings.public_folder)) &&
29          File.readable?(File.expand_path('coquelicot.git/objects/info/packs', settings.public_folder))
30
31       if File.readable?(File.expand_path('coquelicot.git', settings.public_folder)) &&
32          !@@can_provide_git_repository
33         logger.warn <<-MESSAGE.gsub(/\n */m, ' ').strip
34           Unable to provide access to local Git repository. Please ensure that
35           you have run `git update-server-info` in the Coquelicot directory,
36           and that the symlink `public/coquelicot.git` is properly set.
37         MESSAGE
38       end
39       @@can_provide_git_repository
40     end
41
42     def gem_hostname
43       # We need to mangle the hostname to fits Gem::Version constraints
44       @@hostname ||= Socket.gethostname.gsub(/[^0-9a-zA-Z]/, '')
45     end
46
47     def gem_version
48       spec = Gem::loaded_specs['coquelicot']
49       current_version = spec ? spec.version.to_s.gsub(/\.[0-9a-zA-Z]+\.[0-9]{8}/, '') : Coquelicot::VERSION
50       Gem::Version.new("#{current_version}.#{gem_hostname}.#{Date.today.strftime('%Y%m%d')}")
51     end
52
53     def clone_command
54       if can_provide_git_repository?
55         "git clone #{uri('coquelicot.git')}"
56       else
57         "curl -OJ #{uri('source')} && gem unpack coquelicot-#{gem_version}.gem"
58       end
59     end
60
61     def authenticate(params)
62       Coquelicot.settings.authenticator.authenticate(params)
63     end
64
65     def auth_method
66       Coquelicot.settings.authenticator.class.name.gsub(/Coquelicot::Auth::([A-z0-9]+)Authenticator$/, '\1').downcase
67     end
68
69     def about_text
70       settings.about_text[FastGettext.locale] || settings.about_text['en'] || ''
71     end
72   end
73 end