representable 2.1.6 → 2.1.7

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: 8c49b50c08553f95fcf4125c6fecd1a951f9303f
4
- data.tar.gz: 1f1236f5bc0b0736f4a042b8cd85b928ab8cec04
3
+ metadata.gz: 89001d90401ddb1d037e061a528599b5a5766a9a
4
+ data.tar.gz: e7035bf1405dbb411f4daee3aa8bdfb499d8bb3f
5
5
  SHA512:
6
- metadata.gz: 04b4160bcc81156d193f141167c3f954f30429fd96afdfab08502db8537806937329370794f7067aa207297a85ad70b7fe3e6139f312c76f60b24c515e6b7a5e
7
- data.tar.gz: 96ff73a1056aacdffb00a0742dc218c525ab596325042142878a0de6894c5ce459a4e2a5012270eca554f9dae9265b3aa3e6f97c1784f4cc6390465a23cf2fe0
6
+ metadata.gz: 619b6f1015ba1af6a6047864512d39b7f2d0d1b3e237e6124f2967c8fa0dadecef7f0ccd10ce065c1a9b18455fcb09c2ce91e0ab3da5e1417a527f9de0bf4f6b
7
+ data.tar.gz: 4bcf5e4dae36a937aa1dcba0908ac7dcbd575438c6c8ad0bd92aa011eaa49cb8aa36d4b33f99039713aed14b07b5fa2a564ec06aea6546fa5695f6056c2e77a8
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.1.7
2
+
3
+ * Adding `Object#to_object`. This is even faster than using `#from_object` for simple transformations.
4
+
1
5
  # 2.1.6
2
6
 
3
7
  * Introducing `Representable::Object` that allows mapping objects to objects. This is way faster than rendering a hash from the source and then writing the hash to the target object.
@@ -21,5 +21,9 @@ module Representable
21
21
  def from_object(data, options={}, binding_builder=Binding)
22
22
  update_properties_from(data, options, binding_builder)
23
23
  end
24
+
25
+ def to_object(options={}, binding_builder=Binding)
26
+ create_representation_with(nil, options, binding_builder)
27
+ end
24
28
  end
25
29
  end
@@ -13,10 +13,19 @@ module Representable
13
13
  fragment
14
14
  end
15
15
 
16
+ def write(hash, fragment)
17
+ true
18
+ end
19
+
16
20
  def deserialize_method
17
21
  :from_object
18
22
  end
19
23
 
24
+ def serialize_method
25
+ :to_object
26
+ end
27
+
28
+
20
29
  class Collection < self
21
30
  include Representable::Binding::Collection
22
31
  end
@@ -1,3 +1,3 @@
1
1
  module Representable
2
- VERSION = "2.1.6"
2
+ VERSION = "2.1.7"
3
3
  end
@@ -0,0 +1,31 @@
1
+ require "test_helper"
2
+
3
+ require "ostruct"
4
+ require "pp"
5
+
6
+
7
+ source = OpenStruct.new(name: "30 Years Live", songs: [
8
+ OpenStruct.new(id: 1, title: "Dear Beloved"), OpenStruct.new(id: 2, title: "Fuck Armageddon")])
9
+
10
+ pp source
11
+
12
+ require "representable/object"
13
+
14
+ class AlbumRepresenter < Representable::Decorator
15
+ include Representable::Object
16
+
17
+ property :name
18
+ collection :songs, instance: ->(fragment, *) { Song.new } do
19
+ property :title
20
+ end
21
+ end
22
+
23
+
24
+ Album = Struct.new(:name, :songs)
25
+ Song = Struct.new(:title)
26
+
27
+ target = Album.new
28
+
29
+ AlbumRepresenter.new(target).from_object(source)
30
+
31
+ pp target
@@ -8,10 +8,10 @@ class ObjectTest < MiniTest::Spec
8
8
  representer!(module: Representable::Object) do
9
9
  property :title
10
10
 
11
- property :album, instance: lambda { |fragment, *| fragment } do
11
+ property :album, instance: lambda { |fragment, *| fragment.name.upcase!; fragment } do
12
12
  property :name
13
13
 
14
- collection :songs, instance: lambda { |fragment, *|fragment } do
14
+ collection :songs, instance: lambda { |fragment, *| fragment.title.upcase!; fragment } do
15
15
  property :title
16
16
  end
17
17
  end
@@ -25,8 +25,8 @@ class ObjectTest < MiniTest::Spec
25
25
  representer.prepare(target).from_object(source)
26
26
 
27
27
  target.title.must_equal "The King Is Dead"
28
- target.album.name.must_equal "Ruiner"
29
- target.album.songs[0].title.must_equal "In Vino Veritas II"
28
+ target.album.name.must_equal "RUINER"
29
+ target.album.songs[0].title.must_equal "IN VINO VERITAS II"
30
30
  end
31
31
 
32
32
  # ignore nested object when nil
@@ -36,4 +36,25 @@ class ObjectTest < MiniTest::Spec
36
36
  target.title.must_equal nil # scalar property gets overridden when nil.
37
37
  target.album.must_equal nil # nested property stays nil.
38
38
  end
39
+
40
+ # to_object
41
+ describe "#to_object" do
42
+ representer!(module: Representable::Object) do
43
+ property :title
44
+
45
+ property :album, render_filter: lambda { |object, *| object.name = "Live"; object } do
46
+ property :name
47
+
48
+ collection :songs, render_filter: lambda { |object, *| object[0].title = 1; object } do
49
+ property :title
50
+ end
51
+ end
52
+ end
53
+
54
+ it do
55
+ representer.prepare(source).to_object
56
+ source.album.name.must_equal "Live"
57
+ source.album.songs[0].title.must_equal 1
58
+ end
59
+ end
39
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: representable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.6
4
+ version: 2.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -215,6 +215,7 @@ files:
215
215
  - test/decorator_test.rb
216
216
  - test/definition_test.rb
217
217
  - test/example.rb
218
+ - test/examples/object.rb
218
219
  - test/exec_context_test.rb
219
220
  - test/features_test.rb
220
221
  - test/filter_test.rb
@@ -288,6 +289,7 @@ test_files:
288
289
  - test/decorator_test.rb
289
290
  - test/definition_test.rb
290
291
  - test/example.rb
292
+ - test/examples/object.rb
291
293
  - test/exec_context_test.rb
292
294
  - test/features_test.rb
293
295
  - test/filter_test.rb