strong_presenter 0.1.0 → 0.2.0

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.
@@ -1,7 +1,10 @@
1
1
  require 'spec_helper'
2
+ require 'support/shared_examples/view_helpers'
2
3
 
3
4
  module StrongPresenter
4
5
  describe Presenter do
6
+ it_behaves_like "view helpers", Presenter.new(Model.new)
7
+
5
8
  describe "#initialize" do
6
9
  it "sets the object" do
7
10
  object = Model.new
@@ -20,7 +23,80 @@ module StrongPresenter
20
23
  end
21
24
  end
22
25
 
23
- describe "Collection" do
26
+ describe "ActiveModel compatibility" do
27
+ protect_class(Product)
28
+
29
+ before(:each) do
30
+ @product_presenter = ProductPresenter.new(Product.new)
31
+ end
32
+
33
+ it '#to_model' do
34
+ expect(@product_presenter.to_model).to be @product_presenter
35
+ end
36
+
37
+ it '#to_param' do
38
+ Product.send(:define_method, :to_param) {123}
39
+ expect(@product_presenter.to_param).to be 123
40
+ end
41
+
42
+ it '#to_partial_path' do
43
+ Product.send(:define_method, :to_partial_path) {'/product!/'}
44
+ expect(@product_presenter.to_partial_path).to eq '/product!/'
45
+ end
46
+
47
+ describe '#attributes' do
48
+ protect_class(CarPresenter)
49
+ before(:each) do
50
+ car = Car.new
51
+ car.license_plate = "IMHERE"
52
+ @car_presenter = CarPresenter.new(car)
53
+ end
54
+
55
+ it 'is initially empty' do
56
+ expect(@car_presenter.attributes).to be_empty
57
+ end
58
+
59
+ it 'shows associations' do
60
+ CarPresenter.send(:define_method, :license_plate) { object.license_plate }
61
+ expect(@car_presenter.attributes).to eq({"license_plate" => "IMHERE"})
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "Unconventional name" do
67
+ before(:each) do
68
+ stub_const('StrangePresent', Class.new(StrongPresenter::Presenter))
69
+ end
70
+
71
+ it 'has no object class' do
72
+ expect(StrangePresent.send :object_class?).to be_false
73
+ end
74
+
75
+ it 'raises source error' do
76
+ expect{StrangePresent.send :object_class}.to raise_error(StrongPresenter::UninferrableSourceError)
77
+ end
78
+
79
+ it 'can set present' do
80
+ StrangePresent.send(:presents, :car)
81
+ expect(StrangePresent.send :object_class).to be Car
82
+ presenter = StrangePresent.new(Car.new)
83
+ expect(StrangePresent.model_name).to be Car.model_name
84
+ expect(presenter.send(:car)).to be presenter.send(:object)
85
+ end
86
+ end
87
+
88
+ describe "::presents" do
89
+ protect_class(ProductPresenter)
90
+
91
+ it 'handles inferred case' do
92
+ ProductPresenter.send(:presents, :product)
93
+ expect(ProductPresenter.send :object_class).to be Product
94
+ product_presenter = ProductPresenter.new(Product.new)
95
+ expect(product_presenter.send(:product)).to be product_presenter.send(:object)
96
+ end
97
+ end
98
+
99
+ describe "::Collection" do
24
100
  it "finds corresponding collection presenter" do
25
101
  expect(ProductPresenter::Collection).to be ProductsPresenter
26
102
  end
@@ -38,6 +114,12 @@ module StrongPresenter
38
114
  it "infers presenter on collection presenter" do
39
115
  expect(ProductPresenter::Collection.send :presenter_class).to be ProductPresenter
40
116
  end
117
+
118
+ it "uses correct collection with chained inheritance" do
119
+ stub_const("NewProductPresenter", Class.new(ProductPresenter))
120
+
121
+ expect(NewProductPresenter::Collection.send :presenter_class).to be NewProductPresenter
122
+ end
41
123
  end
42
124
  end
43
125
  end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ def fake_view_context
4
+ double("ViewContext")
5
+ end
6
+
7
+ def fake_controller(view_context = fake_view_context)
8
+ double("Controller", view_context: view_context, request: double("Request"))
9
+ end
10
+
11
+ module StrongPresenter
12
+ describe ViewContext::BuildStrategy::Full do
13
+ describe "#call" do
14
+ context "when a current controller is set" do
15
+ it "returns the controller's view context" do
16
+ view_context = fake_view_context
17
+ ViewContext.stub controller: fake_controller(view_context)
18
+ strategy = ViewContext::BuildStrategy::Full.new
19
+
20
+ expect(strategy.call).to be view_context
21
+ end
22
+ end
23
+
24
+ context "when a current controller is not set" do
25
+ it "uses ApplicationController" do
26
+ view_context = fake_view_context
27
+ stub_const "ApplicationController", double(new: fake_controller(view_context))
28
+ strategy = ViewContext::BuildStrategy::Full.new
29
+
30
+ expect(strategy.call).to be view_context
31
+ end
32
+ end
33
+
34
+ it "adds a request if one is not defined" do
35
+ controller = Class.new(ActionController::Base).new
36
+ ViewContext.stub controller: controller
37
+ strategy = ViewContext::BuildStrategy::Full.new
38
+
39
+ expect(controller.request).to be_nil
40
+ strategy.call
41
+ expect(controller.request).to be_an ActionController::TestRequest
42
+ expect(controller.params).to eq({})
43
+
44
+ # sanity checks
45
+ expect(controller.view_context.request).to be controller.request
46
+ expect(controller.view_context.params).to be controller.params
47
+ end
48
+
49
+ it "adds methods to the view context from the constructor block" do
50
+ ViewContext.stub controller: fake_controller
51
+ strategy = ViewContext::BuildStrategy::Full.new do
52
+ def a_helper_method; end
53
+ end
54
+
55
+ expect(strategy.call).to respond_to :a_helper_method
56
+ end
57
+
58
+ it "includes modules into the view context from the constructor block" do
59
+ view_context = Object.new
60
+ ViewContext.stub controller: fake_controller(view_context)
61
+ helpers = Module.new do
62
+ def a_helper_method; end
63
+ end
64
+ strategy = ViewContext::BuildStrategy::Full.new do
65
+ include helpers
66
+ end
67
+
68
+ expect(strategy.call).to respond_to :a_helper_method
69
+ end
70
+ end
71
+ end
72
+
73
+ describe ViewContext::BuildStrategy::Fast do
74
+ describe "#call" do
75
+ it "returns an instance of a subclass of ActionView::Base" do
76
+ strategy = ViewContext::BuildStrategy::Fast.new
77
+
78
+ returned = strategy.call
79
+
80
+ expect(returned).to be_an ActionView::Base
81
+ expect(returned.class).not_to be ActionView::Base
82
+ end
83
+
84
+ it "returns different instances each time" do
85
+ strategy = ViewContext::BuildStrategy::Fast.new
86
+
87
+ expect(strategy.call).not_to be strategy.call
88
+ end
89
+
90
+ it "returns the same subclass each time" do
91
+ strategy = ViewContext::BuildStrategy::Fast.new
92
+
93
+ expect(strategy.call.class).to be strategy.call.class
94
+ end
95
+
96
+ it "adds methods to the view context from the constructor block" do
97
+ strategy = ViewContext::BuildStrategy::Fast.new do
98
+ def a_helper_method; end
99
+ end
100
+
101
+ expect(strategy.call).to respond_to :a_helper_method
102
+ end
103
+
104
+ it "includes modules into the view context from the constructor block" do
105
+ helpers = Module.new do
106
+ def a_helper_method; end
107
+ end
108
+ strategy = ViewContext::BuildStrategy::Fast.new do
109
+ include helpers
110
+ end
111
+
112
+ expect(strategy.call).to respond_to :a_helper_method
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,154 @@
1
+ require 'spec_helper'
2
+
3
+ module StrongPresenter
4
+ describe ViewContext do
5
+ describe "#view_context" do
6
+ let(:base) { Class.new { def view_context; :controller_view_context; end } }
7
+ let(:controller) { Class.new(base) { include ViewContext } }
8
+
9
+ it "saves the superclass's view context" do
10
+ ViewContext.should_receive(:current=).with(:controller_view_context)
11
+ controller.new.view_context
12
+ end
13
+
14
+ it "returns the superclass's view context" do
15
+ expect(controller.new.view_context).to be :controller_view_context
16
+ end
17
+ end
18
+
19
+ describe ".controller" do
20
+ it "returns the stored controller from RequestStore" do
21
+ RequestStore.stub store: {current_controller: :stored_controller}
22
+
23
+ expect(ViewContext.controller).to be :stored_controller
24
+ end
25
+ end
26
+
27
+ describe ".controller=" do
28
+ it "stores a controller in RequestStore" do
29
+ store = {}
30
+ RequestStore.stub store: store
31
+
32
+ ViewContext.controller = :stored_controller
33
+ expect(store[:current_controller]).to be :stored_controller
34
+ end
35
+ end
36
+
37
+ describe ".current" do
38
+ it "returns the stored view context from RequestStore" do
39
+ RequestStore.stub store: {current_view_context: :stored_view_context}
40
+
41
+ expect(ViewContext.current).to be :stored_view_context
42
+ end
43
+
44
+ context "when no view context is stored" do
45
+ it "builds a view context" do
46
+ RequestStore.stub store: {}
47
+ ViewContext.stub build_strategy: ->{ :new_view_context }
48
+ HelperProxy.stub(:new).with(:new_view_context).and_return(:new_helper_proxy)
49
+
50
+ expect(ViewContext.current).to be :new_helper_proxy
51
+ end
52
+
53
+ it "stores the built view context" do
54
+ store = {}
55
+ RequestStore.stub store: store
56
+ ViewContext.stub build_strategy: ->{ :new_view_context }
57
+ HelperProxy.stub(:new).with(:new_view_context).and_return(:new_helper_proxy)
58
+
59
+ ViewContext.current
60
+ expect(store[:current_view_context]).to be :new_helper_proxy
61
+ end
62
+ end
63
+ end
64
+
65
+ describe ".current=" do
66
+ it "stores a helper proxy for the view context in RequestStore" do
67
+ store = {}
68
+ RequestStore.stub store: store
69
+ HelperProxy.stub(:new).with(:stored_view_context).and_return(:stored_helper_proxy)
70
+
71
+ ViewContext.current = :stored_view_context
72
+ expect(store[:current_view_context]).to be :stored_helper_proxy
73
+ end
74
+ end
75
+
76
+ describe ".clear!" do
77
+ it "clears the stored controller and view controller" do
78
+ store = {current_controller: :stored_controller, current_view_context: :stored_view_context}
79
+ RequestStore.stub store: store
80
+
81
+ ViewContext.clear!
82
+ expect(store).not_to have_key :current_controller
83
+ expect(store).not_to have_key :current_view_context
84
+ end
85
+ end
86
+
87
+ describe ".build" do
88
+ it "returns a new view context using the build strategy" do
89
+ ViewContext.stub build_strategy: ->{ :new_view_context }
90
+
91
+ expect(ViewContext.build).to be :new_view_context
92
+ end
93
+ end
94
+
95
+ describe ".build!" do
96
+ it "returns a helper proxy for the new view context" do
97
+ ViewContext.stub build_strategy: ->{ :new_view_context }
98
+ HelperProxy.stub(:new).with(:new_view_context).and_return(:new_helper_proxy)
99
+
100
+ expect(ViewContext.build!).to be :new_helper_proxy
101
+ end
102
+
103
+ it "stores the helper proxy" do
104
+ store = {}
105
+ RequestStore.stub store: store
106
+ ViewContext.stub build_strategy: ->{ :new_view_context }
107
+ HelperProxy.stub(:new).with(:new_view_context).and_return(:new_helper_proxy)
108
+
109
+ ViewContext.build!
110
+ expect(store[:current_view_context]).to be :new_helper_proxy
111
+ end
112
+ end
113
+
114
+ describe ".build_strategy" do
115
+ it "defaults to full" do
116
+ expect(ViewContext.build_strategy).to be_a ViewContext::BuildStrategy::Full
117
+ end
118
+
119
+ it "memoizes" do
120
+ expect(ViewContext.build_strategy).to be ViewContext.build_strategy
121
+ end
122
+ end
123
+
124
+ describe ".test_strategy" do
125
+ protect_module ViewContext
126
+
127
+ context "with :fast" do
128
+ it "creates a fast strategy" do
129
+ ViewContext.test_strategy :fast
130
+ expect(ViewContext.build_strategy).to be_a ViewContext::BuildStrategy::Fast
131
+ end
132
+
133
+ it "passes a block to the strategy" do
134
+ ViewContext::BuildStrategy::Fast.stub(:new).and_return{|&block| block.call}
135
+
136
+ expect(ViewContext.test_strategy(:fast){:passed}).to be :passed
137
+ end
138
+ end
139
+
140
+ context "with :full" do
141
+ it "creates a full strategy" do
142
+ ViewContext.test_strategy :full
143
+ expect(ViewContext.build_strategy).to be_a ViewContext::BuildStrategy::Full
144
+ end
145
+
146
+ it "passes a block to the strategy" do
147
+ ViewContext::BuildStrategy::Full.stub(:new).and_return{|&block| block.call}
148
+
149
+ expect(ViewContext.test_strategy(:full){:passed}).to be :passed
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_examples/view_helpers'
3
+
4
+ module StrongPresenter
5
+ describe ViewHelpers do
6
+ it_behaves_like "view helpers", Class.new{include ViewHelpers}.new
7
+ end
8
+ end
@@ -0,0 +1,39 @@
1
+ shared_examples_for "view helpers" do |subject|
2
+ describe "#helpers" do
3
+ it "returns the current view context" do
4
+ StrongPresenter::ViewContext.stub current: :current_view_context
5
+ expect(subject.helpers).to be :current_view_context
6
+ end
7
+
8
+ it "is aliased to #h" do
9
+ StrongPresenter::ViewContext.stub current: :current_view_context
10
+ expect(subject.h).to be :current_view_context
11
+ end
12
+ end
13
+
14
+ describe "#localize" do
15
+ it "delegates to #helpers" do
16
+ subject.stub helpers: double
17
+ subject.helpers.should_receive(:localize).with(:an_object, some: "parameter")
18
+ subject.localize(:an_object, some: "parameter")
19
+ end
20
+
21
+ it "is aliased to #l" do
22
+ subject.stub helpers: double
23
+ subject.helpers.should_receive(:localize).with(:an_object, some: "parameter")
24
+ subject.l(:an_object, some: "parameter")
25
+ end
26
+ end
27
+
28
+ describe ".helpers" do
29
+ it "returns the current view context" do
30
+ StrongPresenter::ViewContext.stub current: :current_view_context
31
+ expect(subject.class.helpers).to be :current_view_context
32
+ end
33
+
34
+ it "is aliased to .h" do
35
+ StrongPresenter::ViewContext.stub current: :current_view_context
36
+ expect(subject.class.h).to be :current_view_context
37
+ end
38
+ end
39
+ end
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = StrongPresenter::VERSION
9
9
  gem.authors = ["Ronald Chan"]
10
10
  gem.email = ["ronalchn@gmail.com"]
11
- gem.description = %q{strong_presenter lets you add presenters to your application, along with strong_parameters-inspired permit logic to handle mass presentations, where each user may have permision to view different fields}
12
- gem.summary = %q{strong_presenter lets you add presenters to your application, along with strong_parameters-inspired permit logic to handle mass presentations, where each user may have permision to view different fields}
11
+ gem.description = %q{strong_presenter adds a layer of presentation logic to your application, and gives you strong_parameters-like logic to determine which attributes are visible}
12
+ gem.summary = %q{strong_presenter adds a layer of presentation logic to your application, and gives you strong_parameters-like logic to determine which attributes are visible}
13
13
  gem.homepage = "https://github.com/ronalchn/strong_presenter"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,200 +1,161 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strong_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Ronald Chan
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-18 00:00:00.000000000 Z
12
+ date: 2013-10-23 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &14932020 !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '3.0'
20
22
  type: :runtime
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '3.0'
24
+ version_requirements: *14932020
27
25
  - !ruby/object:Gem::Dependency
28
26
  name: actionpack
29
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &14930040 !ruby/object:Gem::Requirement
28
+ none: false
30
29
  requirements:
31
- - - '>='
30
+ - - ! '>='
32
31
  - !ruby/object:Gem::Version
33
32
  version: '3.0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '3.0'
35
+ version_requirements: *14930040
41
36
  - !ruby/object:Gem::Dependency
42
37
  name: request_store
43
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &14928360 !ruby/object:Gem::Requirement
39
+ none: false
44
40
  requirements:
45
41
  - - ~>
46
42
  - !ruby/object:Gem::Version
47
43
  version: 1.0.3
48
44
  type: :runtime
49
45
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: 1.0.3
46
+ version_requirements: *14928360
55
47
  - !ruby/object:Gem::Dependency
56
48
  name: activemodel
57
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &14947960 !ruby/object:Gem::Requirement
50
+ none: false
58
51
  requirements:
59
- - - '>='
52
+ - - ! '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '3.0'
62
55
  type: :runtime
63
56
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '3.0'
57
+ version_requirements: *14947960
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: ammeter
71
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &14945820 !ruby/object:Gem::Requirement
61
+ none: false
72
62
  requirements:
73
- - - '>='
63
+ - - ! '>='
74
64
  - !ruby/object:Gem::Version
75
65
  version: '0'
76
66
  type: :development
77
67
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version_requirements: *14945820
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rake
85
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &14944620 !ruby/object:Gem::Requirement
72
+ none: false
86
73
  requirements:
87
- - - '>='
74
+ - - ! '>='
88
75
  - !ruby/object:Gem::Version
89
76
  version: 0.9.2
90
77
  type: :development
91
78
  prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '>='
95
- - !ruby/object:Gem::Version
96
- version: 0.9.2
79
+ version_requirements: *14944620
97
80
  - !ruby/object:Gem::Dependency
98
81
  name: rspec
99
- requirement: !ruby/object:Gem::Requirement
82
+ requirement: &14942300 !ruby/object:Gem::Requirement
83
+ none: false
100
84
  requirements:
101
85
  - - ~>
102
86
  - !ruby/object:Gem::Version
103
87
  version: '2.12'
104
88
  type: :development
105
89
  prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: '2.12'
90
+ version_requirements: *14942300
111
91
  - !ruby/object:Gem::Dependency
112
92
  name: rspec-mocks
113
- requirement: !ruby/object:Gem::Requirement
93
+ requirement: &14955380 !ruby/object:Gem::Requirement
94
+ none: false
114
95
  requirements:
115
- - - '>='
96
+ - - ! '>='
116
97
  - !ruby/object:Gem::Version
117
98
  version: 2.12.1
118
99
  type: :development
119
100
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '>='
123
- - !ruby/object:Gem::Version
124
- version: 2.12.1
101
+ version_requirements: *14955380
125
102
  - !ruby/object:Gem::Dependency
126
103
  name: rspec-rails
127
- requirement: !ruby/object:Gem::Requirement
104
+ requirement: &14952840 !ruby/object:Gem::Requirement
105
+ none: false
128
106
  requirements:
129
107
  - - ~>
130
108
  - !ruby/object:Gem::Version
131
109
  version: '2.12'
132
110
  type: :development
133
111
  prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ~>
137
- - !ruby/object:Gem::Version
138
- version: '2.12'
112
+ version_requirements: *14952840
139
113
  - !ruby/object:Gem::Dependency
140
114
  name: minitest-rails
141
- requirement: !ruby/object:Gem::Requirement
115
+ requirement: &14951520 !ruby/object:Gem::Requirement
116
+ none: false
142
117
  requirements:
143
118
  - - ~>
144
119
  - !ruby/object:Gem::Version
145
120
  version: '0.2'
146
121
  type: :development
147
122
  prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ~>
151
- - !ruby/object:Gem::Version
152
- version: '0.2'
123
+ version_requirements: *14951520
153
124
  - !ruby/object:Gem::Dependency
154
125
  name: capybara
155
- requirement: !ruby/object:Gem::Requirement
126
+ requirement: &14950540 !ruby/object:Gem::Requirement
127
+ none: false
156
128
  requirements:
157
- - - '>='
129
+ - - ! '>='
158
130
  - !ruby/object:Gem::Version
159
131
  version: '0'
160
132
  type: :development
161
133
  prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - '>='
165
- - !ruby/object:Gem::Version
166
- version: '0'
134
+ version_requirements: *14950540
167
135
  - !ruby/object:Gem::Dependency
168
136
  name: active_model_serializers
169
- requirement: !ruby/object:Gem::Requirement
137
+ requirement: &14974320 !ruby/object:Gem::Requirement
138
+ none: false
170
139
  requirements:
171
- - - '>='
140
+ - - ! '>='
172
141
  - !ruby/object:Gem::Version
173
142
  version: '0'
174
143
  type: :development
175
144
  prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - '>='
179
- - !ruby/object:Gem::Version
180
- version: '0'
145
+ version_requirements: *14974320
181
146
  - !ruby/object:Gem::Dependency
182
147
  name: activerecord
183
- requirement: !ruby/object:Gem::Requirement
148
+ requirement: &14972800 !ruby/object:Gem::Requirement
149
+ none: false
184
150
  requirements:
185
- - - '>='
151
+ - - ! '>='
186
152
  - !ruby/object:Gem::Version
187
153
  version: '3.0'
188
154
  type: :development
189
155
  prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - '>='
193
- - !ruby/object:Gem::Version
194
- version: '3.0'
195
- description: strong_presenter lets you add presenters to your application, along with
196
- strong_parameters-inspired permit logic to handle mass presentations, where each
197
- user may have permision to view different fields
156
+ version_requirements: *14972800
157
+ description: strong_presenter adds a layer of presentation logic to your application,
158
+ and gives you strong_parameters-like logic to determine which attributes are visible
198
159
  email:
199
160
  - ronalchn@gmail.com
200
161
  executables: []
@@ -321,41 +282,47 @@ files:
321
282
  - spec/spec_helper.rb
322
283
  - spec/strong_presenter/associable_spec.rb
323
284
  - spec/strong_presenter/collection_presenter_spec.rb
285
+ - spec/strong_presenter/controller_additions_spec.rb
324
286
  - spec/strong_presenter/delegation_spec.rb
287
+ - spec/strong_presenter/helper_proxy_spec.rb
325
288
  - spec/strong_presenter/permissible_spec.rb
326
289
  - spec/strong_presenter/permissions_spec.rb
327
290
  - spec/strong_presenter/presenter_spec.rb
328
291
  - spec/strong_presenter/simplecov_spec.rb
292
+ - spec/strong_presenter/view_context/build_strategy_spec.rb
293
+ - spec/strong_presenter/view_context_spec.rb
294
+ - spec/strong_presenter/view_helpers_spec.rb
329
295
  - spec/support/dummy_app.rb
330
296
  - spec/support/matchers/have_text.rb
331
297
  - spec/support/models.rb
332
298
  - spec/support/schema.rb
299
+ - spec/support/shared_examples/view_helpers.rb
333
300
  - strong_presenter.gemspec
334
301
  homepage: https://github.com/ronalchn/strong_presenter
335
302
  licenses: []
336
- metadata: {}
337
303
  post_install_message:
338
304
  rdoc_options: []
339
305
  require_paths:
340
306
  - lib
341
307
  required_ruby_version: !ruby/object:Gem::Requirement
308
+ none: false
342
309
  requirements:
343
- - - '>='
310
+ - - ! '>='
344
311
  - !ruby/object:Gem::Version
345
312
  version: '0'
346
313
  required_rubygems_version: !ruby/object:Gem::Requirement
314
+ none: false
347
315
  requirements:
348
- - - '>='
316
+ - - ! '>='
349
317
  - !ruby/object:Gem::Version
350
318
  version: '0'
351
319
  requirements: []
352
320
  rubyforge_project:
353
- rubygems_version: 2.0.3
321
+ rubygems_version: 1.8.17
354
322
  signing_key:
355
- specification_version: 4
356
- summary: strong_presenter lets you add presenters to your application, along with
357
- strong_parameters-inspired permit logic to handle mass presentations, where each
358
- user may have permision to view different fields
323
+ specification_version: 3
324
+ summary: strong_presenter adds a layer of presentation logic to your application,
325
+ and gives you strong_parameters-like logic to determine which attributes are visible
359
326
  test_files:
360
327
  - spec/dummy/.rspec
361
328
  - spec/dummy/Rakefile
@@ -429,12 +396,19 @@ test_files:
429
396
  - spec/spec_helper.rb
430
397
  - spec/strong_presenter/associable_spec.rb
431
398
  - spec/strong_presenter/collection_presenter_spec.rb
399
+ - spec/strong_presenter/controller_additions_spec.rb
432
400
  - spec/strong_presenter/delegation_spec.rb
401
+ - spec/strong_presenter/helper_proxy_spec.rb
433
402
  - spec/strong_presenter/permissible_spec.rb
434
403
  - spec/strong_presenter/permissions_spec.rb
435
404
  - spec/strong_presenter/presenter_spec.rb
436
405
  - spec/strong_presenter/simplecov_spec.rb
406
+ - spec/strong_presenter/view_context/build_strategy_spec.rb
407
+ - spec/strong_presenter/view_context_spec.rb
408
+ - spec/strong_presenter/view_helpers_spec.rb
437
409
  - spec/support/dummy_app.rb
438
410
  - spec/support/matchers/have_text.rb
439
411
  - spec/support/models.rb
440
412
  - spec/support/schema.rb
413
+ - spec/support/shared_examples/view_helpers.rb
414
+ has_rdoc: