diff options
author | Mark Longair <mhl@pobox.com> | 2013-10-14 19:09:25 +0100 |
---|---|---|
committer | Mark Longair <mhl@pobox.com> | 2013-10-15 10:27:37 +0100 |
commit | 944b1432fa06ba7a67f2a90c3528c95b6853120c (patch) | |
tree | 7a49412add8c1014ff0d63243dd40ba217b7f820 | |
parent | 48ede95299e286c03a45966b00990b544b727206 (diff) |
Make theme URL to theme name mapping consistent
The code that extracted the theme name from each entry in THEME_URLS (in
order to require code from a directory whose leaf name is the theme
name) only supported git URLs that ended in '.git'. However, the
themes:install rake task usefully supports a wider range of git URLs -
for example, all of the following were supported:
/home/whoever/themes/blah-theme => blah-theme
/home/whoever/themes/blah-theme/ => blah-theme
git://wherever/blah-theme.git => blah-theme
ssh://wherever/blah-theme.git// => blah-theme
This commit factors out a theme_url_to_theme_name method,
adds tests for it, and uses that method in both:
lib/tasks/themes.rake
config/initializers/theme_loader.rb
... so that a wider range of theme URLs are consistently supported.
-rw-r--r-- | config/initializers/alaveteli.rb | 1 | ||||
-rw-r--r-- | config/initializers/theme_loader.rb | 3 | ||||
-rw-r--r-- | lib/tasks/themes.rake | 2 | ||||
-rw-r--r-- | lib/theme.rb | 3 | ||||
-rw-r--r-- | spec/lib/theme_spec.rb | 25 |
5 files changed, 31 insertions, 3 deletions
diff --git a/config/initializers/alaveteli.rb b/config/initializers/alaveteli.rb index 8ae78c80c..685ddebb8 100644 --- a/config/initializers/alaveteli.rb +++ b/config/initializers/alaveteli.rb @@ -50,6 +50,7 @@ require 'normalize_string' require 'alaveteli_file_types' require 'alaveteli_localization' require 'message_prominence' +require 'theme' AlaveteliLocalization.set_locales(AlaveteliConfiguration::available_locales, AlaveteliConfiguration::default_locale) diff --git a/config/initializers/theme_loader.rb b/config/initializers/theme_loader.rb index 1ad2d01f1..b3ae11e1e 100644 --- a/config/initializers/theme_loader.rb +++ b/config/initializers/theme_loader.rb @@ -18,7 +18,6 @@ if Rails.env == "test" end else for url in AlaveteliConfiguration::theme_urls.reverse - theme_name = url.sub(/.*\/(.*).git/, "\\1") - require_theme(theme_name) + require_theme theme_url_to_theme_name(url) end end diff --git a/lib/tasks/themes.rake b/lib/tasks/themes.rake index a8d16f108..1eed92f1e 100644 --- a/lib/tasks/themes.rake +++ b/lib/tasks/themes.rake @@ -85,7 +85,7 @@ namespace :themes do def install_theme(theme_url, verbose, deprecated=false) deprecation_string = deprecated ? " using deprecated THEME_URL" : "" - theme_name = File.basename(theme_url, '.git') + theme_name = theme_url_to_theme_name theme_url puts "Installing theme #{theme_name}#{deprecation_string} from #{theme_url}" uninstall(theme_name, verbose) if installed?(theme_name) install_theme_using_git(theme_name, theme_url, verbose) diff --git a/lib/theme.rb b/lib/theme.rb new file mode 100644 index 000000000..4f03b5d99 --- /dev/null +++ b/lib/theme.rb @@ -0,0 +1,3 @@ +def theme_url_to_theme_name(theme_url) + File.basename theme_url, '.git' +end diff --git a/spec/lib/theme_spec.rb b/spec/lib/theme_spec.rb new file mode 100644 index 000000000..829c1a269 --- /dev/null +++ b/spec/lib/theme_spec.rb @@ -0,0 +1,25 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe "theme_url_to_theme_name" do + + it "should deal with a typical bare repo URL" do + url = 'git://wherever/blah-theme.git' + theme_url_to_theme_name(url).should == 'blah-theme' + end + + it "should deal with a typical bare repo URL with trailing slashes" do + url = 'ssh://wherever/blah-theme.git//' + theme_url_to_theme_name(url).should == 'blah-theme' + end + + it "should deal with a typical non-bare repo URL" do + url = '/home/whoever/themes/blah-theme' + theme_url_to_theme_name(url).should == 'blah-theme' + end + + it "should deal with a typical non-bare repo URL with a trailing slash" do + url = '/home/whoever/themes/blah-theme/' + theme_url_to_theme_name(url).should == 'blah-theme' + end + +end |