contexts 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e84208264b7a2f55fad385cfedaa7585f313378
4
- data.tar.gz: 66c67a5a407c67712713b6eaf4cdeaaff6c0061e
3
+ metadata.gz: 137cc0152fdd49899c5443d6c52cf125d6aad5e5
4
+ data.tar.gz: afa3ddc36e78a1d62848dff1ec420a42689c0b2a
5
5
  SHA512:
6
- metadata.gz: d3ddb4bd3abc5bd907d8c7f1c73735b5e110e3b0d9d769e9bd9ae8b925758360dd9a16aa0c3a86647770115e73dd7c27b6651a8e51be3ea1b40dddcb82ba96a7
7
- data.tar.gz: 039fc6ce21c2ff758faeb82a355027aa7bcb3b90455ef6e7946dec838595c4ec72cb987818cdca538d53c283698f46f609e52a251fa7bb578c7d3d1cb2a390d9
6
+ metadata.gz: e45639cb32b939431ebbcc1b421de03cd630fb6f3baa51096caf83b44ed28f19e61b65e1db0a3f0e9fdd4c5df5596c40da4e8d20350bc3cd49a934fdef1c3025
7
+ data.tar.gz: 7e6e0ee4d91d7c075a37527f2f4a32e9e5b6ea78a492ca2a828fadff382ed5be1f897de6b02efa9e5c0bab697730421279bcedfb8fa514a2b285f13f930943fc
@@ -3,11 +3,7 @@ require 'mapper'
3
3
 
4
4
  module Contexts
5
5
  def self.resolve(name)
6
- if name.is_a?(Class)
7
- name.new
8
- else
9
- "#{name}_context".classify.constantize.new
10
- end
6
+ "#{name}_context".classify.constantize.new
11
7
  end
12
8
 
13
9
  def self.included(base)
@@ -29,28 +25,31 @@ module Contexts
29
25
  names.each{ |name| contexts[name] ||= Contexts.resolve(name) }
30
26
  end
31
27
  end
28
+
29
+ alias_method :context, :preload_contexts
30
+ alias_method :contexts, :preload_contexts
32
31
  end
33
32
 
34
33
  def contexts
35
34
  @contexts ||= (request.env['contexts'] || {})
36
35
  end
37
36
 
38
- def current_context(key = nil)
39
- if key
40
- (ctx = contexts[key]) && ctx.current
37
+ def current_context(name = nil)
38
+ if name
39
+ (ctx = contexts[name]) && ctx.current
41
40
  else
42
41
  Hash[contexts.map{ |name, ctx| [ name, ctx.current ] }]
43
42
  end
44
43
  end
45
44
 
46
- def locked_context(key = nil)
47
- ctx = (session[:locked_context] ||= {})
45
+ def locked_context(name = nil)
46
+ locked = (session[:locked_context] ||= {})
48
47
 
49
- key ? ctx[key.to_s] : ctx
48
+ name ? locked[name.to_s] : locked
50
49
  end
51
50
 
52
- def context_locked?(key = nil)
53
- locked_context(key).present?
51
+ def context_locked?(name = nil)
52
+ locked_context(name).present?
54
53
  end
55
54
 
56
55
  def lock_context(data)
@@ -62,13 +61,13 @@ module Contexts
62
61
  protected
63
62
 
64
63
  def apply_contexts
65
- contexts.each{ |name, ctx| ctx.apply(self, locked_context(ctx.key)) }
64
+ contexts.each{ |name, ctx| ctx.apply(self, locked_context(name)) }
66
65
  end
67
66
 
68
67
  def default_url_options
69
68
  contexts.inject({}) do |options, (name, ctx)|
70
69
  option = ctx.respond_to?(:url_option) ? ctx.url_option : ctx.current
71
- options[ctx.key] = option
70
+ options[name] = option
72
71
  options
73
72
  end
74
73
  end
@@ -1,3 +1,3 @@
1
1
  module Contexts
2
- VERSION = '1.1.0'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -13,12 +13,12 @@ module ActionDispatch::Routing
13
13
  def context(name, &blk)
14
14
  ctx = Contexts.resolve(name)
15
15
 
16
- path = ":#{ctx.key}"
16
+ path = ":#{name}"
17
17
  path = "(#{path})" unless ctx.respond_to?(:required?) and ctx.required?
18
18
 
19
- constraints ->(req) { (req.env['contexts'] ||= {})[ctx.key] = ctx } do
19
+ constraints ->(req) { (req.env['contexts'] ||= {})[name] = ctx } do
20
20
  if ctx.respond_to?(:constraints)
21
- options = { constraints: { ctx.key => ctx.constraints } }
21
+ options = { constraints: { name => ctx.constraints } }
22
22
  end
23
23
 
24
24
  scope(path, options, &blk)
@@ -3,15 +3,15 @@ require 'spec_helper'
3
3
  describe ApplicationController, type: [:controller, :request] do
4
4
  context 'when context has constraints' do
5
5
  it "checks value via regexp" do
6
- expect(get: '/en').to route_to('application#index', lang: 'en')
7
- expect(get: '/ru/lang').to route_to('application#index', lang: 'ru')
6
+ expect(get: '/en').to route_to('application#index', locale: 'en')
7
+ expect(get: '/ru/locale').to route_to('application#index', locale: 'ru')
8
8
  expect(get: '/de').not_to be_routable
9
9
  end
10
10
  end
11
11
 
12
12
  context 'when context has no constraints' do
13
13
  it 'allows any value' do
14
- expect(get: '/ru/moscow/city').to route_to('application#index', lang: 'ru', city: 'moscow')
14
+ expect(get: '/ru/moscow/city').to route_to('application#index', locale: 'ru', city: 'moscow')
15
15
  end
16
16
  end
17
17
 
@@ -23,14 +23,14 @@ describe ApplicationController, type: [:controller, :request] do
23
23
 
24
24
  context 'context locking' do
25
25
  it 'overrides current context' do
26
- get '/ru/lang'
27
- expect(controller).not_to be_context_locked(:lang)
26
+ get '/ru/locale'
27
+ expect(controller).not_to be_context_locked(:locale)
28
28
 
29
- controller.lock_context(lang: :en)
29
+ controller.lock_context(locale: :en)
30
30
 
31
- expect(controller).to be_context_locked(:lang)
32
- expect(controller.locked_context(:lang)).to eq(:en)
33
- expect(controller.locked_context).to eq('lang' => :en)
31
+ expect(controller).to be_context_locked(:locale)
32
+ expect(controller.locked_context(:locale)).to eq(:en)
33
+ expect(controller.locked_context).to eq('locale' => :en)
34
34
  end
35
35
  end
36
36
 
@@ -38,16 +38,16 @@ describe ApplicationController, type: [:controller, :request] do
38
38
  it 'returns contexts hash' do
39
39
  get '/en'
40
40
 
41
- expect(controller.contexts[:lang]).to be_a(LanguageContext)
41
+ expect(controller.contexts[:locale]).to be_a(LocaleContext)
42
42
  end
43
43
  end
44
44
 
45
45
  describe '#current_context' do
46
46
  it 'returns current context value' do
47
- get '/ru/lang'
47
+ get '/ru/locale'
48
48
 
49
- expect(controller.current_context(:lang)).to eq(:ru)
50
- expect(controller.current_context).to eq(lang: :ru)
49
+ expect(controller.current_context(:locale)).to eq(:ru)
50
+ expect(controller.current_context).to eq(locale: :ru)
51
51
  end
52
52
  end
53
53
 
@@ -62,7 +62,7 @@ describe ApplicationController, type: [:controller, :request] do
62
62
  get '/ru/moscow/city'
63
63
  get '/en'
64
64
 
65
- expect(controller.lang_page_path).to eq('/lang')
65
+ expect(controller.locale_page_path).to eq('/locale')
66
66
  end
67
67
  end
68
68
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ContextController, type: :controller do
4
+ it 'preloads contexts' do
5
+ get :index
6
+
7
+ expect(controller.current_context(:locale)).to eq(:en)
8
+ expect(controller.current_context(:city)).to eq(nil)
9
+
10
+ controller.contexts[:locale].apply(controller, :ru)
11
+ expect(controller.locale_page_path).to eq('/ru/locale')
12
+ end
13
+ end
@@ -1,8 +1,4 @@
1
1
  class CityContext
2
- def key
3
- :city
4
- end
5
-
6
2
  def required?
7
3
  true
8
4
  end
@@ -12,6 +8,6 @@ class CityContext
12
8
  end
13
9
 
14
10
  def apply(controller, value)
15
- @city = value || controller.params[key].presence
11
+ @city = value || controller.params[:city].presence
16
12
  end
17
13
  end
@@ -1,12 +1,4 @@
1
- class LanguageContext
2
- def key
3
- :lang
4
- end
5
-
6
- def required?
7
- false
8
- end
9
-
1
+ class LocaleContext
10
2
  def constraints
11
3
  Regexp.new(I18n.available_locales.join('|'))
12
4
  end
@@ -20,7 +12,7 @@ class LanguageContext
20
12
  end
21
13
 
22
14
  def apply(controller, value)
23
- I18n.locale = value || controller.params[key].presence || default
15
+ I18n.locale = value || controller.params[:locale].presence || default
24
16
  end
25
17
 
26
18
  def url_option
@@ -0,0 +1,3 @@
1
+ class ContextController < ApplicationController
2
+ context :locale
3
+ end
@@ -1,10 +1,12 @@
1
1
  Rails.application.routes.draw do
2
- contexts :language do
2
+ contexts :locale do
3
3
  get '/', to: 'application#index', as: :root
4
- get '/lang', to: 'application#index', as: :lang_page
4
+ get '/locale', to: 'application#index', as: :locale_page
5
5
 
6
6
  context :city do
7
7
  get '/city/', to: 'application#index', as: :city_page
8
8
  end
9
9
  end
10
+
11
+ get '/context', to: 'context#index'
10
12
  end
@@ -18,8 +18,8 @@ end
18
18
 
19
19
  Rails.application.initialize!
20
20
 
21
- require 'dummy/app/contexts/language_context'
21
+ require 'dummy/app/contexts/locale_context'
22
22
  require 'dummy/app/contexts/city_context'
23
23
  require 'dummy/app/controllers/application_controller'
24
- require 'dummy/app/controllers/context_preload_controller'
24
+ require 'dummy/app/controllers/context_controller'
25
25
  require 'dummy/routes'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contexts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kolesnikov Danil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-18 00:00:00.000000000 Z
11
+ date: 2014-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -113,11 +113,11 @@ files:
113
113
  - lib/contexts/version.rb
114
114
  - lib/mapper.rb
115
115
  - spec/controllers/application_controller_spec.rb
116
- - spec/controllers/context_preload_controller_spec.rb
116
+ - spec/controllers/context_controller_spec.rb
117
117
  - spec/dummy/app/contexts/city_context.rb
118
- - spec/dummy/app/contexts/language_context.rb
118
+ - spec/dummy/app/contexts/locale_context.rb
119
119
  - spec/dummy/app/controllers/application_controller.rb
120
- - spec/dummy/app/controllers/context_preload_controller.rb
120
+ - spec/dummy/app/controllers/context_controller.rb
121
121
  - spec/dummy/routes.rb
122
122
  - spec/dummy_app.rb
123
123
  - spec/spec_helper.rb
@@ -147,11 +147,11 @@ specification_version: 4
147
147
  summary: Simple way to reuse routes logic in rails apps
148
148
  test_files:
149
149
  - spec/controllers/application_controller_spec.rb
150
- - spec/controllers/context_preload_controller_spec.rb
150
+ - spec/controllers/context_controller_spec.rb
151
151
  - spec/dummy/app/contexts/city_context.rb
152
- - spec/dummy/app/contexts/language_context.rb
152
+ - spec/dummy/app/contexts/locale_context.rb
153
153
  - spec/dummy/app/controllers/application_controller.rb
154
- - spec/dummy/app/controllers/context_preload_controller.rb
154
+ - spec/dummy/app/controllers/context_controller.rb
155
155
  - spec/dummy/routes.rb
156
156
  - spec/dummy_app.rb
157
157
  - spec/spec_helper.rb
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ContextPreloadController, type: [:controller, :request] do
4
- describe '.preload_contexts' do
5
- it 'populates contexts' do
6
- get '/'
7
-
8
- expect(controller.current_context(:lang)).to eq(:en)
9
- expect(controller.current_context(:city)).to eq(nil)
10
- end
11
- end
12
- end
@@ -1,3 +0,0 @@
1
- class ContextPreloadController < ApplicationController
2
- preload_contexts :language
3
- end