strong_presenter 0.2.0 → 0.2.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6444649230265391d72546b3298782db1383abc4
4
+ data.tar.gz: 8ed272da88fb418034afe94c7fa8b20ee52139f5
5
+ SHA512:
6
+ metadata.gz: 4a5aef2eea1880590b28c89643e7900df4a19862bbcb9da51077f17dae5b476fb2dec9b1c220e74b1a22ae1f011cb0911b1aec626dee12c91f881e1252316715
7
+ data.tar.gz: eae1b941dcd897be3ff945636f327d0b2832541df05d6c93c10f461d7bdea334a199313ec54f2c9ef5ececda6d4f90e827e06b8d561a4982dc393480f5755a1e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # StrongPresenter Changelog
2
2
 
3
+ ## 0.2.1
4
+
5
+ - Bug fix: `presents` with nested associations
6
+
3
7
  ## 0.2.0
4
8
 
5
9
  This release focuses on tightening up security of the permit interface, along with a number of bug fixes.
data/README.md CHANGED
@@ -45,7 +45,7 @@ Or to use the edge version, add this to your Gemfile:
45
45
 
46
46
  ### Writing Presenters
47
47
 
48
- Presenters are stored in `app/presenters`, they inherit from `StrongPresenter::BasePresenter` and are named based on the model they decorate. We also recommend you create an `ApplicationPresenter`.
48
+ Presenters are stored in `app/presenters`, they inherit from `StrongPresenter::Presenter` and are named based on the model they present. We also recommend you create an `ApplicationPresenter`.
49
49
 
50
50
  ```ruby
51
51
  # app/presenters/user_presenter.rb
@@ -86,7 +86,7 @@ module StrongPresenter
86
86
  select_permitted(*attributes).map do |args|
87
87
  args = Array(args)
88
88
  obj = self # drill into associations
89
- while (args.size > 1) && self.class.send(:presenter_associations).include?(args[0]) do
89
+ while (args.size > 1) && obj.class.respond_to?(:presenter_associations, true) && obj.class.send(:presenter_associations).include?(args[0]) do
90
90
  obj = obj.public_send args.slice!(0)
91
91
  end
92
92
  value = obj.public_send *args # call final method with args
@@ -1,3 +1,3 @@
1
1
  module StrongPresenter
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -14,6 +14,8 @@ module StrongPresenter
14
14
  Product.send(:define_method, :manufacturer) { @manufacturer ||= Manufacturer.new }
15
15
  Product.send(:define_method, :name) { "Product" }
16
16
  ProductPresenter.presents_association :manufacturer
17
+ ManufacturerPresenter.presents_association :source
18
+ Manufacturer.send(:define_method, :source) { @manufacturer ||= Manufacturer.new }
17
19
 
18
20
  @product_presenter = ProductPresenter.new(Product.new)
19
21
  end
@@ -34,6 +36,11 @@ module StrongPresenter
34
36
  expect(@product_presenter.manufacturer.presents :name).to be_empty
35
37
  end
36
38
 
39
+ it 'presents nested assocations' do
40
+ @product_presenter.permit! :**
41
+ expect(@product_presenter.present [:manufacturer, :source, :name]).to eq "Presented Factory"
42
+ end
43
+
37
44
  context 'with association methods permitted' do
38
45
  before(:each) do
39
46
  @product_presenter.permit! [:manufacturer, :*]
metadata CHANGED
@@ -1,159 +1,197 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strong_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.2.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ronald Chan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-23 00:00:00.000000000 Z
11
+ date: 2013-10-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
- requirement: &14932020 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *14932020
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: actionpack
27
- requirement: &14930040 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '3.0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *14930040
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: request_store
38
- requirement: &14928360 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
45
  - - ~>
42
46
  - !ruby/object:Gem::Version
43
47
  version: 1.0.3
44
48
  type: :runtime
45
49
  prerelease: false
46
- version_requirements: *14928360
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.3
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: activemodel
49
- requirement: &14947960 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '3.0'
55
62
  type: :runtime
56
63
  prerelease: false
57
- version_requirements: *14947960
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: ammeter
60
- requirement: &14945820 !ruby/object:Gem::Requirement
61
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
- - - ! '>='
73
+ - - '>='
64
74
  - !ruby/object:Gem::Version
65
75
  version: '0'
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *14945820
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
- requirement: &14944620 !ruby/object:Gem::Requirement
72
- none: false
85
+ requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
- - - ! '>='
87
+ - - '>='
75
88
  - !ruby/object:Gem::Version
76
89
  version: 0.9.2
77
90
  type: :development
78
91
  prerelease: false
79
- version_requirements: *14944620
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.2
80
97
  - !ruby/object:Gem::Dependency
81
98
  name: rspec
82
- requirement: &14942300 !ruby/object:Gem::Requirement
83
- none: false
99
+ requirement: !ruby/object:Gem::Requirement
84
100
  requirements:
85
101
  - - ~>
86
102
  - !ruby/object:Gem::Version
87
103
  version: '2.12'
88
104
  type: :development
89
105
  prerelease: false
90
- version_requirements: *14942300
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '2.12'
91
111
  - !ruby/object:Gem::Dependency
92
112
  name: rspec-mocks
93
- requirement: &14955380 !ruby/object:Gem::Requirement
94
- none: false
113
+ requirement: !ruby/object:Gem::Requirement
95
114
  requirements:
96
- - - ! '>='
115
+ - - '>='
97
116
  - !ruby/object:Gem::Version
98
117
  version: 2.12.1
99
118
  type: :development
100
119
  prerelease: false
101
- version_requirements: *14955380
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: 2.12.1
102
125
  - !ruby/object:Gem::Dependency
103
126
  name: rspec-rails
104
- requirement: &14952840 !ruby/object:Gem::Requirement
105
- none: false
127
+ requirement: !ruby/object:Gem::Requirement
106
128
  requirements:
107
129
  - - ~>
108
130
  - !ruby/object:Gem::Version
109
131
  version: '2.12'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *14952840
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: '2.12'
113
139
  - !ruby/object:Gem::Dependency
114
140
  name: minitest-rails
115
- requirement: &14951520 !ruby/object:Gem::Requirement
116
- none: false
141
+ requirement: !ruby/object:Gem::Requirement
117
142
  requirements:
118
143
  - - ~>
119
144
  - !ruby/object:Gem::Version
120
145
  version: '0.2'
121
146
  type: :development
122
147
  prerelease: false
123
- version_requirements: *14951520
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '0.2'
124
153
  - !ruby/object:Gem::Dependency
125
154
  name: capybara
126
- requirement: &14950540 !ruby/object:Gem::Requirement
127
- none: false
155
+ requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
- - - ! '>='
157
+ - - '>='
130
158
  - !ruby/object:Gem::Version
131
159
  version: '0'
132
160
  type: :development
133
161
  prerelease: false
134
- version_requirements: *14950540
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
135
167
  - !ruby/object:Gem::Dependency
136
168
  name: active_model_serializers
137
- requirement: &14974320 !ruby/object:Gem::Requirement
138
- none: false
169
+ requirement: !ruby/object:Gem::Requirement
139
170
  requirements:
140
- - - ! '>='
171
+ - - '>='
141
172
  - !ruby/object:Gem::Version
142
173
  version: '0'
143
174
  type: :development
144
175
  prerelease: false
145
- version_requirements: *14974320
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
146
181
  - !ruby/object:Gem::Dependency
147
182
  name: activerecord
148
- requirement: &14972800 !ruby/object:Gem::Requirement
149
- none: false
183
+ requirement: !ruby/object:Gem::Requirement
150
184
  requirements:
151
- - - ! '>='
185
+ - - '>='
152
186
  - !ruby/object:Gem::Version
153
187
  version: '3.0'
154
188
  type: :development
155
189
  prerelease: false
156
- version_requirements: *14972800
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '3.0'
157
195
  description: strong_presenter adds a layer of presentation logic to your application,
158
196
  and gives you strong_parameters-like logic to determine which attributes are visible
159
197
  email:
@@ -300,27 +338,26 @@ files:
300
338
  - strong_presenter.gemspec
301
339
  homepage: https://github.com/ronalchn/strong_presenter
302
340
  licenses: []
341
+ metadata: {}
303
342
  post_install_message:
304
343
  rdoc_options: []
305
344
  require_paths:
306
345
  - lib
307
346
  required_ruby_version: !ruby/object:Gem::Requirement
308
- none: false
309
347
  requirements:
310
- - - ! '>='
348
+ - - '>='
311
349
  - !ruby/object:Gem::Version
312
350
  version: '0'
313
351
  required_rubygems_version: !ruby/object:Gem::Requirement
314
- none: false
315
352
  requirements:
316
- - - ! '>='
353
+ - - '>='
317
354
  - !ruby/object:Gem::Version
318
355
  version: '0'
319
356
  requirements: []
320
357
  rubyforge_project:
321
- rubygems_version: 1.8.17
358
+ rubygems_version: 2.0.3
322
359
  signing_key:
323
- specification_version: 3
360
+ specification_version: 4
324
361
  summary: strong_presenter adds a layer of presentation logic to your application,
325
362
  and gives you strong_parameters-like logic to determine which attributes are visible
326
363
  test_files:
@@ -411,4 +448,3 @@ test_files:
411
448
  - spec/support/models.rb
412
449
  - spec/support/schema.rb
413
450
  - spec/support/shared_examples/view_helpers.rb
414
- has_rdoc: