representable 2.0.0 → 2.0.1

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: c087dd37e5b99234457b7af5b0982c4238f1059e
4
- data.tar.gz: 36e96f16f6a45cd22d5b1e281e0883027cd18c79
3
+ metadata.gz: 02b8c14c0fc4d4cd99d4906ce14f5ffc87d7add8
4
+ data.tar.gz: 8c378c85716d5bf817fc1a4659cf45b3f375d8c1
5
5
  SHA512:
6
- metadata.gz: 2712084960fe0e91579c9bd7a11a33c8ad1ad1512517810ee05b751b5d8dccc302fec8eb195b39b18c0283e62de3285dc972f15f4f9a2c6073f89829f3b8780b
7
- data.tar.gz: 7de91a94a2264f81010610094d1ab81657dc4c4ac0376393e3bb6e717b9f844dd189ca921a6d397384f490253858e21e419931632f47cc074f48cd9580b38783
6
+ metadata.gz: 09f69957eeed18fe92b93813b6dcff20dd08416260c50437a070f244b8f10ac3647264cbce5754b5da60395165b3bf37a2dd1e6cdea7c031dd0153c3b82f4895
7
+ data.tar.gz: b81e550bce5ad004793e25b1de50faa19b946560e754cdfc361b38661cce5e21bc8851c4f4b73b7868b9cdc00a2cee016544c794ef82fb8c9adec25e6ccc152e
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.0.1
2
+
3
+ * Made is simpler to define your own `Definition` class by passing it to `Config.new(Definition)` in `Representer::build_config`.
4
+
1
5
  # 2.0.0
2
6
 
3
7
  ## Relevant
@@ -6,8 +10,8 @@
6
10
  * Inline representers in `Decorator` do *no longer inherit from `self`*. When defining an inline representer, they are always derived from `Representable::Decorator`. The base class can be changed by overriding `Decorator::default_inline_class` in the decorator class that defines an inline representer block.
7
11
  If you need to inherit common methods to all inline decorators, include the module using `::feature`: `Representer.feature(BetterProperty)`.
8
12
  * You can now define methods in inline representers! The block is now `module_eval`ed and not `instance_exec`ed anymore. Same goes for Decorators, note that you need to `exec_context: :decorator`, though. Here, the block is `class_eval`ed.
9
- * Removed behaviour for `instance: lambda { |*| nil }` which used to return `binding.get`. Simply do it yourself: `instance: lambda { |fragment, options| options.binding.get }` if you need this behaviour. If you use `:instance` and it returns `nil` it throws a `DeserializeError` now, which is way more understandable than `NoMethodError: undefined method `title=' for {"title"=>"Perpetual"}:Hash`.
10
- * Remove behaviour for `class: lambda { nil }` which used to return the fragment. This now throws a `DeserializeError`. Do it yourself with class: lambda { |fragment,*| fragment }.
13
+ * Removed behaviour for `instance: lambda { |*| nil }` which used to return `binding.get`. Simply do it yourself: `instance: lambda { |fragment, options| options.binding.get }` if you need this behaviour. If you use `:instance` and it returns `nil` it throws a `DeserializeError` now, which is way more understandable than `NoMethodError: undefined method 'title=' for {"title"=>"Perpetual"}:Hash`.
14
+ * Remove behaviour for `class: lambda { nil }` which used to return the fragment. This now throws a `DeserializeError`. Do it yourself with `class: lambda { |fragment,*| fragment }`.
11
15
  * Coercion now happens inside `:render_filter` and `:parse_filter` (new!) and doesn't block `:getter` and `:setter` anymore. Also, we require virtus >=1.0 now.
12
16
  * `::representation_wrap=` in now properly inherited.
13
17
  * Including modules with representable `property .., inherit: true` into a `Decorator` crashed. This works fine now.
@@ -16,8 +20,8 @@ If you need to inherit common methods to all inline decorators, include the modu
16
20
 
17
21
  * Added `::for_collection` to automatically generate a collection representer for singular one. Thanks to @timoschilling for inspiring this years ago.
18
22
  * Added `::represent` that will detect collections and render the singular/collection with the respective representer.
19
- * Callable options
20
- * :parse_filter, :render_filter
23
+ * Added `Callable` options.
24
+ * Added `:parse_filter` and `:render_filter`.
21
25
 
22
26
  ## Internals
23
27
 
@@ -14,13 +14,21 @@ module Representable
14
14
 
15
15
  # Stores Definitions from ::property. It preserves the adding order (1.9+).
16
16
  # Same-named properties get overridden, just like in a Hash.
17
+ #
18
+ # Overwrite definition_class if you need a custom Definition object (helpful when using
19
+ # representable in other gems).
17
20
  class Definitions < Inheritable::Hash
21
+ def initialize(definition_class)
22
+ @definition_class = definition_class
23
+ super()
24
+ end
25
+
18
26
  def add(name, options, &block)
19
27
  if options[:inherit] # i like that: the :inherit shouldn't be handled outside.
20
28
  return get(name).merge!(options, &block)
21
29
  end
22
30
 
23
- self[name.to_s] = Definition.new(name, options, &block)
31
+ self[name.to_s] = definition_class.new(name, options, &block)
24
32
  end
25
33
 
26
34
  def get(name)
@@ -29,14 +37,17 @@ module Representable
29
37
 
30
38
  extend Forwardable
31
39
  def_delegators :values, :each # so we look like an array. this is only used in Mapper. we could change that so we don't need to hide the hash.
40
+
41
+ private
42
+ attr_reader :definition_class
32
43
  end
33
44
 
34
45
 
35
- def initialize
46
+ def initialize(definition_class=Definition)
36
47
  super
37
48
  merge!(
38
49
  :features => @features = Inheritable::Hash.new,
39
- :definitions => @definitions = Definitions.new,
50
+ :definitions => @definitions = Definitions.new(definition_class),
40
51
  :options => @options = Inheritable::Hash.new,
41
52
  :wrap => nil )
42
53
  end
@@ -1,3 +1,3 @@
1
1
  module Representable
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -520,4 +520,38 @@ class RepresentableTest < MiniTest::Spec
520
520
  inner.wont_be_kind_of Representable::Hash
521
521
  end
522
522
  end
523
+
524
+
525
+ # using your own Definition class
526
+ class StaticDefinition < Representable::Definition
527
+ def initialize(name, options)
528
+ options[:as] = :Name
529
+ super
530
+ end
531
+ end
532
+
533
+
534
+ module StaticRepresenter
535
+ def self.build_config
536
+ Representable::Config.new(StaticDefinition)
537
+ end
538
+ include Representable::Hash
539
+
540
+ property :title
541
+ end
542
+
543
+ # we currently need an intermediate decorator to inherit ::build_config properly.
544
+ class BaseDecorator < Representable::Decorator
545
+ include Representable::Hash
546
+ def self.build_config
547
+ Representable::Config.new(StaticDefinition)
548
+ end
549
+ end
550
+
551
+ class StaticDecorator < BaseDecorator
552
+ property :title
553
+ end
554
+
555
+ it { OpenStruct.new(:title => "Tarutiri").extend(StaticRepresenter).to_hash.must_equal({"Name"=>"Tarutiri"}) }
556
+ it { StaticDecorator.new(OpenStruct.new(:title => "Tarutiri")).to_hash.must_equal({"Name"=>"Tarutiri"}) }
523
557
  end
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: representable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-30 00:00:00.000000000 Z
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: uber
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.7
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.7
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: test_xml
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.1.6
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.1.6
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 5.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 5.0.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: mocha
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.13.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.13.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: mongoid
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: virtus
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: json
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: 1.7.7
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.7.7
153
153
  description: Renders and parses JSON/XML/YAML documents from and to Ruby objects.
@@ -158,8 +158,8 @@ executables: []
158
158
  extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
- - .gitignore
162
- - .travis.yml
161
+ - ".gitignore"
162
+ - ".travis.yml"
163
163
  - CHANGES.md
164
164
  - Gemfile
165
165
  - LICENSE
@@ -250,12 +250,12 @@ require_paths:
250
250
  - lib
251
251
  required_ruby_version: !ruby/object:Gem::Requirement
252
252
  requirements:
253
- - - '>='
253
+ - - ">="
254
254
  - !ruby/object:Gem::Version
255
255
  version: '0'
256
256
  required_rubygems_version: !ruby/object:Gem::Requirement
257
257
  requirements:
258
- - - '>='
258
+ - - ">="
259
259
  - !ruby/object:Gem::Version
260
260
  version: '0'
261
261
  requirements: []
@@ -265,4 +265,46 @@ signing_key:
265
265
  specification_version: 4
266
266
  summary: Renders and parses JSON/XML/YAML documents from and to Ruby objects. Includes
267
267
  plain properties, collections, nesting, coercion and more.
268
- test_files: []
268
+ test_files:
269
+ - test/as_test.rb
270
+ - test/class_test.rb
271
+ - test/coercion_test.rb
272
+ - test/config/inherit_test.rb
273
+ - test/config_test.rb
274
+ - test/decorator_scope_test.rb
275
+ - test/decorator_test.rb
276
+ - test/definition_test.rb
277
+ - test/example.rb
278
+ - test/exec_context_test.rb
279
+ - test/features_test.rb
280
+ - test/filter_test.rb
281
+ - test/for_collection_test.rb
282
+ - test/generic_test.rb
283
+ - test/getter_setter_test.rb
284
+ - test/hash_bindings_test.rb
285
+ - test/hash_test.rb
286
+ - test/if_test.rb
287
+ - test/inherit_test.rb
288
+ - test/inheritable_test.rb
289
+ - test/inline_test.rb
290
+ - test/instance_test.rb
291
+ - test/is_representable_test.rb
292
+ - test/json_test.rb
293
+ - test/lonely_test.rb
294
+ - test/mongoid_test.rb
295
+ - test/nested_test.rb
296
+ - test/parse_strategy_test.rb
297
+ - test/pass_options_test.rb
298
+ - test/prepare_test.rb
299
+ - test/reader_writer_test.rb
300
+ - test/represent_test.rb
301
+ - test/representable_test.rb
302
+ - test/schema_test.rb
303
+ - test/serialize_deserialize_test.rb
304
+ - test/stringify_hash_test.rb
305
+ - test/test_helper.rb
306
+ - test/test_helper_test.rb
307
+ - test/wrap_test.rb
308
+ - test/xml_bindings_test.rb
309
+ - test/xml_test.rb
310
+ - test/yaml_test.rb