disposable 0.1.1 → 0.1.2

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: 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