disposable 0.4.3 → 0.5.0

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.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +29 -0
  3. data/.gitignore +1 -0
  4. data/CHANGES.md +23 -0
  5. data/Gemfile +5 -12
  6. data/README.md +2 -2
  7. data/disposable.gemspec +6 -9
  8. data/lib/disposable/rescheme.rb +1 -3
  9. data/lib/disposable/twin.rb +7 -0
  10. data/lib/disposable/twin/coercion.rb +11 -3
  11. data/lib/disposable/twin/default.rb +3 -3
  12. data/lib/disposable/twin/property/struct.rb +3 -1
  13. data/lib/disposable/twin/setup.rb +1 -1
  14. data/lib/disposable/twin/sync.rb +1 -1
  15. data/lib/disposable/version.rb +1 -1
  16. data/test/callback_group_test.rb +29 -30
  17. data/test/callbacks_test.rb +49 -49
  18. data/test/expose_test.rb +16 -16
  19. data/test/persisted_test.rb +30 -30
  20. data/test/rescheme_test.rb +22 -22
  21. data/test/skip_getter_test.rb +14 -14
  22. data/test/test_helper.rb +9 -6
  23. data/test/twin/builder_test.rb +3 -3
  24. data/test/twin/changed_test.rb +38 -38
  25. data/test/twin/coercion_test.rb +75 -38
  26. data/test/twin/collection_test.rb +48 -48
  27. data/test/twin/composition_test.rb +20 -20
  28. data/test/twin/default_test.rb +15 -15
  29. data/test/twin/expose_test.rb +15 -15
  30. data/test/twin/feature_test.rb +10 -10
  31. data/test/twin/from_collection_test.rb +4 -4
  32. data/test/twin/from_test.rb +3 -3
  33. data/test/twin/hash_test.rb +78 -31
  34. data/test/twin/inherit_test.rb +7 -7
  35. data/test/twin/inheritance_test.rb +6 -6
  36. data/test/twin/option_test.rb +1 -1
  37. data/test/twin/parent_test.rb +6 -6
  38. data/test/twin/property_processor_test.rb +5 -5
  39. data/test/twin/readable_test.rb +9 -9
  40. data/test/twin/save_test.rb +44 -44
  41. data/test/twin/setup_test.rb +25 -25
  42. data/test/twin/skip_unchanged_test.rb +6 -6
  43. data/test/twin/struct/coercion_test.rb +36 -0
  44. data/test/twin/struct_test.rb +41 -38
  45. data/test/twin/sync_option_test.rb +2 -2
  46. data/test/twin/sync_test.rb +29 -29
  47. data/test/twin/twin_test.rb +25 -15
  48. data/test/twin/unnest_test.rb +7 -7
  49. data/test/twin/virtual_test.rb +3 -3
  50. data/test/twin/writeable_test.rb +8 -8
  51. metadata +25 -57
  52. data/.travis.yml +0 -13
  53. data/gemfiles/Gemfile.rails-2.3 +0 -7
  54. data/gemfiles/Gemfile.rails-3.0 +0 -7
  55. data/gemfiles/Gemfile.rails-3.2 +0 -7
  56. data/gemfiles/Gemfile.rails-4.0 +0 -8
  57. data/gemfiles/Gemfile.rails-4.1 +0 -7
@@ -58,7 +58,7 @@
58
58
  # # Album#name :sync was called, first case.
59
59
  # album.name.must_equal "processed+Run For Cover"
60
60
  # # Song#title :sync called but returns nil.
61
- # song.title.must_equal nil
61
+ # song.title.must_be_nil
62
62
  # # Song#title :sync called and processed, first case.
63
63
  # song_with_composer.title.must_equal "++Empty Rooms"
64
64
 
@@ -139,7 +139,7 @@
139
139
  # # Album#name :sync was called, first case.
140
140
  # album.name.must_equal "processed+Run For Cover"
141
141
  # # Song#title :sync called but returns nil.
142
- # song.title.must_equal nil
142
+ # song.title.must_be_nil
143
143
  # # Song#title :sync called and processed, first case.
144
144
  # #### song_with_composer.title.must_equal "++Empty Rooms"
145
145
 
@@ -47,23 +47,23 @@ class TwinSyncTest < MiniTest::Spec
47
47
  fill_out!(twin)
48
48
 
49
49
  # not written to model, yet.
50
- album.name.must_equal nil
51
- album.songs[0].title.must_equal nil
52
- album.songs[1].title.must_equal nil
53
- album.songs[1].composer.name.must_equal nil
54
- album.artist.name.must_equal nil
50
+ expect(album.name).must_be_nil
51
+ expect(album.songs[0].title).must_be_nil
52
+ expect(album.songs[1].title).must_be_nil
53
+ expect(album.songs[1].composer.name).must_be_nil
54
+ expect(album.artist.name).must_be_nil
55
55
 
56
56
  twin.sync
57
57
 
58
- album.name.must_equal "Live And Dangerous"
59
- album.songs[0].must_be_instance_of Model::Song
60
- album.songs[1].must_be_instance_of Model::Song
61
- album.songs[0].title.must_equal "Southbound"
62
- album.songs[1].title.must_equal "The Boys Are Back In Town"
63
- album.songs[1].composer.must_be_instance_of Model::Artist
64
- album.songs[1].composer.name.must_equal "Lynott"
65
- album.artist.must_be_instance_of Model::Artist
66
- album.artist.name.must_equal "Thin Lizzy"
58
+ expect(album.name).must_equal "Live And Dangerous"
59
+ expect(album.songs[0]).must_be_instance_of Model::Song
60
+ expect(album.songs[1]).must_be_instance_of Model::Song
61
+ expect(album.songs[0].title).must_equal "Southbound"
62
+ expect(album.songs[1].title).must_equal "The Boys Are Back In Town"
63
+ expect(album.songs[1].composer).must_be_instance_of Model::Artist
64
+ expect(album.songs[1].composer.name).must_equal "Lynott"
65
+ expect(album.artist).must_be_instance_of Model::Artist
66
+ expect(album.artist.name).must_equal "Thin Lizzy"
67
67
  end
68
68
 
69
69
  # with empty, not populated model.
@@ -82,16 +82,16 @@ class TwinSyncTest < MiniTest::Spec
82
82
  twin.songs[1].composer.name = "Lynott"
83
83
 
84
84
  # not written to model, yet.
85
- album.name.must_equal nil
86
- album.songs.must_equal []
87
- album.artist.must_equal nil
85
+ expect(album.name).must_be_nil
86
+ expect(album.songs).must_equal []
87
+ expect(album.artist).must_be_nil
88
88
 
89
89
  twin.sync # this assigns a new collection via #songs=.
90
90
 
91
- album.name.must_equal "Live And Dangerous"
92
- album.songs[0].title.must_equal "Southbound"
93
- album.songs[1].title.must_equal "The Boys Are Back In Town"
94
- album.songs[1].composer.name.must_equal "Lynott"
91
+ expect(album.name).must_equal "Live And Dangerous"
92
+ expect(album.songs[0].title).must_equal "Southbound"
93
+ expect(album.songs[1].title).must_equal "The Boys Are Back In Town"
94
+ expect(album.songs[1].composer.name).must_equal "Lynott"
95
95
  end
96
96
 
97
97
  # save with block.
@@ -107,14 +107,14 @@ class TwinSyncTest < MiniTest::Spec
107
107
  nested_hash = hash
108
108
  end
109
109
 
110
- nested_hash.must_equal({"name"=>"Live And Dangerous", "songs"=>[{"title"=>"Southbound", "composer"=>nil}, {"title"=>"The Boys Are Back In Town", "composer"=>{"name"=>"Lynott"}}], "artist"=>{"name"=>"Thin Lizzy"}})
110
+ expect(nested_hash).must_equal({"name"=>"Live And Dangerous", "songs"=>[{"title"=>"Southbound", "composer"=>nil}, {"title"=>"The Boys Are Back In Town", "composer"=>{"name"=>"Lynott"}}], "artist"=>{"name"=>"Thin Lizzy"}})
111
111
 
112
112
  # nothing written to model.
113
- album.name.must_equal nil
114
- album.songs[0].title.must_equal nil
115
- album.songs[1].title.must_equal nil
116
- album.songs[1].composer.name.must_equal nil
117
- album.artist.name.must_equal nil
113
+ expect(album.name).must_be_nil
114
+ expect(album.songs[0].title).must_be_nil
115
+ expect(album.songs[1].title).must_be_nil
116
+ expect(album.songs[1].composer.name).must_be_nil
117
+ expect(album.artist.name).must_be_nil
118
118
  end
119
119
 
120
120
  describe "nil values" do
@@ -127,7 +127,7 @@ class TwinSyncTest < MiniTest::Spec
127
127
  nested_hash = nil
128
128
  twin.sync { |hash| nested_hash = hash }
129
129
 
130
- nested_hash.must_equal({"name"=>nil, "artist"=>nil})
130
+ expect(nested_hash).must_equal({"name"=>nil, "artist"=>nil})
131
131
  end
132
132
 
133
133
  it "includes empty collections" do
@@ -139,7 +139,7 @@ class TwinSyncTest < MiniTest::Spec
139
139
  nested_hash = nil
140
140
  twin.sync { |hash| nested_hash = hash }
141
141
 
142
- nested_hash.must_equal({"name"=>nil, "songs"=>[], "artist"=>nil})
142
+ expect(nested_hash).must_equal({"name"=>nil, "songs"=>[], "artist"=>nil})
143
143
  end
144
144
  end
145
145
  end
@@ -35,17 +35,17 @@ class TwinTest < MiniTest::Spec
35
35
  twin = Twin::Song.new(song)
36
36
  song.id = 2
37
37
  # :from maps public name
38
- twin.title.must_equal "Broken" # public: #record_name
39
- twin.id.must_equal 1
38
+ expect(twin.title).must_equal "Broken" # public: #record_name
39
+ expect(twin.id).must_equal 1
40
40
  end
41
41
 
42
42
  # allows passing options.
43
43
  it do
44
44
  # override twin's value...
45
- Twin::Song.new(song, :title => "Kenny").title.must_equal "Kenny"
45
+ expect(Twin::Song.new(song, :title => "Kenny").title).must_equal "Kenny"
46
46
 
47
47
  # .. but do not write to the model!
48
- song.title.must_equal "Broken"
48
+ expect(song.title).must_equal "Broken"
49
49
  end
50
50
  end
51
51
 
@@ -59,28 +59,28 @@ class TwinTest < MiniTest::Spec
59
59
  twin.album = album # this is a model, not a twin.
60
60
 
61
61
  # updates twin
62
- twin.id.must_equal 3
63
- twin.title.must_equal "Lucky"
62
+ expect(twin.id).must_equal 3
63
+ expect(twin.title).must_equal "Lucky"
64
64
 
65
65
  # setter for nested property will twin value.
66
66
  twin.album.extend(Disposable::Comparable)
67
- assert twin.album == Twin::Album.new(album) # FIXME: why does must_equal not call #== ?
67
+ assert twin.album == Twin::Album.new(album) # FIXME: why does) must_equal not call #== ?
68
68
 
69
69
  # setter for nested collection.
70
70
 
71
71
  # DOES NOT update model
72
- song.id.must_equal 1
73
- song.title.must_equal "Broken"
72
+ expect(song.id).must_equal 1
73
+ expect(song.title).must_equal "Broken"
74
74
  end
75
75
 
76
76
  describe "deleting" do
77
77
  it "allows overwriting nested twin with nil" do
78
- album = Model::Album.new(1, "Uncertain Terms", [], artist=Model::Artist.new("Greg Howe"))
78
+ album = Model::Album.new(1, "Uncertain Terms", [], Model::Artist.new("Greg Howe"))
79
79
  twin = Twin::Album.new(album)
80
- twin.artist.id.must_equal "Greg Howe"
80
+ expect(twin.artist.id).must_equal "Greg Howe"
81
81
 
82
82
  twin.artist = nil
83
- twin.artist.must_equal nil
83
+ expect(twin.artist).must_be_nil
84
84
  end
85
85
  end
86
86
 
@@ -109,8 +109,8 @@ class OverridingAccessorsTest < TwinTest
109
109
  end
110
110
 
111
111
  let (:model) { Model::Song.new(1, "A Tale That Wasn't Right") }
112
- it { Song.new(model).title.must_equal "a tale that wasn't right" }
113
- it { Song.new(model).id.must_equal 2 }
112
+ it { expect(Song.new(model).title).must_equal "a tale that wasn't right" }
113
+ it { expect(Song.new(model).id).must_equal 2 }
114
114
  end
115
115
 
116
116
 
@@ -148,7 +148,17 @@ class AccessorsTest < Minitest::Spec
148
148
 
149
149
  it do
150
150
  twin = Twin.new(Song.new("bla"))
151
- twin.format.must_equal "bla"
151
+ expect(twin.format).must_equal "bla"
152
152
  twin.format = "blubb"
153
153
  end
154
154
  end
155
+
156
+ class InvalidPropertyNameTest < Minitest::Spec
157
+ it 'raises InvalidPropertyNameError' do
158
+ assert_raises(Disposable::Twin::InvalidPropertyNameError) {
159
+ class Twin < Disposable::Twin
160
+ property :class
161
+ end
162
+ }
163
+ end
164
+ end
@@ -16,22 +16,22 @@ class UnnestTest < MiniTest::Spec
16
16
  end
17
17
 
18
18
  it "copies property option" do
19
- Twin.definitions.get(:id).extend(Declarative::Inspect).inspect.must_equal %{#<Disposable::Twin::Definition: @options={:nice=>\"yes\", :private_name=>:id, :name=>\"id\", :readable=>false, :writeable=>false}>}
20
- Twin.definitions.get(:ids).extend(Declarative::Inspect).inspect.must_equal %{#<Disposable::Twin::Definition: @options={:status=>\"healthy\", :collection=>true, :private_name=>:ids, :name=>\"ids\", :readable=>false, :writeable=>false}>}
19
+ expect(Twin.definitions.get(:id).extend(Declarative::Inspect).inspect).must_equal %{#<Disposable::Twin::Definition: @options={:nice=>\"yes\", :private_name=>:id, :name=>\"id\", :readable=>false, :writeable=>false}>}
20
+ expect(Twin.definitions.get(:ids).extend(Declarative::Inspect).inspect).must_equal %{#<Disposable::Twin::Definition: @options={:status=>\"healthy\", :collection=>true, :private_name=>:ids, :name=>\"ids\", :readable=>false, :writeable=>false}>}
21
21
  # also copies :nested.
22
- Twin.definitions.get(:email).extend(Declarative::Inspect).inspect.must_equal %{#<Disposable::Twin::Definition: @options={:private_name=>:email, :nested=>#<Class:>, :name=>\"email\", :readable=>false, :writeable=>false}>}
22
+ expect(Twin.definitions.get(:email).extend(Declarative::Inspect).inspect).must_equal %{#<Disposable::Twin::Definition: @options={:private_name=>:email, :nested=>#<Class:>, :name=>\"email\", :readable=>false, :writeable=>false}>}
23
23
  end
24
24
 
25
25
  it "exposes accessors on top-level twin" do
26
26
  twin = Twin.new(OpenStruct.new(content: OpenStruct.new()))
27
27
 
28
- twin.email.must_equal nil
28
+ expect(twin.email).must_be_nil
29
29
  twin.email= 2
30
- twin.email.model.must_equal 2
30
+ expect(twin.email.model).must_equal 2
31
31
 
32
32
 
33
- twin.id.must_equal nil
33
+ expect(twin.id).must_be_nil
34
34
  twin.id = 1
35
- twin.id.must_equal 1
35
+ expect(twin.id).must_equal 1
36
36
  end
37
37
  end
@@ -11,7 +11,7 @@ class VirtualTest < MiniTest::Spec
11
11
  it {
12
12
  twin.credit_card_number = "123"
13
13
 
14
- twin.credit_card_number.must_equal "123" # this is still readable in the UI.
14
+ expect(twin.credit_card_number).must_equal "123" # this is still readable in the UI.
15
15
 
16
16
  twin.sync
17
17
 
@@ -20,7 +20,7 @@ class VirtualTest < MiniTest::Spec
20
20
  hash = nested
21
21
  end
22
22
 
23
- hash.must_equal("credit_card_number"=> "123")
23
+ expect(hash).must_equal("credit_card_number"=> "123")
24
24
  }
25
25
 
26
26
  describe "setter should never be called with virtual:true" do
@@ -33,7 +33,7 @@ class VirtualTest < MiniTest::Spec
33
33
  end
34
34
 
35
35
  it "what" do
36
- Raising.new(Object.new).id.must_equal nil
36
+ expect(Raising.new(Object.new).id).must_be_nil
37
37
  end
38
38
  end
39
39
  end
@@ -30,20 +30,20 @@ class WriteableTest < MiniTest::Spec
30
30
  let (:twin) { PasswordForm.new(cred) }
31
31
 
32
32
  it {
33
- twin.password.must_equal "secret"
34
- twin.credit_card.name.must_equal "Jonny"
35
- twin.credit_card.number.must_equal "0987654321"
33
+ expect(twin.password).must_equal "secret"
34
+ expect(twin.credit_card.name).must_equal "Jonny"
35
+ expect(twin.credit_card.number).must_equal "0987654321"
36
36
 
37
37
  # manual setting on the twin works.
38
38
  twin.password = "123"
39
- twin.password.must_equal "123"
39
+ expect(twin.password).must_equal "123"
40
40
 
41
41
  twin.credit_card.number = "456"
42
- twin.credit_card.number.must_equal "456"
42
+ expect(twin.credit_card.number).must_equal "456"
43
43
 
44
44
  twin.sync
45
45
 
46
- cred.inspect.must_equal '#<struct WriteableTest::Credentials password="secret", credit_card=#<struct WriteableTest::CreditCard name="Jonny", number="0987654321">>'
46
+ expect(cred.inspect).must_equal '#<struct WriteableTest::Credentials password="secret", credit_card=#<struct WriteableTest::CreditCard name="Jonny", number="0987654321">>'
47
47
 
48
48
  # test sync{}.
49
49
  hash = {}
@@ -51,6 +51,6 @@ class WriteableTest < MiniTest::Spec
51
51
  hash = nested
52
52
  end
53
53
 
54
- hash.must_equal("password"=> "123", "credit_card"=>{"name"=>"Jonny", "number"=>"456"})
54
+ expect(hash).must_equal("password"=> "123", "credit_card"=>{"name"=>"Jonny", "number"=>"456"})
55
55
  }
56
- end
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disposable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2021-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uber
@@ -48,28 +48,14 @@ dependencies:
48
48
  name: declarative-builder
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "<"
52
- - !ruby/object:Gem::Version
53
- version: 0.2.0
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "<"
59
- - !ruby/object:Gem::Version
60
- version: 0.2.0
61
- - !ruby/object:Gem::Dependency
62
- name: declarative-option
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "<"
51
+ - - "~>"
66
52
  - !ruby/object:Gem::Version
67
53
  version: 0.2.0
68
54
  type: :runtime
69
55
  prerelease: false
70
56
  version_requirements: !ruby/object:Gem::Requirement
71
57
  requirements:
72
- - - "<"
58
+ - - "~>"
73
59
  - !ruby/object:Gem::Version
74
60
  version: 0.2.0
75
61
  - !ruby/object:Gem::Dependency
@@ -78,34 +64,34 @@ dependencies:
78
64
  requirements:
79
65
  - - ">="
80
66
  - !ruby/object:Gem::Version
81
- version: 2.4.0
82
- - - "<="
67
+ version: 3.1.1
68
+ - - "<"
83
69
  - !ruby/object:Gem::Version
84
- version: 3.1.0
70
+ version: 3.2.0
85
71
  type: :runtime
86
72
  prerelease: false
87
73
  version_requirements: !ruby/object:Gem::Requirement
88
74
  requirements:
89
75
  - - ">="
90
76
  - !ruby/object:Gem::Version
91
- version: 2.4.0
92
- - - "<="
77
+ version: 3.1.1
78
+ - - "<"
93
79
  - !ruby/object:Gem::Version
94
- version: 3.1.0
80
+ version: 3.2.0
95
81
  - !ruby/object:Gem::Dependency
96
82
  name: bundler
97
83
  requirement: !ruby/object:Gem::Requirement
98
84
  requirements:
99
- - - "~>"
85
+ - - ">="
100
86
  - !ruby/object:Gem::Version
101
- version: '1.3'
87
+ version: '0'
102
88
  type: :development
103
89
  prerelease: false
104
90
  version_requirements: !ruby/object:Gem::Requirement
105
91
  requirements:
106
- - - "~>"
92
+ - - ">="
107
93
  - !ruby/object:Gem::Version
108
- version: '1.3'
94
+ version: '0'
109
95
  - !ruby/object:Gem::Dependency
110
96
  name: rake
111
97
  requirement: !ruby/object:Gem::Requirement
@@ -136,20 +122,6 @@ dependencies:
136
122
  version: '0'
137
123
  - !ruby/object:Gem::Dependency
138
124
  name: activerecord
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - '='
142
- - !ruby/object:Gem::Version
143
- version: 4.2.5
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - '='
149
- - !ruby/object:Gem::Version
150
- version: 4.2.5
151
- - !ruby/object:Gem::Dependency
152
- name: sqlite3
153
125
  requirement: !ruby/object:Gem::Requirement
154
126
  requirements:
155
127
  - - ">="
@@ -166,16 +138,16 @@ dependencies:
166
138
  name: dry-types
167
139
  requirement: !ruby/object:Gem::Requirement
168
140
  requirements:
169
- - - "~>"
141
+ - - ">="
170
142
  - !ruby/object:Gem::Version
171
- version: '0.6'
143
+ version: '0'
172
144
  type: :development
173
145
  prerelease: false
174
146
  version_requirements: !ruby/object:Gem::Requirement
175
147
  requirements:
176
- - - "~>"
148
+ - - ">="
177
149
  - !ruby/object:Gem::Version
178
- version: '0.6'
150
+ version: '0'
179
151
  description: Decorators on top of your ORM layer.
180
152
  email:
181
153
  - apotonick@gmail.com
@@ -183,19 +155,14 @@ executables: []
183
155
  extensions: []
184
156
  extra_rdoc_files: []
185
157
  files:
158
+ - ".github/workflows/ci.yml"
186
159
  - ".gitignore"
187
- - ".travis.yml"
188
160
  - CHANGES.md
189
161
  - Gemfile
190
162
  - LICENSE.txt
191
163
  - README.md
192
164
  - Rakefile
193
165
  - disposable.gemspec
194
- - gemfiles/Gemfile.rails-2.3
195
- - gemfiles/Gemfile.rails-3.0
196
- - gemfiles/Gemfile.rails-3.2
197
- - gemfiles/Gemfile.rails-4.0
198
- - gemfiles/Gemfile.rails-4.1
199
166
  - lib/disposable.rb
200
167
  - lib/disposable/callback.rb
201
168
  - lib/disposable/composition.rb
@@ -251,6 +218,7 @@ files:
251
218
  - test/twin/save_test.rb
252
219
  - test/twin/setup_test.rb
253
220
  - test/twin/skip_unchanged_test.rb
221
+ - test/twin/struct/coercion_test.rb
254
222
  - test/twin/struct_test.rb
255
223
  - test/twin/sync_option_test.rb
256
224
  - test/twin/sync_test.rb
@@ -262,7 +230,7 @@ homepage: https://github.com/apotonick/disposable
262
230
  licenses:
263
231
  - MIT
264
232
  metadata: {}
265
- post_install_message:
233
+ post_install_message:
266
234
  rdoc_options: []
267
235
  require_paths:
268
236
  - lib
@@ -277,9 +245,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
245
  - !ruby/object:Gem::Version
278
246
  version: '0'
279
247
  requirements: []
280
- rubyforge_project:
281
- rubygems_version: 2.5.2
282
- signing_key:
248
+ rubygems_version: 3.0.8
249
+ signing_key:
283
250
  specification_version: 4
284
251
  summary: Decorators on top of your ORM layer with change tracking, collection semantics
285
252
  and nesting.
@@ -315,6 +282,7 @@ test_files:
315
282
  - test/twin/save_test.rb
316
283
  - test/twin/setup_test.rb
317
284
  - test/twin/skip_unchanged_test.rb
285
+ - test/twin/struct/coercion_test.rb
318
286
  - test/twin/struct_test.rb
319
287
  - test/twin/sync_option_test.rb
320
288
  - test/twin/sync_test.rb