upholsterer 0.4.5 → 0.5.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: 82a5b679c3a25d0c7e689e13c81cd3694610d4d8
4
- data.tar.gz: 5ede3e5c7b04cd34376d21becbe2de1326c57295
3
+ metadata.gz: dba9d573261b59fac0cbeb4d5e84a4d8b86b82bc
4
+ data.tar.gz: 12dc5ee6b0c8dec15e33bebb00420338eb770c88
5
5
  SHA512:
6
- metadata.gz: 1c84077f3ad3c5c0694c485755b88007d8820d9ce35a34540c29f2d2499715c031ce6f605f2cce25d6642a54b995c77c030a6c4f07a264c2253dd088cc314aee
7
- data.tar.gz: 3194d7453a8173575df38ff6e90c4f19e2f7b289d0d9d564f99dc8c1c861b290de394b6b392216f0a83e206a0410f971a1cdce40f2f148e52151c2bf0365b3c6
6
+ metadata.gz: ec15e2d7913c8df58739b39256f8b8bd8286b9790498bba0528abffc79a52df11c4be1c066a49dc0d2e67898bf9a6e28148a5a47c8a6e73ac1d12c13f8a97414
7
+ data.tar.gz: 870195e092a9ab36dccd7e65defb97b66d4ce3d30ecae610331c9e87d54310e8436ef0fbed329a61fa7066c285396620c6c903a4bad2dc3f7847cd6f504682a6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- upholsterer (0.4.5)
4
+ upholsterer (0.5.0)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -128,21 +128,25 @@ module Upholsterer
128
128
  end
129
129
 
130
130
  attrs.each do |attr_name|
131
- method_name = [
132
- method_prefix,
133
- options.fetch(:as, attr_name)
134
- ].compact.join('_')
135
-
136
- attributes[method_name.to_sym] = [attr_name, options]
137
-
138
- if block_given? and container.present?
139
- delegate attr_name, to: wrapper_method, prefix: !!method_prefix
131
+ if options.fetch(:serializable, false)
132
+ attributes[attr_name] = [attr_name, options]
140
133
  else
141
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
142
- def #{method_name}(&block) # def user_name(&block)
143
- proxy_message(#{container.inspect}, "#{attr_name}", &block) # proxy_message("user", "name")
144
- end # end
145
- RUBY
134
+ method_name = [
135
+ method_prefix,
136
+ options.fetch(:as, attr_name)
137
+ ].compact.join('_')
138
+
139
+ attributes[method_name.to_sym] = [attr_name, options]
140
+
141
+ if block_given? and container.present?
142
+ delegate attr_name, to: wrapper_method, prefix: !!method_prefix
143
+ else
144
+ 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
148
+ RUBY
149
+ end
146
150
  end
147
151
  end
148
152
  end
@@ -4,6 +4,12 @@ module Upholsterer
4
4
  class Base
5
5
  delegate :to_json, :as_json, to: :to_hash, prefix: false
6
6
 
7
+ def self.serializable(*args)
8
+ args.each do |method_name|
9
+ attributes[method_name.to_sym] = [method_name.to_sym, { serializable: true }]
10
+ end
11
+ end
12
+
7
13
  def to_hash
8
14
  Hash[json_fields.collect do |field|
9
15
  [field, public_send(field)]
@@ -15,10 +21,13 @@ module Upholsterer
15
21
  private
16
22
 
17
23
  def json_fields
18
- @json_fields ||= public_methods(false).tap do |fields|
19
- fields.delete(:subject)
20
- fields.delete(:respond_to?)
21
- fields.delete(:method_missing)
24
+ @json_fields ||= begin
25
+ methods = public_methods(false).tap do |fields|
26
+ fields.delete(:subject)
27
+ fields.delete(:respond_to?)
28
+ fields.delete(:method_missing)
29
+ end
30
+ (methods + self.class.attributes.keys).uniq
22
31
  end
23
32
  end
24
33
  end
@@ -1,8 +1,8 @@
1
1
  module Upholsterer
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 4
5
- PATCH = 5
4
+ MINOR = 5
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -186,6 +186,14 @@ describe Upholsterer::Base do
186
186
  it { should eq '{}' }
187
187
  end
188
188
 
189
+ describe 'serializable' do
190
+ describe 'with inheritance' do
191
+ subject { SerializablePresenter.new(double).to_json }
192
+
193
+ it { should eq '{"one":1,"two":2}'}
194
+ end
195
+ end
196
+
189
197
  describe 'expose with block' do
190
198
  let(:project) { double id: 1, description: 'description', type: 'type' }
191
199
  subject { CollectPresenter.new(entity) }
@@ -0,0 +1,19 @@
1
+ class SerializableParentPresenter < Presenter
2
+ serializable :one, :two
3
+
4
+ def one
5
+ 1
6
+ end
7
+
8
+ def two
9
+ 2
10
+ end
11
+
12
+ def three
13
+ 3
14
+ end
15
+ end
16
+
17
+
18
+ class SerializablePresenter < SerializableParentPresenter
19
+ 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/llxff/upholsterer'
11
+ s.homepage = 'https://github.com/Archistart/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: 0.4.5
4
+ version: 0.5.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: 2014-12-18 00:00:00.000000000 Z
13
+ date: 2015-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -89,7 +89,6 @@ files:
89
89
  - lib/upholsterer/rails.rb
90
90
  - lib/upholsterer/url_methods.rb
91
91
  - lib/upholsterer/version.rb
92
- - simple_presenter.gemspec
93
92
  - spec/base_spec.rb
94
93
  - spec/spec_helper.rb
95
94
  - spec/support/alias_presenter.rb
@@ -99,10 +98,12 @@ files:
99
98
  - spec/support/expose_all_presenter.rb
100
99
  - spec/support/iterator_presenter.rb
101
100
  - spec/support/matchers/json_matcher.rb
101
+ - spec/support/serializable_presenter.rb
102
102
  - spec/support/user.rb
103
103
  - spec/support/user_presenter.rb
104
104
  - spec/upholsterer_spec.rb
105
- homepage: https://github.com/llxff/upholsterer
105
+ - upholsterer.gemspec
106
+ homepage: https://github.com/Archistart/upholsterer
106
107
  licenses: []
107
108
  metadata: {}
108
109
  post_install_message: