i18n_routing 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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: []