route_translator 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmZkNDU4NGVlZjk3YWQ5ZmNmYjlmNTZiNjczNzcxODNmYzIxNTNiZQ==
5
+ data.tar.gz: !binary |-
6
+ MGFlZTZiYWVkZWFkZTU0YzdjZjlmYjRkM2U5NTFjODI4NWVjYzljZA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MmM4ZTQwNzZhMmIxNjM2NzA5NGY2YTMyMjkzOTZjZWI0M2FkY2I1MjEyMGNl
10
+ OTAxYjMyOTBmNjY2ZDQ4YmZmYzE2ZWU4YjZkZWUwOTM0YWFmZTkzMzI2MTQ4
11
+ NGI5MmFjMmRjNmMyYjU0YjkyYjM5NDAzNmM0MjI5MGJhYjMyYzY=
12
+ data.tar.gz: !binary |-
13
+ MjkyZjZlODExMTFhZThiZGY0NWE2M2YzZjllZWVlOTViYjg5MzAxZTYwOGUy
14
+ MTAxNTkzODI0ZDkzODQ5Mjg0OThhYWYzZGMwNWQ5ZDNkOGNhNmQ1OWY5NzY3
15
+ OGVkMjA5ZjBkOTU0MmE1YzI0YzBiZmFiNzE4ZDQwYmY4OTI2NzE=
@@ -10,13 +10,15 @@ module RouteTranslator
10
10
 
11
11
  TRANSLATABLE_SEGMENT = /^([-_a-zA-Z0-9]+)(\()?/.freeze
12
12
 
13
- Configuration = Struct.new(:force_locale, :generate_unlocalized_routes, :translation_file, :locale_param_key)
13
+ Configuration = Struct.new(:force_locale, :hide_locale, :generate_unlocalized_routes, :locale_param_key, :generate_unnamed_unlocalized_routes)
14
14
 
15
15
  def self.config(&block)
16
16
  @config ||= Configuration.new
17
17
  @config.force_locale ||= false
18
+ @config.hide_locale ||= false
18
19
  @config.generate_unlocalized_routes ||= false
19
20
  @config.locale_param_key ||= :locale
21
+ @config.generate_unnamed_unlocalized_routes ||= false
20
22
  yield @config if block
21
23
  @config
22
24
  end
@@ -2,10 +2,17 @@ require 'action_controller'
2
2
 
3
3
  module ActionController
4
4
  class Base
5
- before_filter :set_locale_from_url
5
+ around_filter :set_locale_from_url
6
6
 
7
- def set_locale_from_url
8
- I18n.locale = params[RouteTranslator.locale_param_key]
7
+ def set_locale_from_url(&block)
8
+ I18n.with_locale params[RouteTranslator.locale_param_key], &block
9
9
  end
10
10
  end
11
+
12
+ class TestCase
13
+ include ActionController::UrlFor
14
+
15
+ delegate :env, :request, :to => :@controller
16
+ def _routes; @routes; end
17
+ end
11
18
  end
@@ -26,11 +26,10 @@ module ActionDispatch
26
26
  end
27
27
 
28
28
  mapping = Mapping.new(@set, @scope, path, options)
29
- app, conditions, requirements, defaults, as, anchor = mapping.to_route
30
29
  if @localized
31
- @set.add_localized_route(app, conditions, requirements, defaults, as, anchor)
30
+ @set.add_localized_route(*mapping.to_route)
32
31
  else
33
- @set.add_route(app, conditions, requirements, defaults, as, anchor)
32
+ @set.add_route(*mapping.to_route)
34
33
  end
35
34
  end
36
35
  else
@@ -10,4 +10,4 @@ module ActionDispatch
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -17,12 +17,23 @@ module RouteTranslator
17
17
  __send__("#{old_name}_#{I18n.default_locale.to_s.underscore}_#{suffix}", *args)
18
18
  end
19
19
  end
20
+
21
+ # Including the named routes helpers module
22
+ [ActionController::TestCase, ActionView::TestCase, ActionMailer::TestCase].each do |klass|
23
+ klass.__send__(:include, helper_container)
24
+ end
20
25
  end
21
26
  end
22
27
 
23
28
  def self.translations_for(app, conditions, requirements, defaults, route_name, anchor, route_set, &block)
24
29
  add_untranslated_helpers_to_controllers_and_views(route_name, route_set.named_routes.module)
25
- I18n.available_locales.each do |locale|
30
+ # Make sure the default locale is translated in last place to avoid
31
+ # problems with wildcards when default locale is omitted in paths. The
32
+ # default routes will catch all paths like wildcard if it is translated first
33
+ available_locales = I18n.available_locales.dup
34
+ available_locales.delete I18n.default_locale
35
+ available_locales.push I18n.default_locale
36
+ available_locales.each do |locale|
26
37
  new_conditions = conditions.dup
27
38
  new_conditions[:path_info] = translate_path(conditions[:path_info], locale)
28
39
  if new_conditions[:required_defaults] && !new_conditions[:required_defaults].include?(RouteTranslator.locale_param_key)
@@ -34,25 +45,30 @@ module RouteTranslator
34
45
  new_route_name = nil if new_route_name && route_set.named_routes.routes[new_route_name.to_sym] #TODO: Investigate this :(
35
46
  block.call(app, new_conditions, new_requirements, new_defaults, new_route_name, anchor)
36
47
  end
37
- block.call(app, conditions, requirements, defaults, route_name, anchor) if RouteTranslator.config.generate_unlocalized_routes
48
+ if RouteTranslator.config.generate_unnamed_unlocalized_routes
49
+ block.call(app, conditions, requirements, defaults, nil, anchor)
50
+ elsif RouteTranslator.config.generate_unlocalized_routes
51
+ block.call(app, conditions, requirements, defaults, route_name, anchor)
52
+ end
38
53
  end
39
54
 
40
55
  # Translates a path and adds the locale prefix.
41
56
  def self.translate_path(path, locale)
42
57
  new_path = path.dup
43
- final_optional_segments = new_path.slice!(/(\(.+\))$/)
44
- new_path = new_path.split("/").map{|seg| translate_path_segment(seg, locale)}.join('/')
58
+ final_optional_segments = new_path.slice!(/(\([^\/]+\))$/)
59
+ translated_segments = new_path.split("/").map{ |seg| translate_path_segment(seg, locale) }.select{ |seg| !seg.blank? }
45
60
 
46
- # Add locale prefix if it's not the default locale,
61
+ # if not hiding locale then
62
+ # add locale prefix if it's not the default locale,
47
63
  # or forcing locale to all routes,
48
64
  # or already generating actual unlocalized routes
49
- if !default_locale?(locale) || RouteTranslator.config.force_locale || RouteTranslator.config.generate_unlocalized_routes
50
- new_path = "/#{locale.to_s.downcase}#{new_path}"
65
+ if !RouteTranslator.config.hide_locale && (!default_locale?(locale) || RouteTranslator.config.force_locale || RouteTranslator.config.generate_unlocalized_routes || RouteTranslator.config.generate_unnamed_unlocalized_routes)
66
+ if !locale_param_present?(new_path)
67
+ translated_segments.unshift locale.to_s.downcase
68
+ end
51
69
  end
52
70
 
53
- new_path = "/" if new_path.blank?
54
-
55
- "#{new_path}#{final_optional_segments}"
71
+ "/#{translated_segments.join('/')}#{final_optional_segments}".gsub(/\/\(\//, '(/')
56
72
  end
57
73
 
58
74
  def self.translate_name(n, locale)
@@ -66,19 +82,24 @@ module RouteTranslator
66
82
  # Tries to translate a single path segment. If the path segment
67
83
  # contains sth. like a optional format "people(.:format)", only
68
84
  # "people" will be translated, if there is no translation, the path
69
- # segment is blank or begins with a ":" (param key), the segment
70
- # is returned untouched
85
+ # segment is blank, begins with a ":" (param key) or "*" (wildcard),
86
+ # the segment is returned untouched
71
87
  def self.translate_path_segment segment, locale
72
- return segment if segment.blank? or segment.starts_with?(":")
88
+ return segment if segment.blank? or segment.starts_with?(":") or segment.starts_with?("(") or segment.starts_with?("*")
73
89
 
90
+ appended_part = segment.slice!(/(\()$/)
74
91
  match = TRANSLATABLE_SEGMENT.match(segment)[1] rescue nil
75
92
 
76
- (translate_string(match, locale) || segment)
93
+ (translate_string(match, locale) || segment) + appended_part.to_s
77
94
  end
78
95
 
79
96
  def self.translate_string(str, locale)
80
97
  res = I18n.translate(str, :scope => :routes, :locale => locale, :default => str)
81
98
  URI.escape(res)
82
99
  end
100
+
101
+ def self.locale_param_present?(path)
102
+ !(path.split('/').detect { |segment| segment.to_s == ":#{RouteTranslator.locale_param_key.to_s}" }.nil?)
103
+ end
83
104
  end
84
105
  end
@@ -1,3 +1,3 @@
1
1
  module RouteTranslator
2
- VERSION = '3.1.0'
2
+ VERSION = '3.2.0'
3
3
  end
@@ -9,5 +9,6 @@ module Dummy
9
9
  class Application < Rails::Application
10
10
  # config.logger = Logger.new(File.new("/dev/null", 'w'))
11
11
  config.active_support.deprecation = :log
12
+ config.eager_load = false
12
13
  end
13
14
  end
@@ -2,5 +2,5 @@ Dummy::Application.routes.draw do
2
2
  localized do
3
3
  get 'dummy', :to => 'dummy#dummy'
4
4
  end
5
- mount DummyMountedApp => '/dummy_mounted_app'
5
+ mount DummyMountedApp.new => '/dummy_mounted_app'
6
6
  end
@@ -1,6 +1,5 @@
1
- require 'sinatra'
2
- class DummyMountedApp < Sinatra::Base
3
- get "/" do
4
- "Good"
1
+ class DummyMountedApp
2
+ def call(env)
3
+ [200, {"Content-Type" => "text/plain"}, ["Good"]]
5
4
  end
6
5
  end
@@ -20,4 +20,13 @@ class IntegrationTest < class_to_inherit
20
20
  assert_equal "Good", @response.body
21
21
  assert_response :success
22
22
  end
23
+
24
+ def test_i18n_locale_thread_safe
25
+ config_default_locale_settings 'en'
26
+
27
+ get '/es/dummy'
28
+ assert_equal 'es', @response.body
29
+
30
+ assert_equal :en, I18n.locale
31
+ end
23
32
  end
@@ -3,6 +3,7 @@ es:
3
3
  people: gente
4
4
  products: productos
5
5
  tr_param: tr_parametro
6
+ blank: ""
6
7
 
7
8
  ru:
8
9
  routes:
data/test/routing_test.rb CHANGED
@@ -18,8 +18,10 @@ class TranslateRoutesTest < ActionController::TestCase
18
18
 
19
19
  def teardown
20
20
  config_force_locale false
21
+ config_hide_locale false
21
22
  config_generate_unlocalized_routes false
22
23
  config_default_locale_settings("en")
24
+ config_generate_unnamed_unlocalized_routes false
23
25
  end
24
26
 
25
27
  def test_unnamed_root_route
@@ -55,6 +57,17 @@ class TranslateRoutesTest < ActionController::TestCase
55
57
  assert_routing '/es/productos/a/b', :controller => 'products', :action => 'index', :locale => 'es', :non_optional_param => 'b', :optional_param => 'a'
56
58
  end
57
59
 
60
+ def test_translations_after_optional_segments
61
+ draw_routes do
62
+ localized do
63
+ get '(/:optional_param)/products', :to => 'products#index'
64
+ end
65
+ end
66
+
67
+ assert_routing '/es/productos', :controller => 'products', :action => 'index', :locale => 'es'
68
+ assert_routing '/es/a/productos', :controller => 'products', :action => 'index', :locale => 'es', :optional_param => 'a'
69
+ end
70
+
58
71
  def test_dynamic_segments_dont_get_translated
59
72
  draw_routes do
60
73
  localized do
@@ -64,6 +77,15 @@ class TranslateRoutesTest < ActionController::TestCase
64
77
  assert_routing '/es/productos/a', :controller => 'products', :action => 'index', :locale => 'es', :tr_param => 'a'
65
78
  end
66
79
 
80
+ def test_wildcards_dont_get_translated
81
+ draw_routes do
82
+ localized do
83
+ get 'products/*tr_param', :to => 'products#index'
84
+ end
85
+ end
86
+ assert_routing '/es/productos/a/b', :controller => 'products', :action => 'index', :locale => 'es', :tr_param => 'a/b'
87
+ end
88
+
67
89
  def test_resources
68
90
  config_default_locale_settings 'es'
69
91
 
@@ -227,7 +249,7 @@ class TranslateRoutesTest < ActionController::TestCase
227
249
  assert_routing '/en/people', :controller => 'people', :action => 'index', :locale => 'en'
228
250
  assert_routing 'gente', :controller => 'people', :action => 'index', :locale => 'es'
229
251
 
230
-
252
+
231
253
  assert_helpers_include :people_en, :people_es, :people
232
254
  end
233
255
 
@@ -243,7 +265,7 @@ class TranslateRoutesTest < ActionController::TestCase
243
265
  assert_routing '/people', :controller => 'people', :action => 'index', :locale => 'en'
244
266
  assert_routing '/es/gente', :controller => 'people', :action => 'index', :locale => 'es'
245
267
 
246
-
268
+
247
269
  assert_helpers_include :people_en, :people_es, :people
248
270
  end
249
271
 
@@ -275,7 +297,7 @@ class TranslateRoutesTest < ActionController::TestCase
275
297
  assert_routing '/es/gente', :controller => 'people', :action => 'index', :locale => 'es'
276
298
  assert_routing '/people', :controller => 'people', :action => 'index', :locale => 'en'
277
299
 
278
-
300
+
279
301
  assert_helpers_include :people_en, :people_es, :people
280
302
  end
281
303
 
@@ -326,6 +348,7 @@ class TranslateRoutesTest < ActionController::TestCase
326
348
  end
327
349
 
328
350
  def test_force_locale
351
+ I18n.locale = 'en'
329
352
  config_default_locale_settings 'en'
330
353
  config_force_locale true
331
354
 
@@ -337,9 +360,15 @@ class TranslateRoutesTest < ActionController::TestCase
337
360
 
338
361
  assert_routing '/en/people', :controller => 'people', :action => 'index', :locale => 'en'
339
362
  assert_unrecognized_route '/people', :controller => 'people', :action => 'index'
363
+ assert_equal '/en/people', @routes.url_helpers.people_en_path
364
+ assert_equal '/en/people', @routes.url_helpers.people_path
365
+ I18n.locale = 'es'
366
+ # The dynamic route maps to the current locale
367
+ assert_equal '/es/gente', @routes.url_helpers.people_path
340
368
  end
341
369
 
342
370
  def test_generate_unlocalized_routes
371
+ I18n.locale = 'en'
343
372
  config_default_locale_settings 'en'
344
373
  config_generate_unlocalized_routes true
345
374
 
@@ -351,22 +380,82 @@ class TranslateRoutesTest < ActionController::TestCase
351
380
 
352
381
  assert_routing '/en/people', :controller => 'people', :action => 'index', :locale => 'en'
353
382
  assert_routing '/people', :controller => 'people', :action => 'index'
383
+ assert_equal '/en/people', @routes.url_helpers.people_en_path
384
+ assert_equal '/people', @routes.url_helpers.people_path
385
+ I18n.locale = 'es'
386
+ # The dynamic route maps to the default locale, not the current
387
+ assert_equal '/people', @routes.url_helpers.people_path
354
388
  end
355
389
 
356
- def test_config_translation_file
357
- config_default_locale_settings 'es'
390
+ def test_generate_unnamed_unlocalized_routes
391
+ I18n.locale = 'en'
392
+ config_default_locale_settings 'en'
393
+ config_generate_unnamed_unlocalized_routes true
358
394
 
359
395
  draw_routes do
360
396
  localized do
361
- root :to => 'people#index'
397
+ get 'people', :to => 'people#index', :as => 'people'
362
398
  end
363
399
  end
364
400
 
365
- assert_routing '/', :controller => 'people', :action => 'index', :locale => 'es'
366
- assert_routing '/en', :controller => 'people', :action => 'index', :locale => 'en'
367
- assert_unrecognized_route '/es', :controller => 'people', :action => 'index', :locale => 'es'
401
+ assert_routing '/en/people', :controller => 'people', :action => 'index', :locale => 'en'
402
+ assert_routing '/people', :controller => 'people', :action => 'index'
403
+ assert_equal '/en/people', @routes.url_helpers.people_en_path
404
+ assert_equal '/en/people', @routes.url_helpers.people_path
405
+
406
+ I18n.locale = 'es'
407
+ # The dynamic route maps to the current locale
408
+ assert_equal '/es/gente', @routes.url_helpers.people_path
409
+ end
410
+
411
+ def test_blank_localized_routes
412
+ I18n.locale = 'en'
413
+ config_default_locale_settings 'en'
414
+
415
+ draw_routes do
416
+ localized do
417
+ get 'people/blank', :to => 'people#index', :as => 'people'
418
+ end
419
+ end
420
+
421
+ I18n.locale = 'en'
422
+ assert_routing '/people/blank', :controller => 'people', :action => 'index', :locale => 'en'
423
+ assert_equal '/people/blank', @routes.url_helpers.people_en_path
424
+
425
+ I18n.locale = 'es'
426
+ assert_routing '/es/gente', :controller => 'people', :action => 'index', :locale => 'es'
427
+ assert_equal '/es/gente', @routes.url_helpers.people_es_path
428
+ end
429
+
430
+ def test_dont_add_locale_to_routes_if_local_param_present
431
+ config_default_locale_settings 'es'
432
+ config_force_locale true
433
+
434
+ draw_routes do
435
+ scope 'segment/:locale' do
436
+ localized do
437
+ resources :products
438
+ end
439
+ end
440
+ end
441
+
442
+ assert_routing '/segment/es/productos/product_slug', :controller => 'products', :action => 'show', :locale => 'es', :id => 'product_slug'
443
+ assert_routing '/segment/en/products/product_slug', :controller => 'products', :action => 'show', :locale => 'en', :id => 'product_slug'
368
444
  end
369
445
 
446
+ def test_config_hide_locale
447
+ config_default_locale_settings 'en'
448
+ config_hide_locale true
449
+
450
+ draw_routes do
451
+ localized do
452
+ resources :people
453
+ end
454
+ end
455
+
456
+ assert_routing '/gente', :controller => 'people', :action => 'index', :locale => 'es'
457
+ assert_routing '/people', :controller => 'people', :action => 'index', :locale => 'en'
458
+ end
370
459
 
371
460
  def test_action_controller_gets_locale_setter
372
461
  ActionController::Base.instance_methods.include?('set_locale_from_url')
@@ -379,4 +468,37 @@ class TranslateRoutesTest < ActionController::TestCase
379
468
  def test_action_view_gets_locale_suffix_helper
380
469
  ActionView::Base.instance_methods.include?('locale_suffix')
381
470
  end
471
+
472
+ def test_action_controller_test_case_reads_default_urls
473
+ test_case_reads_default_urls(ActionController::TestCase)
474
+ end
475
+
476
+ def test_action_view_test_case_reads_default_urls
477
+ test_case_reads_default_urls(ActionView::TestCase)
478
+ end
479
+
480
+ def test_action_mailer_test_case_reads_default_urls
481
+ test_case_reads_default_urls(ActionMailer::TestCase)
482
+ end
483
+
484
+ private
485
+ def test_case_reads_default_urls(klass)
486
+ config_default_locale_settings 'en'
487
+
488
+ draw_routes do
489
+ localized do
490
+ resources :person
491
+ end
492
+ end
493
+
494
+ test_case = klass.new(:respond_to?)
495
+
496
+ # Not localized
497
+ assert test_case.respond_to?(:people_path)
498
+ assert test_case.respond_to?(:new_person_path)
499
+
500
+ # Localized
501
+ assert test_case.respond_to?(:people_en_path)
502
+ assert test_case.respond_to?(:new_person_en_path)
503
+ end
382
504
  end
data/test/test_helper.rb CHANGED
@@ -2,6 +2,9 @@ require 'test/unit'
2
2
  require 'minitest/mock'
3
3
  require 'minitest/unit'
4
4
 
5
+ require 'i18n'
6
+ I18n.enforce_available_locales = true
7
+
5
8
  require "rails"
6
9
  require "action_controller/railtie"
7
10
 
@@ -24,7 +27,7 @@ module RouteTranslator
24
27
  def draw_routes(&block)
25
28
  @routes.draw(&block)
26
29
  if @routes.respond_to?(:install_helpers)
27
- @routes.install_helpers
30
+ @routes.install_helpers
28
31
  else
29
32
  ActionView::Base.send(:include, @routes.url_helpers)
30
33
  ActionController::Base.send(:include, @routes.url_helpers)
@@ -39,12 +42,16 @@ module RouteTranslator
39
42
  RouteTranslator.config.force_locale = boolean
40
43
  end
41
44
 
45
+ def config_hide_locale(boolean)
46
+ RouteTranslator.config.hide_locale = boolean
47
+ end
48
+
42
49
  def config_generate_unlocalized_routes(boolean)
43
50
  RouteTranslator.config.generate_unlocalized_routes = boolean
44
51
  end
45
52
 
46
- def config_translation_file (file)
47
- RouteTranslator.config.translation_file = file
53
+ def config_generate_unnamed_unlocalized_routes(boolean)
54
+ RouteTranslator.config.generate_unnamed_unlocalized_routes = boolean
48
55
  end
49
56
 
50
57
  def path_string(route)
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: route_translator
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
5
- prerelease:
4
+ version: 3.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Raul Murciano
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-05-25 00:00:00.000000000 Z
12
+ date: 2014-03-13 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: minitest
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,15 +21,27 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
30
27
  version: 4.7.0
31
28
  - !ruby/object:Gem::Dependency
32
- name: sinatra
29
+ name: pry
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry-nav
33
44
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
45
  requirements:
36
46
  - - ! '>='
37
47
  - !ruby/object:Gem::Version
@@ -39,7 +49,6 @@ dependencies:
39
49
  type: :development
40
50
  prerelease: false
41
51
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
52
  requirements:
44
53
  - - ! '>='
45
54
  - !ruby/object:Gem::Version
@@ -75,27 +84,26 @@ files:
75
84
  - test/test_helper.rb
76
85
  homepage: http://github.com/enriclluelles/route_translator
77
86
  licenses: []
87
+ metadata: {}
78
88
  post_install_message:
79
89
  rdoc_options: []
80
90
  require_paths:
81
91
  - lib
82
92
  required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
93
  requirements:
85
94
  - - ! '>='
86
95
  - !ruby/object:Gem::Version
87
96
  version: '0'
88
97
  required_rubygems_version: !ruby/object:Gem::Requirement
89
- none: false
90
98
  requirements:
91
99
  - - ! '>='
92
100
  - !ruby/object:Gem::Version
93
101
  version: '0'
94
102
  requirements: []
95
103
  rubyforge_project:
96
- rubygems_version: 1.8.23
104
+ rubygems_version: 2.2.2
97
105
  signing_key:
98
- specification_version: 3
106
+ specification_version: 4
99
107
  summary: Translate your Rails routes in a simple manner
100
108
  test_files:
101
109
  - test/dummy/app/controllers/dummy_controller.rb