disposable 0.1.1 → 0.1.2

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: 333ff0a256285692e2f30e1dd908b671a8f93a0a
4
- data.tar.gz: ff98cc474bd5b508066d459489c711643d6164e1
3
+ metadata.gz: 344f81de5499edef8813bf4f4c20d4b39e8b351f
4
+ data.tar.gz: 1e2a2305010b56e2f6a285a704206a54d6f6fb0e
5
5
  SHA512:
6
- metadata.gz: 9ca99470a8d3eed471d107648d17fb8d9d3525e4191cb2d635404c5c4e9dcacf10c6fefec61ea4835a6a38a7083667a33f131a0fc442e6418c7d549e9f8c1dc1
7
- data.tar.gz: c56cb7f98015746abf7ce43d05d6479e0bfa2b7c25df41a2c41f64fd3519c9613e08d755d335cb2128bc7a0b29f5b4e14dd5530bd6cf83c9b521217ad7475c21
6
+ metadata.gz: 0ae1f63242b61ca78b801762a36caeff71c292e83a146478e60916b5fac3a072879296dcee95c7dbe06a3b146a7f533613fd32bb9a4deb7ff7ceb287535163d1
7
+ data.tar.gz: e9d20cb50187ead62ff6a58ed89e4598e74168ab7d49a9edf857d0d46e683c521e616e448a76b66fdc341c41217067bd3b7b1b0b9c954f2af5d273a35d47e974
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.1.2
2
+
3
+ * Fix `Changed` which does not use the public reader to compare anymore, but the private `field_read`.
4
+
1
5
  # 0.1.1
2
6
 
3
7
  * Adding `Setup::SkipSetter` and `Sync::SkipGetter`.
data/database.sqlite3 CHANGED
Binary file
@@ -80,9 +80,19 @@ module Disposable
80
80
  return if dfn[:twin] and value.nil? # TODO: test me (model.composer => nil)
81
81
  value = dfn.array? ? wrap_collection(dfn, value) : wrap_scalar(dfn, value) if dfn[:twin]
82
82
 
83
+ field_write(name, value)
84
+ end
85
+
86
+ # Write the property's value without using the public writer.
87
+ def field_write(name, value)
83
88
  @fields[name.to_s] = value
84
89
  end
85
90
 
91
+ # Read the property's value without using the public reader.
92
+ def field_read(name)
93
+ @fields[name.to_s]
94
+ end
95
+
86
96
  def wrap_scalar(dfn, value)
87
97
  Twinner.new(dfn).(value)
88
98
  end
@@ -32,7 +32,7 @@ private
32
32
  end
33
33
 
34
34
  def write_property(name, value, dfn)
35
- old_value = send(name)
35
+ old_value = field_read(name)
36
36
 
37
37
  super.tap do
38
38
  _changed[name.to_s] = old_value != value
@@ -1,3 +1,3 @@
1
1
  module Disposable
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -34,4 +34,88 @@ class SkipGetterTest < MiniTest::Spec
34
34
  album.title.must_equal "Wild Frontier"
35
35
  album.artist.name.must_equal "Gary Moore"
36
36
  end
37
+ end
38
+
39
+
40
+ class SkipSetterTest < MiniTest::Spec
41
+ Album = Struct.new(:title, :artist)
42
+ Artist = Struct.new(:name)
43
+
44
+ class AlbumTwin < Disposable::Twin
45
+ feature Setup::SkipSetter
46
+
47
+ property :title
48
+ property :artist do
49
+ property :name
50
+
51
+ def name=(v)
52
+ super(v.upcase)
53
+ end
54
+ end
55
+
56
+ def title=(v)
57
+ super(v.reverse)
58
+ end
59
+ end
60
+
61
+ it do
62
+ twin = AlbumTwin.new(Album.new("Wild Frontier", Artist.new("Gary Moore")))
63
+
64
+ twin.title.must_equal "Wild Frontier"
65
+ twin.artist.name.must_equal "Gary Moore"
66
+ end
67
+ end
68
+
69
+
70
+ class SkipGetterAndSetterWithChangedTest < MiniTest::Spec
71
+ Album = Struct.new(:title, :artist)
72
+ Artist = Struct.new(:name)
73
+
74
+ class AlbumTwin < Disposable::Twin
75
+ feature Sync
76
+ feature Sync::SkipGetter
77
+ feature Setup::SkipSetter
78
+ feature Changed
79
+
80
+ property :title
81
+ property :artist do
82
+ property :name
83
+
84
+ def name
85
+ super.upcase
86
+ end
87
+
88
+ def name=(v)
89
+ super v.chop
90
+ end
91
+ end
92
+
93
+ def title
94
+ super.reverse
95
+ end
96
+
97
+ def title=(v)
98
+ super v.reverse
99
+ end
100
+ end
101
+
102
+ it do
103
+ album = Album.new("Wild Frontier", Artist.new("Gary Moore"))
104
+ twin = AlbumTwin.new(album) # does not call getter (Changed).
105
+
106
+
107
+ twin.title.must_equal "reitnorF dliW"
108
+ twin.artist.name.must_equal "GARY MOORE"
109
+
110
+ twin.changed?.must_equal false
111
+ twin.artist.changed?.must_equal false
112
+
113
+ twin.title = "Self-Entitled"
114
+ twin.artist.name = "Nofx"
115
+
116
+ twin.sync # does NOT call getter.
117
+
118
+ album.title.must_equal "deltitnE-fleS"
119
+ album.artist.name.must_equal "Nof"
120
+ end
37
121
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disposable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
@@ -166,7 +166,6 @@ files:
166
166
  - test/expose_test.rb
167
167
  - test/persisted_test.rb
168
168
  - test/skip_getter_test.rb
169
- - test/skip_setter_test.rb
170
169
  - test/test_helper.rb
171
170
  - test/twin/benchmarking.rb
172
171
  - test/twin/builder_test.rb
@@ -221,7 +220,6 @@ test_files:
221
220
  - test/expose_test.rb
222
221
  - test/persisted_test.rb
223
222
  - test/skip_getter_test.rb
224
- - test/skip_setter_test.rb
225
223
  - test/test_helper.rb
226
224
  - test/twin/benchmarking.rb
227
225
  - test/twin/builder_test.rb
@@ -1,30 +0,0 @@
1
- require "test_helper"
2
-
3
- class SkipSetterTest < MiniTest::Spec
4
- Album = Struct.new(:title, :artist)
5
- Artist = Struct.new(:name)
6
-
7
- class AlbumTwin < Disposable::Twin
8
- feature Setup::SkipSetter
9
-
10
- property :title
11
- property :artist do
12
- property :name
13
-
14
- def name=(v)
15
- super(v.upcase)
16
- end
17
- end
18
-
19
- def title=(v)
20
- super(v.reverse)
21
- end
22
- end
23
-
24
- it do
25
- twin = AlbumTwin.new(Album.new("Wild Frontier", Artist.new("Gary Moore")))
26
-
27
- twin.title.must_equal "Wild Frontier"
28
- twin.artist.name.must_equal "Gary Moore"
29
- end
30
- end