upholsterer 1.0.0 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79b625b13949006b5ee9984702f5eb5af079a88f
4
- data.tar.gz: bfdb699846f9722fdc5baacf3a00cac38f6bdb9a
3
+ metadata.gz: 11648613c825e5c1cf104ce4f6b77605b5474876
4
+ data.tar.gz: 1255ad6efa4bbd9c6fb33ecaec1fcd69792033ac
5
5
  SHA512:
6
- metadata.gz: 69d3ecd24a9694a4a89fd7ef9ce3407ffaacea6171f66536b284061bbbb3b37c9f82c1ed57167fb1d046e1f232e23aab81dd57b5db188b40da7d1ded505dab31
7
- data.tar.gz: fe5cfa268a0a419b4bc83b7b92aa4c7b14683e4d82adb73fa49efc7d850abf07c6b6cd6c1ec9280440919bc91e9cf038700d2f452576c59ed91e82f0227bae1c
6
+ metadata.gz: 1e3f4c361612f89d9eb1eb4556c13fc9670341a182fbd369c213db6ca2030374068854b68109c3c9612ecffa5744b8335ad4c13d39f11edf5ea1d017a78e8fe5
7
+ data.tar.gz: 5eedee0c00428232b37e33a13336fd0de020c5ff2b7d6c229e6c6a51f20d853e1456cc1e1b56e5f672dc6a4336ead0d88661a5e3e091511b7a47820916f47d24
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- upholsterer (1.0.0)
4
+ upholsterer (1.1.0)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -2,9 +2,9 @@
2
2
 
3
3
  Based on SimplePresenter (https://github.com/fnando/simple_presenter)
4
4
 
5
- {<img src="https://codeclimate.com/github/Archistart/upholsterer/badges/gpa.svg" />}[https://codeclimate.com/github/Archistart/upholsterer]
6
- {<img src="https://hakiri.io/github/Archistart/upholsterer/master.svg" alt="security" />}[https://hakiri.io/github/Archistart/upholsterer/master]
7
- {<img src="https://travis-ci.org/Archistart/upholsterer.svg" />}[https://travis-ci.org/Archistart/upholsterer]
5
+ {<img src="https://codeclimate.com/github/llxff/upholsterer/badges/gpa.svg" />}[https://codeclimate.com/github/llxff/upholsterer]
6
+ {<img src="https://hakiri.io/github/llxff/upholsterer/master.svg" alt="security" />}[https://hakiri.io/github/llxff/upholsterer/master]
7
+ {<img src="https://travis-ci.org/llxff/upholsterer.svg" />}[https://travis-ci.org/llxff/upholsterer]
8
8
 
9
9
  == Installation
10
10
 
@@ -103,6 +103,7 @@ module Upholsterer
103
103
 
104
104
  container = options.fetch(:with, nil)
105
105
  method_prefix = container if options.fetch(:prefix, true)
106
+ presenter = options.fetch(:presenter, nil)
106
107
 
107
108
  if block_given? and container.present?
108
109
  wrapper_method = "#{ attrs.join('_') }_wrapper"
@@ -121,7 +122,10 @@ module Upholsterer
121
122
  instance_variable_set(wrapper_instance_variable, wrapper)
122
123
  end
123
124
 
124
- instance_variable_get(wrapper_instance_variable)
125
+
126
+
127
+ value = instance_variable_get(wrapper_instance_variable)
128
+ decorate_with_presenter(value, presenter)
125
129
  end
126
130
 
127
131
  private wrapper_method
@@ -142,9 +146,10 @@ module Upholsterer
142
146
  delegate attr_name, to: wrapper_method, prefix: !!method_prefix
143
147
  else
144
148
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
145
- def #{method_name}(&block) # def user_name(&block)
146
- proxy_message(#{container.inspect}, "#{attr_name}", &block) # proxy_message("user", "name")
147
- end # end
149
+ def #{method_name}(&block)
150
+ value = proxy_message(#{container.inspect}, "#{attr_name}", &block)
151
+ decorate_with_presenter(value, #{ presenter.inspect })
152
+ end
148
153
  RUBY
149
154
  end
150
155
  end
@@ -197,5 +202,13 @@ module Upholsterer
197
202
  subject = instance_variable_get("@#{self.class.subjects.first}").__send__(subject_name) unless subject || self.class.subjects.include?(subject_name)
198
203
  subject.respond_to?(method) ? subject.__send__(method, &block) : nil
199
204
  end
205
+
206
+ def decorate_with_presenter(value, presenter)
207
+ if value.present? and presenter
208
+ presenter.new(value)
209
+ else
210
+ value
211
+ end
212
+ end
200
213
  end
201
214
  end
@@ -1,7 +1,7 @@
1
1
  module Upholsterer
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
@@ -219,4 +219,34 @@ describe Upholsterer::Base do
219
219
  its(:to_json) { should be_json_with(name: 'Real', email: 'foo@bar.com', id: 1, description: 'real_description', type: 'real_type') }
220
220
  end
221
221
  end
222
+
223
+ describe 'expose with other presenter' do
224
+ context 'with several subjects' do
225
+ let(:user) { double name: 'Peter', email: 'peter@email.com' }
226
+ let(:comment) { double(user: double(name: 'Steve', email: 'steve@email.com')) }
227
+
228
+ subject { ExposeWithOtherPresenter.new(user, comment) }
229
+
230
+ its(:user_name) { should eq 'Peter' }
231
+
232
+ specify { expect(subject.creator.name).to eq 'Steve' }
233
+ specify { expect(subject.creator.email).to eq 'steve@email.com' }
234
+ its(:to_json) { should be_json_with(user_name: 'Peter', creator: { name: 'Steve', email: 'steve@email.com'}) }
235
+ end
236
+
237
+ context 'with one subject' do
238
+ let(:user) { double name: 'Peter', email: 'peter@email.com' }
239
+ let(:post) { double user: user, comment: nil, id: 1}
240
+
241
+ subject { ExposeWithOneSubjectPresenter.new(post) }
242
+
243
+ its(:id) { should eq 1 }
244
+ its(:comment) { should be_nil }
245
+
246
+ specify { expect(subject.user.name).to eq 'Peter' }
247
+ specify { expect(subject.user.email).to eq 'peter@email.com' }
248
+
249
+ its(:to_json) { should be_json_with(id: 1, user: { name: 'Peter', email: 'peter@email.com'}, comment: nil) }
250
+ end
251
+ end
222
252
  end
@@ -0,0 +1,16 @@
1
+ class SimplePresenter < Presenter
2
+ expose :name, :email
3
+ end
4
+
5
+ class ExposeWithOtherPresenter < Presenter
6
+ subjects :user, :comment
7
+
8
+ expose :name, with: :user
9
+ expose :user, presenter: SimplePresenter, with: :comment, as: :creator, prefix: false
10
+ end
11
+
12
+ class ExposeWithOneSubjectPresenter < Presenter
13
+ expose :id
14
+ expose :user, presenter: SimplePresenter
15
+ expose :comment, presenter: SimplePresenter
16
+ end
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ['Nando Vieira', 'Aleksandr Fomin', 'Gleb Sinyavsky']
10
10
  s.email = ['fnando.vieira@gmail.com', 'll.wg.bin@gmail.com']
11
- s.homepage = 'https://github.com/Archistart/upholsterer'
11
+ s.homepage = 'https://github.com/llxff/upholsterer'
12
12
  s.summary = 'A simple presenter/facade/decorator/whatever implementation.'
13
13
  s.description = s.summary
14
14
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upholsterer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-08-26 00:00:00.000000000 Z
13
+ date: 2015-09-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -96,6 +96,7 @@ files:
96
96
  - spec/support/comment.rb
97
97
  - spec/support/comment_presenter.rb
98
98
  - spec/support/expose_all_presenter.rb
99
+ - spec/support/expose_with_other_presenter.rb
99
100
  - spec/support/iterator_presenter.rb
100
101
  - spec/support/matchers/json_matcher.rb
101
102
  - spec/support/serializable_presenter.rb
@@ -103,7 +104,7 @@ files:
103
104
  - spec/support/user_presenter.rb
104
105
  - spec/upholsterer_spec.rb
105
106
  - upholsterer.gemspec
106
- homepage: https://github.com/Archistart/upholsterer
107
+ homepage: https://github.com/llxff/upholsterer
107
108
  licenses: []
108
109
  metadata: {}
109
110
  post_install_message: