muck-engine 0.1.31 → 0.1.32

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.31
1
+ 0.1.32
@@ -80,16 +80,24 @@ module MuckEngineHelper
80
80
  end
81
81
 
82
82
  def locale_link(name, locale)
83
- link_to name, request.protocol + locale + '.' + request.domain + request.request_uri
84
- #link_to name, request.url.gsub(request.protocol, "#{request.protocol}#{locale}.")
85
- #link_to name, request.url.sub(request.protocol, "#{request.protocol}#{locale}.").sub('www.','')
86
- protocol = request.protocol
87
- if request.domain.count('.') == 1
88
- new_domain = request.url.sub(protocol, "#{protocol}#{locale}.")
83
+ parts = request.host.split('.')
84
+ first_subdomain = parts.first
85
+ request_uri = request.request_uri
86
+ if first_subdomain == 'www' or Language.supported_locale?(first_subdomain)
87
+ link_to name, request.protocol + (locale == I18n.default_locale.to_s ? 'www' : locale) + '.' + parts[1..-1].join('.') + request.port_string + request_uri
88
+ elsif /^localhost/.match( request.host ) or /^(\d{1,3}\.){3}\d{1,3}$/.match( request.host )
89
+ if request_uri.include?('?')
90
+ if request_uri.include?('locale')
91
+ link_to name, request.protocol + request.host_with_port + request_uri.sub(/locale=.*/, 'locale=' + locale)
92
+ else
93
+ link_to name, request.protocol + request.host_with_port + request_uri + '&locale=' + locale
94
+ end
95
+ else
96
+ link_to name, request.protocol + request.host_with_port + request_uri + '?locale=' + locale
97
+ end
89
98
  else
90
- new_domain = request.url.sub(Regexp.new(protocol + "[^\.]+."), "#{protocol}#{locale}.")
99
+ link_to name, request.protocol + (locale == I18n.default_locale.to_s ? 'www' : locale) + '.' + request.host_with_port + request_uri
91
100
  end
92
- link_to name, new_domain
93
101
  end
94
102
 
95
103
  # Generate parameters for a url that refer to a given object as parent. Useful
@@ -12,10 +12,25 @@
12
12
 
13
13
  class Language < ActiveRecord::Base
14
14
 
15
+ @@locale_ids = nil
16
+
15
17
  def self.locale_id
16
- languages = Language.find(:all, :select => 'id, locale', :conditions => 'languages.muck_raker_supported = true')
17
- @@locale_ids ||= Hash[*languages.collect {|v|[v.locale.to_sym, v.id]}.flatten]
18
+ cache_locale_ids
18
19
  @@locale_ids[I18n.locale]
19
20
  end
21
+
22
+ def self.supported_locale? locale
23
+ cache_locale_ids
24
+ @@locale_ids[locale.to_sym] != nil
25
+ end
26
+
27
+ private
28
+
29
+ def self.cache_locale_ids
30
+ if !@@locale_ids
31
+ languages = Language.find(:all, :select => 'id, locale', :conditions => ['languages.supported = ?', true])
32
+ @@locale_ids = Hash[*languages.collect {|v|[v.locale.to_sym, v.id]}.flatten]
33
+ end
34
+ end
20
35
 
21
36
  end
data/muck-engine.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-engine}
8
- s.version = "0.1.31"
8
+ s.version = "0.1.32"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin Ball"]
@@ -376,6 +376,9 @@ Gem::Specification.new do |s|
376
376
  "test/rails_root/config/routes.rb",
377
377
  "test/rails_root/db/.keep",
378
378
  "test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb",
379
+ "test/rails_root/db/migrate/20090402234137_create_languages.rb",
380
+ "test/rails_root/db/migrate/20090426041056_create_countries.rb",
381
+ "test/rails_root/db/migrate/20090426041103_create_states.rb",
379
382
  "test/rails_root/db/migrate/20090602041838_create_users.rb",
380
383
  "test/rails_root/features/step_definitions/webrat_steps.rb",
381
384
  "test/rails_root/features/support/env.rb",
@@ -549,6 +552,7 @@ Gem::Specification.new do |s|
549
552
  "test/rails_root/test/test_helper.rb",
550
553
  "test/rails_root/test/unit/.keep",
551
554
  "test/rails_root/test/unit/basic_mailer_test.rb",
555
+ "test/rails_root/test/unit/muck_engine_helper_test.rb",
552
556
  "test/rails_root/vendor/plugins/ssl_requirement/README",
553
557
  "test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb",
554
558
  "test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb",
@@ -585,6 +589,9 @@ Gem::Specification.new do |s|
585
589
  "test/rails_root/config/initializers/session_store.rb",
586
590
  "test/rails_root/config/routes.rb",
587
591
  "test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb",
592
+ "test/rails_root/db/migrate/20090402234137_create_languages.rb",
593
+ "test/rails_root/db/migrate/20090426041056_create_countries.rb",
594
+ "test/rails_root/db/migrate/20090426041103_create_states.rb",
588
595
  "test/rails_root/db/migrate/20090602041838_create_users.rb",
589
596
  "test/rails_root/features/step_definitions/webrat_steps.rb",
590
597
  "test/rails_root/features/support/env.rb",
@@ -600,6 +607,7 @@ Gem::Specification.new do |s|
600
607
  "test/rails_root/test/shoulda_macros/plugins.rb",
601
608
  "test/rails_root/test/test_helper.rb",
602
609
  "test/rails_root/test/unit/basic_mailer_test.rb",
610
+ "test/rails_root/test/unit/muck_engine_helper_test.rb",
603
611
  "test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb",
604
612
  "test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb",
605
613
  "test/rails_root/vendor/plugins/validation_reflection/init.rb",
@@ -0,0 +1,18 @@
1
+ class CreateLanguages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :languages, :force => true do |t|
4
+ t.string :name
5
+ t.string :english_name
6
+ t.string :locale
7
+ t.boolean :supported, :default => true
8
+ t.integer :is_default, :default => false
9
+ end
10
+ add_index :languages, :name
11
+ add_index :languages, :locale
12
+ end
13
+
14
+ def self.down
15
+ drop_table :languages
16
+ end
17
+
18
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCountries < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :countries, :force => true do |t|
4
+ t.string "name", :limit => 128, :default => "", :null => false
5
+ t.string "abbreviation", :limit => 3, :default => "", :null => false
6
+ t.integer "sort", :default => 1000, :null => false
7
+ end
8
+ add_index :countries, :name
9
+ add_index :countries, :abbreviation
10
+ end
11
+
12
+ def self.down
13
+ drop_table :countries
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ class CreateStates < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :states, :force => true do |t|
4
+ t.string "name", :limit => 128, :default => "", :null => false
5
+ t.string "abbreviation", :limit => 3, :default => "", :null => false
6
+ t.integer "country_id", :limit => 8, :null => false
7
+ end
8
+
9
+ add_index :states, :country_id
10
+ add_index :states, :name
11
+ add_index :states, :abbreviation
12
+
13
+ end
14
+
15
+ def self.down
16
+ drop_table :states
17
+ end
18
+ end
@@ -5,6 +5,7 @@ require 'test_help'
5
5
  gem 'thoughtbot-factory_girl' # from github
6
6
  require 'factory_girl'
7
7
  require 'mocha'
8
+ require 'ruby-debug'
8
9
  require 'redgreen' rescue LoadError
9
10
  require File.expand_path(File.dirname(__FILE__) + '/factories')
10
11
  require File.join(File.dirname(__FILE__), 'shoulda_macros', 'controller')
@@ -0,0 +1,113 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class MuckEngineLocaleHelper
4
+
5
+ include ERB::Util
6
+ include ActionView::Helpers::TagHelper
7
+ include ActionView::Helpers::UrlHelper
8
+ include MuckEngineHelper
9
+
10
+ attr_accessor :request
11
+
12
+ end
13
+
14
+ class MuckEngineHelperTest < ActiveSupport::TestCase
15
+
16
+ context "locale_link" do
17
+
18
+ setup do
19
+ @lh = MuckEngineLocaleHelper.new
20
+ @lh.request = ActionController::TestRequest.new
21
+ end
22
+
23
+ should "prepend the locale to a domain without a subdomain" do
24
+ @lh.request.host = 'folksemantic.com'
25
+ assert_equal '<a href="http://es.folksemantic.com/">Espanol</a>', @lh.locale_link('Espanol','es')
26
+ end
27
+
28
+ should "use www as the subdomain when switching to english" do
29
+ @lh.request.host = 'es.folksemantic.com'
30
+ assert_equal '<a href="http://www.folksemantic.com/">English</a>', @lh.locale_link('English','en')
31
+ end
32
+
33
+ should "leave the path alone when prepending a locale subdomain" do
34
+ @lh.request.host = 'folksemantic.com'
35
+ @lh.request.request_uri = '/login'
36
+ assert_equal '<a href="http://es.folksemantic.com/login">Espanol</a>', @lh.locale_link('Espanol','es')
37
+ end
38
+
39
+ should "replace the www subdomain with the specified locale" do
40
+ @lh.request.host = 'www.folksemantic.com'
41
+ assert_equal '<a href="http://es.folksemantic.com/">Espanol</a>', @lh.locale_link('Espanol','es')
42
+ end
43
+
44
+ should "replace locale subdomains with the specified locale" do
45
+ @lh.request.host = 'fr.folksemantic.com'
46
+ assert_equal '<a href="http://es.folksemantic.com/">Espanol</a>', @lh.locale_link('Espanol','es')
47
+ end
48
+
49
+ should "specify the locale in the query string when the domain is localhost" do
50
+ @lh.request.host = 'localhost'
51
+ assert_equal '<a href="http://localhost/?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
52
+ end
53
+
54
+ should "leave the port alone when doing a locale rewrite" do
55
+ @lh.request.host = 'localhost'
56
+ @lh.request.port = '3000'
57
+ assert_equal '<a href="http://localhost:3000/?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
58
+ end
59
+
60
+ should "leave the port alone when doing a locale rewrite on a request that includes a path" do
61
+ @lh.request.host = 'localhost'
62
+ @lh.request.port = '3000'
63
+ @lh.request.request_uri = '/users/admin'
64
+ assert_equal '<a href="http://localhost:3000/users/admin?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
65
+ end
66
+
67
+ should "leave the port alone when doing a locale rewrite on a request that includes a path and already specifies a locale" do
68
+ @lh.request.host = 'localhost'
69
+ @lh.request.port = '3000'
70
+ @lh.request.request_uri = '/users/admin?locale=fr'
71
+ @lh.request.env['query_string'] = 'locale=fr'
72
+ assert_equal '<a href="http://localhost:3000/users/admin?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
73
+ end
74
+
75
+ should "leave the rest of the query string alone when replacing the locale parameter" do
76
+ @lh.request.host = 'localhost'
77
+ @lh.request.port = '3000'
78
+ @lh.request.request_uri = '/users/admin?test=false&locale=fr'
79
+ assert_equal '<a href="http://localhost:3000/users/admin?test=false&amp;locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
80
+ end
81
+
82
+ should "append the locale parameter when other query string parameters are specified" do
83
+ @lh.request.host = 'localhost'
84
+ @lh.request.port = '3000'
85
+ @lh.request.request_uri = '/users/admin?test=false'
86
+ assert_equal '<a href="http://localhost:3000/users/admin?test=false&amp;locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
87
+ end
88
+
89
+ should "replace the locale query parameter when working from localhost if another locale is already specified" do
90
+ @lh.request.host = 'localhost'
91
+ @lh.request.request_uri = '/login'
92
+ @lh.request.env['query_string'] = 'locale=fr'
93
+ assert_equal '<a href="http://localhost/login?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
94
+ end
95
+
96
+ should "specify the locale in the query string when the domain is an ip address" do
97
+ @lh.request.host = '155.23.322.13'
98
+ assert_equal '<a href="http://155.23.322.13/?locale=es">Espanol</a>', @lh.locale_link('Espanol','es')
99
+ end
100
+
101
+ should "prepend the locale if multiple submdomains are specified and the first is not www" do
102
+ @lh.request.host = 'math.folksemantic.com'
103
+ assert_equal '<a href="http://es.math.folksemantic.com/">Espanol</a>', @lh.locale_link('Espanol','es')
104
+ end
105
+
106
+ should "replace the www subdomain if multiple submdomains are specified and the first is www" do
107
+ @lh.request.host = 'www.math.folksemantic.com'
108
+ assert_equal '<a href="http://es.math.folksemantic.com/">Espanol</a>', @lh.locale_link('Espanol','es')
109
+ end
110
+
111
+ end
112
+ end
113
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muck-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.31
4
+ version: 0.1.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Ball
@@ -303,6 +303,9 @@ files:
303
303
  - test/rails_root/config/routes.rb
304
304
  - test/rails_root/db/.keep
305
305
  - test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb
306
+ - test/rails_root/db/migrate/20090402234137_create_languages.rb
307
+ - test/rails_root/db/migrate/20090426041056_create_countries.rb
308
+ - test/rails_root/db/migrate/20090426041103_create_states.rb
306
309
  - test/rails_root/db/migrate/20090602041838_create_users.rb
307
310
  - test/rails_root/features/step_definitions/webrat_steps.rb
308
311
  - test/rails_root/features/support/env.rb
@@ -476,6 +479,7 @@ files:
476
479
  - test/rails_root/test/test_helper.rb
477
480
  - test/rails_root/test/unit/.keep
478
481
  - test/rails_root/test/unit/basic_mailer_test.rb
482
+ - test/rails_root/test/unit/muck_engine_helper_test.rb
479
483
  - test/rails_root/vendor/plugins/ssl_requirement/README
480
484
  - test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb
481
485
  - test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb
@@ -533,6 +537,9 @@ test_files:
533
537
  - test/rails_root/config/initializers/session_store.rb
534
538
  - test/rails_root/config/routes.rb
535
539
  - test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb
540
+ - test/rails_root/db/migrate/20090402234137_create_languages.rb
541
+ - test/rails_root/db/migrate/20090426041056_create_countries.rb
542
+ - test/rails_root/db/migrate/20090426041103_create_states.rb
536
543
  - test/rails_root/db/migrate/20090602041838_create_users.rb
537
544
  - test/rails_root/features/step_definitions/webrat_steps.rb
538
545
  - test/rails_root/features/support/env.rb
@@ -548,6 +555,7 @@ test_files:
548
555
  - test/rails_root/test/shoulda_macros/plugins.rb
549
556
  - test/rails_root/test/test_helper.rb
550
557
  - test/rails_root/test/unit/basic_mailer_test.rb
558
+ - test/rails_root/test/unit/muck_engine_helper_test.rb
551
559
  - test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb
552
560
  - test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb
553
561
  - test/rails_root/vendor/plugins/validation_reflection/init.rb