i18n_routing 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ 0.2.4 (Apr 21, 2010)
2
+
3
+ * Fix latest Rails3 edge compatibility (previous rails3 beta version not supported any more)
4
+
1
5
  0.2.3 (Apr 21, 2010)
2
6
 
3
7
  * Works on ruby 1.9.2-head
data/README.rdoc CHANGED
@@ -11,5 +11,9 @@ Warning: The plugin is not currently running well with deep nesting resources fo
11
11
  * Do nested resources for Rails3
12
12
  * Another bug fix ?
13
13
 
14
+ == Contributors
15
+
16
+ * kwi (Guillaume Luccisano)
17
+ * bigtiger (Jim Remsik)
14
18
 
15
19
  Copyright (c) 2010 Guillaume Luccisano - g-mai|: guillaume.luccisano, released under the MIT license
data/Rakefile CHANGED
@@ -1,28 +1,28 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'spec/rake/spectask'
4
-
5
- spec_files = Rake::FileList["spec/**/*_spec.rb"]
6
-
7
-
8
- desc "Run specs for current Rails version"
9
- Spec::Rake::SpecTask.new do |t|
10
- t.spec_files = spec_files
11
- t.spec_opts = lambda {
12
- @rails_spec_version ? ["-c -- rails_spec_version=#{@rails_spec_version}"] : ["-c"]
13
- }
14
- end
15
-
16
- task :default => :spec
17
-
18
- desc "Run Rails 2.x specs"
19
- task :rails2_spec do
20
- @rails_spec_version = 2
21
- Rake::Task['spec'].invoke
22
- end
23
-
24
- desc "Run Rails 3.x specs"
25
- task :rails3_spec do
26
- @rails_spec_version = 3
27
- Rake::Task['spec'].invoke
28
- end
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'spec/rake/spectask'
4
+
5
+ spec_files = Rake::FileList["spec/**/*_spec.rb"]
6
+
7
+
8
+ desc "Run specs for current Rails version"
9
+ Spec::Rake::SpecTask.new do |t|
10
+ t.spec_files = spec_files
11
+ t.spec_opts = lambda {
12
+ @rails_spec_version ? ["-c --format specdoc -- rails_spec_version=#{@rails_spec_version}"] : ["-c --format specdoc"]
13
+ }
14
+ end
15
+
16
+ task :default => :spec
17
+
18
+ desc "Run Rails 2.x specs"
19
+ task :rails2_spec do
20
+ @rails_spec_version = 2
21
+ Rake::Task['spec'].invoke
22
+ end
23
+
24
+ desc "Run Rails 3.x specs"
25
+ task :rails3_spec do
26
+ @rails_spec_version = 3
27
+ Rake::Task['spec'].invoke
28
+ end
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "i18n_routing"
3
+ s.version = "0.2.4"
4
+ s.author = "Guillaume Luccisano"
5
+ s.email = "guillaume.luccisano@gmail.com"
6
+ s.homepage = "http://github.com/kwi/i18n_routing"
7
+ s.summary = "I18n routing module for Rails 2.3.x and Rails 3. Translate your routes with ease !"
8
+ s.description = "I18n_routing is a plugin for Ruby on Rails that lets you easily translate your routes trough the I18n api included in Rails since version 2.2"
9
+
10
+ s.add_dependency('i18n', '> 0.3.5')
11
+
12
+ s.files = Dir["{lib,spec}/**/*", "[A-Z]*", "init.rb"]
13
+ s.require_path = "lib"
14
+
15
+ s.rubyforge_project = s.name
16
+ s.required_rubygems_version = ">= 1.3.4"
17
+ end
data/lib/i18n_routing.rb CHANGED
@@ -3,4 +3,4 @@ if Rails.version < '3'
3
3
  require 'i18n_routing_rails2'
4
4
  else
5
5
  require 'i18n_routing_rails3'
6
- end
6
+ end
@@ -8,7 +8,7 @@
8
8
  module ActionController
9
9
  module Routing
10
10
  class Route #:nodoc:
11
-
11
+
12
12
  alias_method :mkd_initialize, :initialize
13
13
  def initialize(segments = [], requirements = {}, conditions = {})
14
14
  @glang = requirements.delete(:glang)
@@ -23,7 +23,7 @@ module ActionController
23
23
  if @glang and !r.blank?
24
24
  r << " and I18n.locale == :#{@glang}"
25
25
  end
26
-
26
+
27
27
  return r
28
28
  end
29
29
  end
@@ -33,10 +33,10 @@ end
33
33
  module ActionController
34
34
  module Routing
35
35
  class RouteSet #:nodoc:
36
-
36
+
37
37
  attr :locales, true
38
38
  attr :i18n_verbose, true
39
-
39
+
40
40
  class Mapper
41
41
  def localized(locales = I18n.available_locales, opts = {})
42
42
  old_value = @set.locales
@@ -46,9 +46,9 @@ module ActionController
46
46
  ensure
47
47
  @set.locales = old_value
48
48
  end
49
-
49
+
50
50
  end
51
-
51
+
52
52
  class NamedRouteCollection #:nodoc:
53
53
 
54
54
  alias_method :mkd_define_url_helper, :define_url_helper
@@ -95,7 +95,7 @@ module ActionController
95
95
  if @locales and !path.blank? and !Thread.current[:i18n_no_named_localization]
96
96
  #puts "ADD NAMED ROUTE : #{path}"
97
97
  name = name.to_s
98
-
98
+
99
99
  @locales.each do |l|
100
100
  I18n.locale = l
101
101
  nt = "#{l}_#{name}"
@@ -104,7 +104,7 @@ module ActionController
104
104
  puts("[I18n] > localize %-10s: %40s (%s) => %s" % ['route', name, l, t]) if @i18n_verbose
105
105
  end
106
106
  end
107
-
107
+
108
108
  old_v = Thread.current[:globalized]
109
109
  Thread.current[:globalized] = true
110
110
  gl_add_named_route(name, path, options)
@@ -126,33 +126,33 @@ module ActionController
126
126
  def initialize(entities, options)
127
127
  @real_path = options.delete(:real_path)
128
128
  @real_path = @real_path.to_s.singularize if @real_path
129
-
129
+
130
130
  mkd_initialize(entities, options)
131
131
  end
132
132
 
133
133
  def nesting_name_prefix
134
134
  @real_path ? "#{shallow_name_prefix}#{@real_path}_" : "#{shallow_name_prefix}#{singular}_"
135
135
  end
136
-
136
+
137
137
  def nesting_path_prefix
138
138
  @nesting_path_prefix ||= (@real_path ? "#{shallow_path_prefix}/#{path_segment}/:#{@real_path}_id" : "#{shallow_path_prefix}/#{path_segment}/:#{singular}_id")
139
139
  end
140
140
  end
141
-
141
+
142
142
  def switch_globalized_state(state)
143
143
  old_g = Thread.current[:globalized]
144
144
  Thread.current[:globalized] = state
145
145
  yield
146
146
  Thread.current[:globalized] = old_g
147
147
  end
148
-
148
+
149
149
  def switch_no_named_localization(state)
150
150
  old_g = Thread.current[:i18n_no_named_localization]
151
151
  Thread.current[:i18n_no_named_localization] = state
152
152
  yield
153
153
  Thread.current[:i18n_no_named_localization] = old_g
154
154
  end
155
-
155
+
156
156
  def create_globalized_resources(type, namespace, *entities, &block)
157
157
 
158
158
  Thread.current[:i18n_nested_deep] ||= 0
@@ -160,12 +160,12 @@ module ActionController
160
160
 
161
161
  if @set.locales
162
162
  name = entities.dup.shift.to_s
163
-
163
+
164
164
  options = entities.extract_options!
165
165
  opts = options.dup
166
-
166
+
167
167
  opts[:controller] ||= name
168
-
168
+
169
169
  locales = @set.locales
170
170
  translated = nil
171
171
  localized(nil) do
@@ -176,7 +176,7 @@ module ActionController
176
176
  nt = "#{l}_#{name}"
177
177
  opts[:as] = t
178
178
  opts[:glang] = l
179
- opts[:real_path] = opts[:singular] || name
179
+ opts[:real_path] = opts[:singular] || name
180
180
  localized([l]) do
181
181
  translated = true
182
182
  switch_no_named_localization(true) do
@@ -199,7 +199,7 @@ module ActionController
199
199
  else
200
200
  send(type, *entities, &block)
201
201
  end
202
-
202
+
203
203
  Thread.current[:i18n_nested_deep] -= 1
204
204
  end
205
205
 
@@ -214,25 +214,25 @@ module ActionController
214
214
  end
215
215
 
216
216
  private
217
- alias_method :gl_action_options_for, :action_options_for
218
- def action_options_for(action, resource, method = nil, resource_options = {})
219
- opts = gl_action_options_for(action, resource, method, resource_options)
220
-
221
- if Thread.current[:globalized]
222
- Thread.current[:globalized] = resource.plural
223
- if resource.uncountable?
224
- Thread.current[:globalized] = resource.plural.to_s + '_index'
225
- end
226
- Thread.current[:globalized_s] = resource.singular
227
- else
228
- Thread.current[:globalized] = nil
229
- Thread.current[:globalized_s] = nil
230
- end
231
- if resource.options[:glang]
232
- opts[:glang] = resource.options[:glang]
217
+ alias_method :gl_action_options_for, :action_options_for
218
+ def action_options_for(action, resource, method = nil, resource_options = {})
219
+ opts = gl_action_options_for(action, resource, method, resource_options)
220
+
221
+ if Thread.current[:globalized]
222
+ Thread.current[:globalized] = resource.plural
223
+ if resource.uncountable?
224
+ Thread.current[:globalized] = resource.plural.to_s + '_index'
233
225
  end
234
-
235
- opts
226
+ Thread.current[:globalized_s] = resource.singular
227
+ else
228
+ Thread.current[:globalized] = nil
229
+ Thread.current[:globalized_s] = nil
230
+ end
231
+ if resource.options[:glang]
232
+ opts[:glang] = resource.options[:glang]
236
233
  end
234
+
235
+ opts
236
+ end
237
237
  end
238
- end
238
+ end
@@ -1,11 +1,12 @@
1
1
  # encoding: utf-8
2
2
  require 'rack/mount'
3
3
  require 'action_dispatch'
4
+ require 'active_support/core_ext/module'
4
5
 
5
6
  module I18nRouting
6
7
  module Mapper
7
8
 
8
- private
9
+ private
9
10
  # Localize a resources or a resource
10
11
  def localized_resources(type = :resources, *resources, &block)
11
12
  localizable_route = nil
@@ -15,7 +16,7 @@ module I18nRouting
15
16
 
16
17
  options = res.extract_options!
17
18
  r = res.first
18
- resource = type == :resource ? ActionDispatch::Routing::Mapper::SingletonResource.new(r, options) : ActionDispatch::Routing::Mapper::Resource.new(r, options)
19
+ resource = type == :resource ? ActionDispatch::Routing::Mapper::SingletonResource.new(r, options.dup) : ActionDispatch::Routing::Mapper::Resource.new(r, options.dup)
19
20
 
20
21
  # Check for translated resource
21
22
  @locales.each do |locale|
@@ -24,7 +25,7 @@ module I18nRouting
24
25
 
25
26
  # A translated route exists :
26
27
  if localized_path and localized_path != resource.name.to_s
27
- puts("[I18n] > localize %-10s: %40s (%s) => %s" % [type, resource.name, locale, localized_path]) if @i18n_verbose
28
+ puts("[I18n] > localize %-10s: %40s (%s) => /%s" % [type, resource.name, locale, localized_path]) if @i18n_verbose
28
29
  opts = options.dup
29
30
  opts[:path] = localized_path.to_sym
30
31
  opts[:controller] ||= r
@@ -45,7 +46,7 @@ module I18nRouting
45
46
  end
46
47
  return localizable_route
47
48
  end
48
-
49
+
49
50
  # Set if the next route creation will be a localied route or not
50
51
  # If yes, localizable is a name, or a Mapper::Resource
51
52
  # Can take a block, if so, save the current context, set the new
@@ -62,8 +63,8 @@ module I18nRouting
62
63
  end
63
64
  end
64
65
 
65
- public
66
-
66
+ public
67
+
67
68
  # On Routing::Mapper initialization (when doing Application.routes.draw do ...)
68
69
  # prepare routing system to be i18n ready
69
70
  def initialize(*args)
@@ -87,7 +88,7 @@ module I18nRouting
87
88
  @set.named_routes.extend I18nRouting::NamedRouteCollection
88
89
  end
89
90
  end
90
-
91
+
91
92
  # Rails 3 routing system
92
93
  # Create a block for localized routes, in your routes.rb :
93
94
  #
@@ -121,10 +122,10 @@ module I18nRouting
121
122
  super
122
123
  end
123
124
  end
124
-
125
+
125
126
  super
126
127
  end
127
-
128
+
128
129
  def resource(*resources, &block)
129
130
  set_localizable_route(nil) do
130
131
  set_localizable_route(localized_resources(:resource, *resources, &block))
@@ -143,12 +144,12 @@ module I18nRouting
143
144
 
144
145
  # Used for localize simple named routes
145
146
  class LocalizedMapping < ActionDispatch::Routing::Mapper::Mapping
146
-
147
+
147
148
  attr_reader :path
148
-
149
+
149
150
  def initialize(locale, set, scope, args)
150
151
  super(set, scope, args.clone)
151
-
152
+
152
153
  # try to get translated path :
153
154
  I18n.locale = locale
154
155
  ts = @path.gsub(/^\//, '')
@@ -167,12 +168,12 @@ module I18nRouting
167
168
  end
168
169
 
169
170
  end
170
-
171
+
171
172
  # Return true if this route is localizable
172
173
  def localizable?
173
174
  @localized_path != nil
174
175
  end
175
-
176
+
176
177
  end
177
178
 
178
179
  module NamedRouteCollection
@@ -190,12 +191,12 @@ module I18nRouting
190
191
  selector = url_helper_name(name, kind)
191
192
 
192
193
  rlang = if n.kind_of?(ActionDispatch::Routing::Mapper::Resources::Resource) and i = name.to_s.rindex("_#{n.plural}")
193
- "#{selector.to_s[0, i]}_glang_#{n.plural}#{selector.to_s[i + "_#{n.plural}".size, selector.to_s.size]}"
194
- elsif n.kind_of?(ActionDispatch::Routing::Mapper::Resources::Resource) and i = name.to_s.rindex("_#{n.singular}")
195
- "#{selector.to_s[0, i]}_glang_#{n.singular}#{selector.to_s[i + "_#{n.singular}".size, selector.to_s.size]}"
196
- else
197
- "glang_#{selector}"
198
- end
194
+ "#{selector.to_s[0, i]}_glang_#{n.plural}#{selector.to_s[i + "_#{n.plural}".size, selector.to_s.size]}"
195
+ elsif n.kind_of?(ActionDispatch::Routing::Mapper::Resources::Resource) and i = name.to_s.rindex("_#{n.singular}")
196
+ "#{selector.to_s[0, i]}_glang_#{n.singular}#{selector.to_s[i + "_#{n.singular}".size, selector.to_s.size]}"
197
+ else
198
+ "glang_#{selector}"
199
+ end
199
200
 
200
201
  @module.module_eval <<-end_eval # We use module_eval to avoid leaks
201
202
  alias_method :localized_#{selector}, :#{selector}
@@ -210,6 +211,7 @@ module I18nRouting
210
211
  localized_#{selector}(*args)
211
212
  end
212
213
  end
214
+
213
215
  end_eval
214
216
 
215
217
  end
@@ -220,23 +222,29 @@ module I18nRouting
220
222
  # Exists in order to use apropriate localized route when using url_for
221
223
  module RackMountRoute
222
224
 
225
+ # Alias method in order to handle i18n routes
226
+ def self.included(mod)
227
+ mod.send :alias_method_chain, :generate, :i18n_routing
228
+ mod.send :alias_method_chain, :initialize, :i18n_routing
229
+ end
230
+
223
231
  # During route initialization, if a condition i18n_locale is present
224
232
  # Delete it, and store it in @locale
225
- def initialize(app, conditions, defaults, name)
233
+ def initialize_with_i18n_routing(app, conditions, defaults, name)
226
234
  @locale = conditions[:i18n_locale] ? conditions.delete(:i18n_locale).source.to_sym : nil
227
- super
235
+ initialize_without_i18n_routing(app, conditions, defaults, name)
228
236
  end
229
237
 
230
238
  # Called for dynamic route generation
231
239
  # If a @locale is present and if this locale is not the current one
232
240
  # => return nil and refuse to generate the route
233
- def generate(method, params = {}, recall = {}, options = {})
241
+ def generate_with_i18n_routing(method, params = {}, recall = {}, options = {})
234
242
  return nil if @locale and @locale != I18n.locale
235
- super
243
+ generate_without_i18n_routing(method, params, recall, options)
236
244
  end
237
245
 
238
246
  end
239
247
  end
240
248
 
241
249
  ActionDispatch::Routing::Mapper.send :include, I18nRouting::Mapper
242
- Rack::Mount::Route.send :include, I18nRouting::RackMountRoute
250
+ Rack::Mount::Route.send :include, I18nRouting::RackMountRoute
@@ -2,12 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe :localized_routes do
4
4
  before(:all) do
5
-
6
- puts "Route for localize spec"
7
- ActionController::Routing::Routes.clear!
8
-
9
- if Rails.version < '3'
10
5
 
6
+ if !rails3?
7
+ ActionController::Routing::Routes.clear!
11
8
  ActionController::Routing::Routes.draw do |map|
12
9
  map.not_about 'not_about', :controller => 'not_about'
13
10
  map.resources :not_users
@@ -30,10 +27,16 @@ describe :localized_routes do
30
27
  end
31
28
  end
32
29
  end
30
+
31
+ @r = ActionController::Routing::Routes
32
+
33
+ class UrlTester
34
+ include ActionController::UrlWriter
35
+ end
33
36
 
34
37
  else
35
-
36
- ActionController::Routing::Routes.draw do
38
+ @r = ActionDispatch::Routing::RouteSet.new
39
+ @r.draw do
37
40
  match 'not_about' => "not_about#show", :as => :not_about
38
41
  resources :not_users
39
42
  resource :not_contact
@@ -43,160 +46,154 @@ describe :localized_routes do
43
46
 
44
47
  resources :users
45
48
  resource :contact
46
-
49
+
47
50
  resources :authors do
48
51
  resources :books
49
52
  end
50
-
53
+
51
54
  resources :universes do
52
55
  resources :galaxies do
53
56
  resources :planets
54
57
  end
55
58
  end
56
-
59
+
57
60
  end
58
61
  end
59
-
60
- end
61
-
62
+
63
+ class UrlTester; end
64
+ UrlTester.send :include, @r.url_helpers
62
65
 
63
- class UrlTester
64
- include ActionController::UrlWriter
65
66
  end
66
67
 
67
- @routes = UrlTester.new
68
- end
69
-
70
- def routes
71
- @routes
72
68
  end
73
-
69
+
70
+ let(:nested_routes) { @r.named_routes.instance_eval { routes } }
71
+ let(:routes) { UrlTester.new }
72
+
74
73
  def url_for(opts)
75
- ActionController::Routing::Routes.generate_extras(opts).first
74
+ @r.generate_extras(opts).first
76
75
  end
77
76
 
78
- it "should still work for non localized named_route" do
79
- routes.send(:not_about_path).should == "/not_about"
80
- end
81
-
82
- it "should still work for non localized resource" do
83
- routes.send(:not_contact_path).should == "/not_contact"
84
- end
85
-
86
- it "should still work for non localized resources" do
87
- routes.send(:not_users_path).should == "/not_users"
77
+ context "do not break existing behavior" do
78
+
79
+ it "of named_routes" do
80
+ routes.send(:not_about_path).should == "/not_about"
81
+ end
82
+
83
+ it "of a singular resource" do
84
+ routes.send(:not_contact_path).should == "/not_contact"
85
+ end
86
+
87
+ it "of resources" do
88
+ routes.send(:not_users_path).should == "/not_users"
89
+ end
90
+
88
91
  end
89
92
 
90
- it "should works for localized named_route" do
91
- I18n.locale = :fr
92
- routes.send(:about_path).should == "/#{I18n.t :about, :scope => :named_routes_path}"
93
- I18n.locale = :en
94
- routes.send(:about_path).should == "/#{I18n.t :about, :scope => :named_routes_path}"
93
+ context "for default routes" do
94
+
95
+ before do
95
96
  I18n.locale = :de # Not localized
97
+ end
98
+
99
+ it "named_route uses default values" do
96
100
  routes.send(:about_path).should == "/about"
97
101
  end
98
-
99
- it "should works for localized resource" do
100
- I18n.locale = :fr
101
- routes.send(:contact_path).should == "/#{I18n.t :contact, :scope => :resource}"
102
- I18n.locale = :en
103
- routes.send(:contact_path).should == "/#{I18n.t :contact, :scope => :resource}"
104
- I18n.locale = :de # Not localized
102
+
103
+ it "resource generates routes using default values" do
105
104
  routes.send(:contact_path).should == "/contact"
106
105
  end
107
-
108
- it "should works for localized resources" do
109
- I18n.locale = :fr
110
- routes.send(:users_path).should == "/#{I18n.t :users, :scope => :resources}"
111
- I18n.locale = :en
112
- routes.send(:users_path).should == "/#{I18n.t :users, :scope => :resources}"
113
- I18n.locale = :de # Not localized
106
+
107
+ it "resources generates routes using default values" do
114
108
  routes.send(:users_path).should == "/users"
115
109
  end
116
-
117
- it "should works with url_for" do
118
- I18n.locale = :fr
119
- url_for(:controller => :users).should == "/#{I18n.t :users, :scope => :resources}"
120
- url_for(:controller => :about, :action => :show).should == "/#{I18n.t :about, :scope => :named_routes_path}"
121
- I18n.locale = :en
122
- url_for(:controller => :users).should == "/#{I18n.t :users, :scope => :resources}"
123
- I18n.locale = :de # Not localized
110
+
111
+ it "url_for generates route using default values" do
124
112
  url_for(:controller => :users).should == "/users"
125
113
  end
126
-
127
- it "should have correct controller requirements" do
128
-
114
+
115
+ it "nested resources generate routes using default values" do
116
+ routes.send(:author_books_path, 1).should == "/authors/1/books"
129
117
  end
130
-
131
- it "should main resources works with nested resources" do
132
- I18n.locale = :fr
133
- routes.send(:authors_path).should == "/#{I18n.t :authors, :scope => :resources}"
134
- I18n.locale = :de # Not localized
135
- routes.send(:authors_path).should == "/authors"
118
+
119
+ it "deep nested resources generate routes using default values" do
120
+ routes.send(:universes_path).should == "/universes"
121
+ routes.send(:universe_galaxies_path, 1).should == "/universes/1/galaxies"
122
+ routes.send(:universe_galaxy_planets_path, 1, 1).should == "/universes/1/galaxies/1/planets"
136
123
  end
137
-
138
- it "should works with nested resources" do
124
+
125
+ end
126
+
127
+ context "" do
128
+
129
+ before do
139
130
  I18n.locale = :fr
131
+ end
132
+
133
+ it "named_route generates route using localized values" do
134
+ routes.send(:about_path).should == "/#{I18n.t :about, :scope => :named_routes_path}"
135
+ end
136
+
137
+ it "resource generates routes using localized valuess" do
138
+ routes.send(:contact_path).should == "/#{I18n.t :contact, :scope => :resource}"
139
+ end
140
+
141
+ it "resources generates routes using localized values" do
142
+ routes.send(:users_path).should == "/#{I18n.t :users, :scope => :resources}"
143
+ end
144
+
145
+ it "url_for generates routes using localized values" do
146
+ url_for(:controller => :users).should == "/#{I18n.t :users, :scope => :resources}"
147
+ url_for(:controller => :about, :action => :show).should == "/#{I18n.t :about, :scope => :named_routes_path}"
148
+ end
149
+
150
+ it "nested resources generate routes using localized values" do
140
151
  routes.send(:author_books_path, 1).should == "/#{I18n.t :authors, :scope => :resources}/1/#{I18n.t :books, :scope => :resources}"
141
- I18n.locale = :de # Not localized
142
- routes.send(:author_books_path, 1).should == "/authors/1/books"
143
152
  end
144
-
145
- it "should works with deep nested resources" do
146
- I18n.locale = :fr
153
+
154
+ it "deep nested resources generate routes using localized values" do
147
155
  routes.send(:universes_path).should == "/#{I18n.t :universes, :scope => :resources}"
148
156
  routes.send(:universe_galaxies_path, 1).should == "/#{I18n.t :universes, :scope => :resources}/1/#{I18n.t :galaxies, :scope => :resources}"
149
157
  routes.send(:universe_galaxy_planets_path, 1, 1).should == "/#{I18n.t :universes, :scope => :resources}/1/#{I18n.t :galaxies, :scope => :resources}/1/#{I18n.t :planets, :scope => :resources}"
150
- I18n.locale = :de # Not localized
151
- routes.send(:universes_path).should == "/universes"
152
- routes.send(:universe_galaxies_path, 1).should == "/universes/1/galaxies"
153
- routes.send(:universe_galaxy_planets_path, 1, 1).should == "/universes/1/galaxies/1/planets"
154
158
  end
155
-
156
- it "should nested resources have correct significant_keys" do
157
- r = ActionController::Routing::Routes.named_routes.instance_eval { @routes }
158
- #puts r.keys.to_yaml
159
-
160
- r[:author_fr_books].should_not be_nil
161
-
162
- if Rails.version < '3'
163
- r[:author_books].significant_keys.should include(:author_id)
164
- r[:author_fr_books].significant_keys.should include(:author_id)
165
- else
166
- r[:author_books].segment_keys.should include(:author_id)
167
- r[:author_fr_books].segment_keys.should include(:author_id)
159
+
160
+ context "when nested" do
161
+
162
+ it "named routes should not be nil" do
163
+ nested_routes[:author_fr_books].should_not be_nil
168
164
  end
165
+
166
+ context "in Rails #{Rails.version}" do
167
+ it "include the correct significant keys" do
168
+ v = !rails3? ? :significant_keys : :segment_keys
169
+ nested_routes[:author_books].send(v).should include(:author_id)
170
+ nested_routes[:author_fr_books].send(v).should include(:author_id)
171
+ end
172
+ end
173
+
169
174
  end
170
-
171
- it "should deep nested resources have correct significant_keys" do
172
- r = ActionController::Routing::Routes.named_routes.instance_eval { @routes }
173
- #puts r.keys.to_yaml
174
-
175
- r[:universe_galaxy_fr_planet].should_not be_nil
176
-
177
- if Rails.version < '3'
178
- r[:universe_galaxy_planet].significant_keys.should include(:universe_id)
179
- r[:universe_galaxy_fr_planet].significant_keys.should include(:universe_id)
180
- r[:universe_galaxy_planet].significant_keys.should include(:galaxy_id)
181
- r[:universe_galaxy_fr_planet].significant_keys.should include(:galaxy_id)
182
- else
183
- r[:universe_galaxy_planet].segment_keys.should include(:universe_id)
184
- r[:universe_galaxy_fr_planet].segment_keys.should include(:universe_id)
185
- r[:universe_galaxy_planet].segment_keys.should include(:galaxy_id)
186
- r[:universe_galaxy_fr_planet].segment_keys.should include(:galaxy_id)
175
+
176
+ context "when deeply nested" do
177
+
178
+ it "named routes should not be nil" do
179
+ nested_routes[:universe_galaxy_fr_planet].should_not be_nil
180
+ end
181
+
182
+ context "in Rails #{Rails.version}" do
183
+ it "include the correct significant keys" do
184
+ v = !rails3? ? :significant_keys : :segment_keys
185
+ nested_routes[:universe_galaxy_planet].send(v).should include(:universe_id)
186
+ nested_routes[:universe_galaxy_fr_planet].send(v).should include(:universe_id)
187
+ nested_routes[:universe_galaxy_planet].send(v).should include(:galaxy_id)
188
+ nested_routes[:universe_galaxy_fr_planet].send(v).should include(:galaxy_id)
189
+ end
187
190
  end
188
191
  end
189
192
 
190
- it "should nested resources not deep translate with multi helpers" do
191
- r = ActionController::Routing::Routes.named_routes.instance_eval { @routes }
192
-
193
- r.keys.should_not include(:fr_author_books) # Whant fr_author_books
193
+ it "nested resources do not deep translate with multi helpers" do
194
+ nested_routes.keys.should_not include(:fr_author_books) # Want fr_author_books
194
195
  end
195
-
196
- # it "zZ Just print routes :)" do
197
- # r = ActionController::Routing::Routes.named_routes.instance_eval { @routes }
198
- # puts r.keys.collect(&:to_s).sort.to_yaml
199
- # puts "Nb Routes : #{r.keys.size}"
200
- # end
201
196
 
202
- end
197
+ end
198
+
199
+ end
data/spec/spec_helper.rb CHANGED
@@ -5,8 +5,8 @@ $rails_version = ARGV.find { |e| e =~ /rails_spec_version=.*/ }.split('=').last.
5
5
 
6
6
  if !$rails_version
7
7
  begin
8
- require 'rails'
9
- rescue Exception
8
+ require 'rails'
9
+ rescue Exception
10
10
  $rails_version = 2
11
11
  end
12
12
  end
@@ -26,9 +26,14 @@ if Rails.version < '3'
26
26
  else
27
27
  gem 'actionpack', '> 2.9'
28
28
  require 'action_controller'
29
+ require 'action_dispatch'
29
30
  require 'rack/mount'
30
31
  end
31
32
 
33
+ def rails3?
34
+ !(Rails.version < '3')
35
+ end
36
+
32
37
  puts "Launching spec for Rails #{Rails.version}"
33
38
 
34
39
  # Add I18n load_path
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 3
9
- version: 0.2.3
8
+ - 4
9
+ version: 0.2.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Guillaume Luccisano
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-21 00:00:00 +02:00
17
+ date: 2010-04-30 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -48,10 +48,12 @@ files:
48
48
  - spec/locales/fr.yml
49
49
  - spec/spec_helper.rb
50
50
  - CHANGELOG.rdoc
51
+ - i18n_routing-0.2.4.gem
52
+ - i18n_routing.gemspec
53
+ - init.rb
51
54
  - MIT-LICENSE
52
55
  - Rakefile
53
56
  - README.rdoc
54
- - init.rb
55
57
  has_rdoc: true
56
58
  homepage: http://github.com/kwi/i18n_routing
57
59
  licenses: []