dragoman 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98d21fd0c11e6b04a5c566370a212cfb13069c21
4
- data.tar.gz: 1a8fc051d3c4e267c2eda8258596db72ee9ca07e
3
+ metadata.gz: a203343dac859415cb421f222a4ca5be311f540d
4
+ data.tar.gz: e38180d72757b4752bc88ffcfa6e7fd38115a8b4
5
5
  SHA512:
6
- metadata.gz: f325ed8abd2e5e93688feb77156d5dff9233bc4b3af8aa0fc03cd72eeeefa3c83eb21953ff5b46e8fb7e2ca1d12c20aa7f8bd10c5142d8a5d1d1f6b4fd889f48
7
- data.tar.gz: 874f57c046af88f991ceece65f4375ce24d20a59cf4a5d023c99317db7f022b87e1f6cb71e4bf97c37ed2ec21530150458cdcf6f13e3be0beed868c3f8aab688
6
+ metadata.gz: 2377cbbd03c6ea5c8fedce7a3e9943632bb2f62ac1c5a503100ee7bf7d580b046ee80b8d06da086d793f849454ebe707dcff0c20d0fdc4690892d7e8efad8bfa
7
+ data.tar.gz: 738305615fa10ed287b2889cb71991642515b00b0b3fe33c39603918c382fe6fe670c1351232b65f38b40bdc36a05120312491639d5678b8bb3f23e5634d435d
@@ -1,57 +1,11 @@
1
1
  module Dragoman
2
2
  module Mapper
3
-
4
- module Mapping
5
- def build_with_localization scope, set, path, as, options
6
- if options[:locale]
7
- Dragoman::UrlHelpers.add_untranslated_helpers as, set.named_routes.path_helpers_module, set.named_routes.url_helpers_module if as
8
- as = "#{as}_#{options[:locale]}" if as.present?
9
- as = nil if as && set.named_routes.routes[as.to_sym] # TODO: why do we need to set as to nil?
10
- end
11
- build_without_localization scope, set, path, as, options
12
- end
13
- end
14
-
15
- private
16
-
17
3
  def localize
18
- @current_locale = nil
19
- locales = I18n.available_locales
20
- locales.each do |locale|
21
- @current_locale = locale.to_s
4
+ @locales = I18n.available_locales
5
+ scope '(:locale)', defaults: {dragoman_options: {locales: @locales}} do
22
6
  yield
23
7
  end
24
- @current_locale = nil
25
- end
26
-
27
- def add_route_with_localization(action, options)
28
- if @current_locale
29
- options[:path] = Dragoman::Translator.translate_path(options[:path] || action, @current_locale) unless canonical_action?(action)
30
- options[:locale] = @current_locale
31
- end
32
- add_route_without_localization action, options
33
- end
34
-
35
- def scope_with_localization(*args, &block)
36
- if @current_locale
37
- options = args.extract_options!.dup
38
- if options[:path] || args.any?
39
- options[:path] = Dragoman::Translator.translate_path(options[:path] || args.flatten.join('/'), @current_locale)
40
- options[:shallow_path] = Dragoman::Translator.translate_path(options[:shallow_path], @current_locale) if options[:shallow_path]
41
- end
42
- scope_without_localization options, &block
43
- else
44
- scope_without_localization *args, &block
45
- end
46
- end
47
-
48
- def resources_with_localization(*resources, &block)
49
- options = resources.extract_options!.dup
50
- if @current_locale
51
- options[:path] = Dragoman::Translator.translate_path(options[:path] || resources.last, @current_locale)
52
- end
53
- resources_without_localization(*resources, options, &block)
8
+ @locales = nil
54
9
  end
55
-
56
10
  end
57
11
  end
@@ -2,11 +2,8 @@ module Dragoman
2
2
 
3
3
  class Railtie < Rails::Railtie
4
4
  initializer 'dragoman.insert_into_routing_mapper' do |app|
5
- if Rails::VERSION::MAJOR >= 4
6
- ActionDispatch::Routing::Mapper.send :include, Dragoman::MapperRails4
7
- else
8
- ActionDispatch::Routing::Mapper.send :include, Dragoman::MapperRails3
9
- end
5
+ ActionDispatch::Routing::Mapper.send :include, Dragoman::Mapper
6
+ ActionDispatch::Routing::RouteSet.send :include, Dragoman::RouteSet
10
7
  end
11
8
  end
12
9
 
@@ -0,0 +1,40 @@
1
+ module Dragoman
2
+ module RouteSet
3
+
4
+ def self.included(base)
5
+ base.send :alias_method_chain, :add_route, :localization
6
+ end
7
+
8
+ def add_route_with_localization(app, conditions = {}, requirements = {}, defaults = {}, name = nil, anchor = true)
9
+ dragoman_options = defaults.delete :dragoman_options
10
+ path_helpers, url_helpers = helper_modules
11
+ if dragoman_options
12
+ Dragoman::UrlHelpers.add_untranslated_helpers name, path_helpers, url_helpers if name
13
+ dragoman_options[:locales].each do |locale|
14
+ new_conditions = conditions.dup
15
+ new_requirements = requirements.dup
16
+
17
+ new_name = name ? "#{name}_#{locale}" : nil
18
+ new_name = nil if new_name && named_routes.routes[new_name.to_sym] # Why is this necessary
19
+
20
+ if new_path = new_conditions.delete(:path_info)
21
+ new_path = Dragoman::Translator.translate_path new_path, locale
22
+ new_conditions[:path_info] = new_path
23
+ new_conditions[:parsed_path_info] = Dragoman::Journey::Parser.new.parse new_path if new_conditions[:parsed_path_info]
24
+ end
25
+ new_requirements[:locale] = locale
26
+ add_route_without_localization app, new_conditions, new_requirements, defaults.dup, new_name, anchor
27
+ end
28
+ else
29
+ add_route_without_localization app, conditions, requirements, defaults, name, anchor
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def helper_modules
36
+ named_routes.respond_to?(:path_helpers_module) ? [named_routes.path_helpers_module, named_routes.url_helpers_module] : [named_routes.module, named_routes.module]
37
+ end
38
+
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Dragoman
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/dragoman.rb CHANGED
@@ -13,9 +13,4 @@ require "dragoman/url_helpers"
13
13
  require "dragoman/mapper"
14
14
  require "dragoman/railtie" if defined?(Rails)
15
15
  require "dragoman/version"
16
-
17
- if Rails::VERSION::MAJOR >= 4
18
- require "dragoman/mapper_rails4"
19
- else
20
- require "dragoman/mapper_rails3"
21
- end
16
+ require "dragoman/route_set"
@@ -39,6 +39,12 @@ Dummy::Application.routes.draw do
39
39
  # route without translation
40
40
  get 'sounds' => 'application#index'
41
41
 
42
+ resources :votes, only: :show do
43
+ collection do
44
+ get 'positive'
45
+ end
46
+ end
47
+
42
48
  end
43
49
 
44
50
  end
@@ -19,4 +19,5 @@ nl:
19
19
  fast: snelle
20
20
  cars: autos
21
21
  music: ""
22
+ positive: positief
22
23
 
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- class ProductsController < ApplicationController
4
- end
3
+ class ProductsController < ApplicationController; end
4
+ class VotesController < ApplicationController; end
5
5
 
6
6
  describe 'routes' do
7
7
 
@@ -15,10 +15,10 @@ describe 'routes' do
15
15
  it 'translates resources' do
16
16
  expect(products_en_path).to eq '/products'
17
17
  expect(new_product_en_path).to eq '/products/new'
18
- expect(edit_product_en_path(1)).to eq '/products/1/edit'
18
+ expect(edit_product_en_path(id: 1)).to eq '/products/1/edit'
19
19
  expect(products_nl_path).to eq '/producten'
20
20
  expect(new_product_nl_path).to eq '/producten/nieuw'
21
- expect(edit_product_nl_path(1)).to eq '/producten/1/wijzigen'
21
+ expect(edit_product_nl_path(id: 1)).to eq '/producten/1/wijzigen'
22
22
  end
23
23
 
24
24
  it 'translates resource' do
@@ -41,8 +41,11 @@ describe 'routes' do
41
41
  end
42
42
 
43
43
  it 'sets the correct locale' do
44
- assert_routing '/producten', :controller => 'products', :action => 'index', :locale => 'nl'
45
- assert_routing '/products', :controller => 'products', :action => 'index', :locale => 'en'
44
+ expect(get: '/producten').to route_to(controller: 'products', action: 'index')
45
+ expect(get: '/products').to route_to(controller: 'products', action: 'index')
46
+ expect(get: '/nl/producten').to route_to(controller: 'products', action: 'index', locale: 'nl')
47
+ expect(get: '/en/products').to route_to(controller: 'products', action: 'index', locale: 'en')
48
+ expect(get: '/en/producten').not_to be_routable
46
49
  end
47
50
 
48
51
  it 'skips empty paths' do
@@ -56,7 +59,7 @@ describe 'routes' do
56
59
  end
57
60
 
58
61
  it 'looks up translations by the path option if present' do
59
- expect(edit_invitation_nl_path(2)).to eq '/uitnodigingen/2/accepteren'
62
+ expect(edit_invitation_nl_path(id: 2)).to eq '/uitnodigingen/2/accepteren'
60
63
  end
61
64
 
62
65
  it 'looks up resources translations by the path option if present' do
@@ -65,8 +68,8 @@ describe 'routes' do
65
68
  end
66
69
 
67
70
  it 'translated shallow paths' do
68
- expect(driver_nl_path(3)).to eq '/snelle/bestuurders/3'
69
- expect(driver_en_path(3)).to eq '/fast/drivers/3'
71
+ expect(driver_nl_path(id: 3)).to eq '/snelle/bestuurders/3'
72
+ expect(driver_en_path(id: 3)).to eq '/fast/drivers/3'
70
73
  end
71
74
 
72
75
  it 'skips blank translations' do
@@ -78,6 +81,11 @@ describe 'routes' do
78
81
  expect(sounds_nl_path).to eq '/sounds'
79
82
  end
80
83
 
84
+ it 'translates routes in the original order as specified in routes.rb' do
85
+ expect(get: 'votes/positive').to route_to(action: 'positive', controller: 'votes')
86
+ expect(get: 'votes/positief').to route_to(action: 'positive', controller: 'votes') # should use 'positive' action instead of 'show'
87
+ end
88
+
81
89
  describe 'adds untranslated path helpers' do
82
90
  it 'uses the I18n locale' do
83
91
  I18n.locale = :nl
data/spec/spec_helper.rb CHANGED
@@ -18,6 +18,10 @@ RSpec.configure do |config|
18
18
 
19
19
  config.infer_spec_type_from_file_location!
20
20
 
21
+ config.after(:all) do
22
+ print_routes
23
+ end
24
+
21
25
  config.after(:each) do
22
26
  I18n.locale = I18n.default_locale = :en
23
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dragoman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pieter Visser
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-06 00:00:00.000000000 Z
12
+ date: 2015-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec-rails
@@ -59,9 +59,8 @@ files:
59
59
  - gemfiles/rails_4.2.gemfile
60
60
  - lib/dragoman.rb
61
61
  - lib/dragoman/mapper.rb
62
- - lib/dragoman/mapper_rails3.rb
63
- - lib/dragoman/mapper_rails4.rb
64
62
  - lib/dragoman/railtie.rb
63
+ - lib/dragoman/route_set.rb
65
64
  - lib/dragoman/translation_visitor.rb
66
65
  - lib/dragoman/translator.rb
67
66
  - lib/dragoman/url_helpers.rb
@@ -1,39 +0,0 @@
1
- module Dragoman
2
-
3
- module MapperRails3
4
- include Mapper
5
-
6
- def self.included(base)
7
- base.send :alias_method_chain, :add_route, :localization
8
- base.send :alias_method_chain, :scope, :localization
9
-
10
- base.send :alias_method_chain, :resources, :localization
11
-
12
- base::Mapping.send :include, MappingRails3
13
- end
14
-
15
- module MappingRails3
16
- def self.included(base)
17
- base.send :alias_method_chain, :to_route, :localization
18
- end
19
-
20
- def to_route_with_localization
21
- if @options[:locale]
22
- Dragoman::UrlHelpers.add_untranslated_helpers @options[:as], @set.named_routes.module, @set.named_routes.module if @options[:as]
23
- @options[:as] = "#{@options[:as]}_#{@options[:locale]}" if @options[:as].present?
24
- @options[:as] = nil if @options[:as] && @set.named_routes.routes[@options[:as].to_sym] # TODO: why do we need to set as to nil?
25
- end
26
- to_route_without_localization
27
- end
28
- end
29
-
30
- def add_route_with_localization(action, options)
31
- if @current_locale
32
- options[:path] = Dragoman::Translator.translate_path(options[:path] || action, @current_locale) unless canonical_action?(action, true)
33
- options[:locale] = @current_locale
34
- end
35
- add_route_without_localization action, options
36
- end
37
-
38
- end
39
- end
@@ -1,21 +0,0 @@
1
- module Dragoman
2
- module MapperRails4
3
-
4
- include Mapper
5
-
6
- def self.included(base)
7
- base.send :alias_method_chain, :add_route, :localization
8
- base.send :alias_method_chain, :scope, :localization
9
-
10
- base.send :alias_method_chain, :resources, :localization
11
-
12
- base::Mapping.extend Mapping
13
- base::Mapping.class_eval do
14
- class << self
15
- alias_method_chain :build, :localization
16
- end
17
- end
18
- end
19
-
20
- end
21
- end