disposable 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +31 -29
  4. data/CHANGES.md +5 -0
  5. data/Gemfile +1 -1
  6. data/disposable.gemspec +0 -1
  7. data/lib/disposable/twin/coercion.rb +4 -1
  8. data/lib/disposable/twin/property/struct.rb +3 -1
  9. data/lib/disposable/version.rb +1 -1
  10. data/test/callback_group_test.rb +27 -27
  11. data/test/callbacks_test.rb +44 -44
  12. data/test/expose_test.rb +16 -16
  13. data/test/persisted_test.rb +30 -30
  14. data/test/rescheme_test.rb +22 -22
  15. data/test/skip_getter_test.rb +14 -14
  16. data/test/twin/builder_test.rb +3 -3
  17. data/test/twin/changed_test.rb +36 -36
  18. data/test/twin/coercion_test.rb +61 -23
  19. data/test/twin/collection_test.rb +46 -46
  20. data/test/twin/composition_test.rb +20 -20
  21. data/test/twin/default_test.rb +15 -15
  22. data/test/twin/expose_test.rb +15 -15
  23. data/test/twin/feature_test.rb +10 -10
  24. data/test/twin/from_collection_test.rb +4 -4
  25. data/test/twin/from_test.rb +3 -3
  26. data/test/twin/hash_test.rb +38 -38
  27. data/test/twin/inherit_test.rb +7 -7
  28. data/test/twin/inheritance_test.rb +6 -6
  29. data/test/twin/parent_test.rb +5 -5
  30. data/test/twin/property_processor_test.rb +3 -3
  31. data/test/twin/readable_test.rb +9 -9
  32. data/test/twin/save_test.rb +44 -44
  33. data/test/twin/setup_test.rb +25 -25
  34. data/test/twin/skip_unchanged_test.rb +6 -6
  35. data/test/twin/struct/coercion_test.rb +4 -4
  36. data/test/twin/struct_test.rb +41 -38
  37. data/test/twin/sync_test.rb +29 -29
  38. data/test/twin/twin_test.rb +14 -14
  39. data/test/twin/unnest_test.rb +7 -7
  40. data/test/twin/virtual_test.rb +3 -3
  41. data/test/twin/writeable_test.rb +8 -8
  42. metadata +3 -18
@@ -24,8 +24,8 @@ class ExposeTest < MiniTest::Spec
24
24
 
25
25
  describe "readers" do
26
26
  it do
27
- subject.id.must_equal 1
28
- subject.title.must_equal "Dick Sandwich"
27
+ expect(subject.id).must_equal 1
28
+ expect(subject.title).must_equal "Dick Sandwich"
29
29
  end
30
30
  end
31
31
 
@@ -35,10 +35,10 @@ class ExposeTest < MiniTest::Spec
35
35
  subject.id = 3
36
36
  subject.title = "Eclipse"
37
37
 
38
- subject.id.must_equal 3
39
- subject.title.must_equal "Eclipse"
40
- album.id.must_equal 3
41
- album.name.must_equal "Eclipse"
38
+ expect(subject.id).must_equal 3
39
+ expect(subject.title).must_equal "Eclipse"
40
+ expect(album.id).must_equal 3
41
+ expect(album.name).must_equal "Eclipse"
42
42
  end
43
43
  end
44
44
  end
@@ -69,9 +69,9 @@ class ExposeCompositionTest < MiniTest::Spec
69
69
 
70
70
 
71
71
  describe "readers" do
72
- it { subject.id.must_equal 2 }
73
- it { subject.band_id.must_equal 1 }
74
- it { subject.name.must_equal "Dick Sandwich" }
72
+ it { expect(subject.id).must_equal 2 }
73
+ it { expect(subject.band_id).must_equal 1 }
74
+ it { expect(subject.name).must_equal "Dick Sandwich" }
75
75
  end
76
76
 
77
77
 
@@ -81,12 +81,12 @@ class ExposeCompositionTest < MiniTest::Spec
81
81
  subject.band_id = 4
82
82
  subject.name = "Eclipse"
83
83
 
84
- subject.id.must_equal 3
85
- subject.band_id.must_equal 4
86
- subject.name.must_equal "Eclipse"
87
- band.id.must_equal 4
88
- album.id.must_equal 3
89
- album.name.must_equal "Eclipse"
84
+ expect(subject.id).must_equal 3
85
+ expect(subject.band_id).must_equal 4
86
+ expect(subject.name).must_equal "Eclipse"
87
+ expect(band.id).must_equal 4
88
+ expect(album.id).must_equal 3
89
+ expect(album.name).must_equal "Eclipse"
90
90
  end
91
91
  end
92
- end
92
+ end
@@ -29,36 +29,36 @@ class PersistedTest < MiniTest::Spec
29
29
  album = Album.new(artist: artist, songs: [ex_song, song])
30
30
 
31
31
 
32
- artist.persisted?.must_equal false
33
- album.persisted?.must_equal false
34
- ex_song.persisted?.must_equal true
35
- song.persisted?.must_equal false
32
+ expect(artist.persisted?).must_equal false
33
+ expect(album.persisted?).must_equal false
34
+ expect(ex_song.persisted?).must_equal true
35
+ expect(song.persisted?).must_equal false
36
36
 
37
37
  twin = AlbumTwin.new(album)
38
- twin.persisted?.must_equal false
39
- twin.changed?(:persisted?).must_equal false
40
- twin.artist.persisted?.must_equal false
41
- twin.artist.changed?(:persisted?).must_equal false
42
- twin.songs[0].persisted?.must_equal true
43
- twin.songs[0].changed?(:persisted?).must_equal false
44
- twin.songs[1].persisted?.must_equal false
45
- twin.songs[1].changed?(:persisted?).must_equal false
38
+ expect(twin.persisted?).must_equal false
39
+ expect(twin.changed?(:persisted?)).must_equal false
40
+ expect(twin.artist.persisted?).must_equal false
41
+ expect(twin.artist.changed?(:persisted?)).must_equal false
42
+ expect(twin.songs[0].persisted?).must_equal true
43
+ expect(twin.songs[0].changed?(:persisted?)).must_equal false
44
+ expect(twin.songs[1].persisted?).must_equal false
45
+ expect(twin.songs[1].changed?(:persisted?)).must_equal false
46
46
 
47
47
  twin.save
48
48
 
49
- artist.persisted?.must_equal true
50
- album.persisted?.must_equal true
51
- ex_song.persisted?.must_equal true
52
- song.persisted?.must_equal true
53
-
54
- twin.persisted?.must_equal true
55
- twin.changed?(:persisted?).must_equal true
56
- twin.artist.persisted?.must_equal true
57
- twin.artist.changed?(:persisted?).must_equal true
58
- twin.songs[0].persisted?.must_equal true
59
- twin.songs[0].changed?(:persisted?).must_equal false
60
- twin.songs[1].persisted?.must_equal true
61
- twin.songs[1].changed?(:persisted?).must_equal true
49
+ expect(artist.persisted?).must_equal true
50
+ expect(album.persisted?).must_equal true
51
+ expect(ex_song.persisted?).must_equal true
52
+ expect(song.persisted?).must_equal true
53
+
54
+ expect(twin.persisted?).must_equal true
55
+ expect(twin.changed?(:persisted?)).must_equal true
56
+ expect(twin.artist.persisted?).must_equal true
57
+ expect(twin.artist.changed?(:persisted?)).must_equal true
58
+ expect(twin.songs[0].persisted?).must_equal true
59
+ expect(twin.songs[0].changed?(:persisted?)).must_equal false
60
+ expect(twin.songs[1].persisted?).must_equal true
61
+ expect(twin.songs[1].changed?(:persisted?)).must_equal true
62
62
  end
63
63
 
64
64
 
@@ -66,17 +66,17 @@ class PersistedTest < MiniTest::Spec
66
66
  it do
67
67
  twin = AlbumTwin.new(Album.new)
68
68
 
69
- twin.created?.must_equal false
69
+ expect(twin.created?).must_equal false
70
70
  twin.save
71
- twin.created?.must_equal true
71
+ expect(twin.created?).must_equal true
72
72
  end
73
73
 
74
74
  it do
75
75
  twin = AlbumTwin.new(Album.create)
76
76
 
77
- twin.created?.must_equal false
77
+ expect(twin.created?).must_equal false
78
78
  twin.save
79
- twin.created?.must_equal false
79
+ expect(twin.created?).must_equal false
80
80
  end
81
81
  end
82
82
 
@@ -98,4 +98,4 @@ class PersistedTest < MiniTest::Spec
98
98
  # twin.updated?.must_equal true
99
99
  # end
100
100
  # end
101
- end
101
+ end
@@ -37,22 +37,22 @@ class ReschemeTest < MiniTest::Spec
37
37
  )
38
38
 
39
39
  # include: works.
40
- decorator.new(nil).hello.must_equal "hello"
41
- decorator.new(nil).ciao.must_equal "ciao"
40
+ expect(decorator.new(nil).hello).must_equal "hello"
41
+ expect(decorator.new(nil).ciao).must_equal "ciao"
42
42
 
43
- decorator.representable_attrs.get(:id).inspect.must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
44
- decorator.representable_attrs.get(:title).inspect.must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :deserializer=>{:skip_parse=>\"skip lambda\"}, :name=>\"title\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"skip lambda\"}>"
43
+ expect(decorator.representable_attrs.get(:id).inspect).must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
44
+ expect(decorator.representable_attrs.get(:title).inspect).must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :deserializer=>{:skip_parse=>\"skip lambda\"}, :name=>\"title\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"skip lambda\"}>"
45
45
 
46
46
  songs = decorator.representable_attrs.get(:songs)
47
47
  options = songs.instance_variable_get(:@options)
48
48
  options[:nested].extend(Declarative::Inspect)
49
- options.inspect.must_equal "{:readable=>false, :deserializer=>{:skip_parse=>\"another lambda\", :music=>true, :writeable=>false}, :nested=>#<Class:>, :extend=>#<Class:>, :name=>\"songs\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"another lambda\", :music=>true, :writeable=>false}"
49
+ expect(options.inspect).must_equal "{:readable=>false, :deserializer=>{:skip_parse=>\"another lambda\", :music=>true, :writeable=>false}, :nested=>#<Class:>, :extend=>#<Class:>, :name=>\"songs\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"another lambda\", :music=>true, :writeable=>false}"
50
50
 
51
51
  # nested works.
52
- options[:nested].new(nil).hello.must_equal "hello"
53
- options[:nested].new(nil).ciao.must_equal "ciao"
52
+ expect(options[:nested].new(nil).hello).must_equal "hello"
53
+ expect(options[:nested].new(nil).ciao).must_equal "ciao"
54
54
 
55
- options[:nested].representable_attrs.get(:name).inspect.must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"a crazy cool instance method\"}>"
55
+ expect(options[:nested].representable_attrs.get(:name).inspect).must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[], :skip_parse=>\"a crazy cool instance method\"}>"
56
56
  end
57
57
 
58
58
  # :options_from and :include is optional
@@ -61,8 +61,8 @@ class ReschemeTest < MiniTest::Spec
61
61
  definitions_from: lambda { |nested| nested.definitions }
62
62
  )
63
63
 
64
- decorator.representable_attrs.get(:id).inspect.must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
65
- decorator.representable_attrs.get(:title).inspect.must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :deserializer=>{:skip_parse=>\"skip lambda\"}, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
64
+ expect(decorator.representable_attrs.get(:id).inspect).must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
65
+ expect(decorator.representable_attrs.get(:title).inspect).must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :deserializer=>{:skip_parse=>\"skip lambda\"}, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
66
66
  end
67
67
 
68
68
 
@@ -73,9 +73,9 @@ class ReschemeTest < MiniTest::Spec
73
73
  exclude_options: [:deserializer]
74
74
  )
75
75
 
76
- decorator.representable_attrs.get(:id).inspect.must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
77
- decorator.representable_attrs.get(:title).inspect.must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
78
- decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect.must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
76
+ expect(decorator.representable_attrs.get(:id).inspect).must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[]}>"
77
+ expect(decorator.representable_attrs.get(:title).inspect).must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
78
+ expect(decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect).must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
79
79
  end
80
80
 
81
81
 
@@ -85,8 +85,8 @@ class ReschemeTest < MiniTest::Spec
85
85
  definitions_from: lambda { |nested| nested.definitions },
86
86
  ) { |dfn| dfn.merge!(amazing: true) }
87
87
 
88
- decorator.representable_attrs.get(:id).inspect.must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[], :amazing=>true}>"
89
- decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect.must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[], :amazing=>true}>"
88
+ expect(decorator.representable_attrs.get(:id).inspect).must_equal "#<Representable::Definition ==>id @options={:name=>\"id\", :parse_filter=>[], :render_filter=>[], :amazing=>true}>"
89
+ expect(decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect).must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[], :amazing=>true}>"
90
90
  end
91
91
 
92
92
  it "recursive: false only copies first level" do
@@ -97,8 +97,8 @@ class ReschemeTest < MiniTest::Spec
97
97
  exclude_options: [:deserializer]
98
98
  )
99
99
 
100
- decorator.representable_attrs.get(:title).inspect.must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
101
- decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect.must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
100
+ expect(decorator.representable_attrs.get(:title).inspect).must_equal "#<Representable::Definition ==>title @options={:writeable=>false, :name=>\"title\", :parse_filter=>[], :render_filter=>[]}>"
101
+ expect(decorator.representable_attrs.get(:songs).representer_module.representable_attrs.get(:name).inspect).must_equal "#<Representable::Definition ==>name @options={:as=>\"Name\", :deserializer=>{:skip_parse=>\"a crazy cool instance method\"}, :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
102
102
  end
103
103
 
104
104
  describe ":exclude_properties" do
@@ -121,8 +121,8 @@ class ReschemeTest < MiniTest::Spec
121
121
  exclude_properties: [:id]
122
122
  )
123
123
 
124
- decorator.definitions.keys.must_equal ["songs"]
125
- decorator.definitions.get(:songs).representer_module.definitions.keys.must_equal ["name"]
124
+ expect(decorator.definitions.keys).must_equal ["songs"]
125
+ expect(decorator.definitions.get(:songs).representer_module.definitions.keys).must_equal ["name"]
126
126
  end
127
127
  end
128
128
  end
@@ -145,8 +145,8 @@ class TwinReschemeTest < MiniTest::Spec
145
145
  artist = decorator.representable_attrs.get(:artist)
146
146
  options = artist.instance_variable_get(:@options)
147
147
  nested_extend = options[:nested]
148
- options.extend(Declarative::Inspect).inspect.must_equal "{:private_name=>:artist, :nested=>#<Class:>, :name=>\"artist\", :extend=>#<Class:>, :parse_filter=>[], :render_filter=>[]}"
148
+ expect(options.extend(Declarative::Inspect).inspect).must_equal "{:private_name=>:artist, :nested=>#<Class:>, :name=>\"artist\", :extend=>#<Class:>, :parse_filter=>[], :render_filter=>[]}"
149
149
  assert nested_extend < Representable::Decorator
150
- nested_extend.representable_attrs.get(:name).inspect.must_equal "#<Representable::Definition ==>name @options={:private_name=>:name, :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
150
+ expect(nested_extend.representable_attrs.get(:name).inspect).must_equal "#<Representable::Definition ==>name @options={:private_name=>:name, :name=>\"name\", :parse_filter=>[], :render_filter=>[]}>"
151
151
  end
152
- end
152
+ end
@@ -26,20 +26,20 @@ class SkipGetterTest < MiniTest::Spec
26
26
  album = Album.new("Wild Frontier", Artist.new("Gary Moore"))
27
27
  twin = AlbumTwin.new(album)
28
28
 
29
- twin.title.must_equal "reitnorF dliW"
30
- twin.artist.name.must_equal "GARY MOORE"
29
+ expect(twin.title).must_equal "reitnorF dliW"
30
+ expect(twin.artist.name).must_equal "GARY MOORE"
31
31
 
32
32
  twin.sync # does NOT call getter.
33
33
 
34
- album.title.must_equal "Wild Frontier"
35
- album.artist.name.must_equal "Gary Moore"
34
+ expect(album.title).must_equal "Wild Frontier"
35
+ expect(album.artist.name).must_equal "Gary Moore"
36
36
 
37
37
  # nested hash.
38
38
  nested_hash = nil
39
39
  twin.sync do |hash|
40
40
  nested_hash = hash
41
41
  end
42
- nested_hash.must_equal({"title"=>"Wild Frontier", "artist"=>{"name"=>"Gary Moore"}})
42
+ expect(nested_hash).must_equal({"title"=>"Wild Frontier", "artist"=>{"name"=>"Gary Moore"}})
43
43
  end
44
44
  end
45
45
 
@@ -68,8 +68,8 @@ class SkipSetterTest < MiniTest::Spec
68
68
  it do
69
69
  twin = AlbumTwin.new(Album.new("Wild Frontier", Artist.new("Gary Moore")))
70
70
 
71
- twin.title.must_equal "Wild Frontier"
72
- twin.artist.name.must_equal "Gary Moore"
71
+ expect(twin.title).must_equal "Wild Frontier"
72
+ expect(twin.artist.name).must_equal "Gary Moore"
73
73
  end
74
74
  end
75
75
 
@@ -111,18 +111,18 @@ class SkipGetterAndSetterWithChangedTest < MiniTest::Spec
111
111
  twin = AlbumTwin.new(album) # does not call getter (Changed).
112
112
 
113
113
 
114
- twin.title.must_equal "reitnorF dliW"
115
- twin.artist.name.must_equal "GARY MOORE"
114
+ expect(twin.title).must_equal "reitnorF dliW"
115
+ expect(twin.artist.name).must_equal "GARY MOORE"
116
116
 
117
- twin.changed?.must_equal false
118
- twin.artist.changed?.must_equal false
117
+ expect(twin.changed?).must_equal false
118
+ expect(twin.artist.changed?).must_equal false
119
119
 
120
120
  twin.title = "Self-Entitled"
121
121
  twin.artist.name = "Nofx"
122
122
 
123
123
  twin.sync # does NOT call getter.
124
124
 
125
- album.title.must_equal "deltitnE-fleS"
126
- album.artist.name.must_equal "Nof"
125
+ expect(album.title).must_equal "deltitnE-fleS"
126
+ expect(album.artist.name).must_equal "Nof"
127
127
  end
128
- end
128
+ end
@@ -26,7 +26,7 @@ class BuilderTest < MiniTest::Spec
26
26
  end
27
27
 
28
28
 
29
- it { Twin.build(Model::Song.new).must_be_instance_of Twin }
30
- it { Twin.build(Model::Hit.new).must_be_instance_of Hit }
31
- it { Twin.build(Model::Evergreen.new, evergreen: true).must_be_instance_of Evergreen }
29
+ it { expect(Twin.build(Model::Song.new)).must_be_instance_of Twin }
30
+ it { expect(Twin.build(Model::Hit.new)).must_be_instance_of Hit }
31
+ it { expect(Twin.build(Model::Evergreen.new, evergreen: true)).must_be_instance_of Evergreen }
32
32
  end
@@ -39,19 +39,19 @@ class ChangedWithSetupTest < MiniTest::Spec
39
39
 
40
40
  # setup: changed? is always false
41
41
  it do
42
- twin.changed?(:name).must_equal false
43
- twin.changed?.must_equal false
42
+ expect(twin.changed?(:name)).must_equal false
43
+ expect(twin.changed?).must_equal false
44
44
 
45
- twin.songs[0].changed?.must_equal false
46
- twin.songs[0].changed?(:title).must_equal false
47
- twin.songs[1].changed?.must_equal false
48
- twin.songs[1].changed?(:title).must_equal false
45
+ expect(twin.songs[0].changed?).must_equal false
46
+ expect(twin.songs[0].changed?(:title)).must_equal false
47
+ expect(twin.songs[1].changed?).must_equal false
48
+ expect(twin.songs[1].changed?(:title)).must_equal false
49
49
 
50
- twin.songs[1].composer.changed?(:name).must_equal false
51
- twin.songs[1].composer.changed?.must_equal false
50
+ expect(twin.songs[1].composer.changed?(:name)).must_equal false
51
+ expect(twin.songs[1].composer.changed?).must_equal false
52
52
 
53
- twin.artist.changed?(:name).must_equal false
54
- twin.artist.changed?.must_equal false
53
+ expect(twin.artist.changed?(:name)).must_equal false
54
+ expect(twin.artist.changed?).must_equal false
55
55
  end
56
56
 
57
57
  # only when a property is assigned, it's changed.
@@ -62,46 +62,46 @@ class ChangedWithSetupTest < MiniTest::Spec
62
62
  twin.songs[1].composer.name= "Ingemar Jansson & Mikael Danielsson"
63
63
  twin.artist.name = "No Fun At All"
64
64
 
65
- twin.changed?(:name).must_equal true
66
- twin.changed?.must_equal true
65
+ expect(twin.changed?(:name)).must_equal true
66
+ expect(twin.changed?).must_equal true
67
67
 
68
- twin.songs[0].changed?.must_equal true
69
- twin.songs[0].changed?(:title).must_equal true
70
- twin.songs[1].changed?.must_equal true
71
- twin.songs[1].changed?(:title).must_equal true
68
+ expect(twin.songs[0].changed?).must_equal true
69
+ expect(twin.songs[0].changed?(:title)).must_equal true
70
+ expect(twin.songs[1].changed?).must_equal true
71
+ expect(twin.songs[1].changed?(:title)).must_equal true
72
72
 
73
- twin.songs[1].composer.changed?(:name).must_equal true
74
- twin.songs[1].composer.changed?.must_equal true
73
+ expect(twin.songs[1].composer.changed?(:name)).must_equal true
74
+ expect(twin.songs[1].composer.changed?).must_equal true
75
75
 
76
- twin.artist.changed?(:name).must_equal true
77
- twin.artist.changed?.must_equal true
76
+ expect(twin.artist.changed?(:name)).must_equal true
77
+ expect(twin.artist.changed?).must_equal true
78
78
 
79
79
  # you can also ask for nested twins by name.
80
- twin.changed?(:songs).must_equal true
81
- twin.songs[0].changed?(:composer).must_equal false
82
- twin.songs[1].changed?(:composer).must_equal true
83
- twin.changed?(:artist).must_equal true
80
+ expect(twin.changed?(:songs)).must_equal true
81
+ expect(twin.songs[0].changed?(:composer)).must_equal false
82
+ expect(twin.songs[1].changed?(:composer)).must_equal true
83
+ expect(twin.changed?(:artist)).must_equal true
84
84
  end
85
85
 
86
86
  # nested changes should propagate up.
87
87
  it do
88
- twin.changed?.must_equal false
88
+ expect(twin.changed?).must_equal false
89
89
 
90
90
  twin.songs[1].composer.name = "Nofx"
91
91
 
92
- twin.changed?.must_equal true
92
+ expect(twin.changed?).must_equal true
93
93
 
94
94
  assert twin.songs.changed?
95
- twin.songs[1].changed?.must_equal true
96
- twin.songs[0].changed?.must_equal false
95
+ expect(twin.songs[1].changed?).must_equal true
96
+ expect(twin.songs[0].changed?).must_equal false
97
97
 
98
- twin.artist.changed?.must_equal false
98
+ expect(twin.artist.changed?).must_equal false
99
99
  end
100
100
 
101
101
  # setting identical value doesn't change.
102
102
  it do
103
103
  twin.name = "The Rest Is Silence"
104
- twin.changed?.must_equal false
104
+ expect(twin.changed?).must_equal false
105
105
  end
106
106
  end
107
107
 
@@ -119,18 +119,18 @@ class ChangedWithCoercionTest < MiniTest::Spec
119
119
 
120
120
  it do
121
121
  twin = SongTwin.new(Song.new)
122
- twin.changed?(:released).must_equal false
122
+ expect(twin.changed?(:released)).must_equal false
123
123
  twin.released = 'true'
124
- twin.released.must_equal true
125
- twin.changed?(:released).must_equal true
124
+ expect(twin.released).must_equal true
125
+ expect(twin.changed?(:released)).must_equal true
126
126
  end
127
127
 
128
128
  it do
129
129
  twin = SongTwin.new(Song.new(true))
130
- twin.changed?(:released).must_equal false
130
+ expect(twin.changed?(:released)).must_equal false
131
131
  twin.released = 'true' # it coerces, then assigns, then compares, which makes this NOT changed.
132
- twin.changed?(:released).must_equal false
132
+ expect(twin.changed?(:released)).must_equal false
133
133
  twin.released = 'false'
134
- twin.changed?(:released).must_equal true
134
+ expect(twin.changed?(:released)).must_equal true
135
135
  end
136
136
  end
@@ -37,9 +37,9 @@ class CoercionTest < MiniTest::Spec
37
37
  }
38
38
 
39
39
  it "NOT coerce values in setup" do
40
- subject.released_at.must_equal "31/03/1981"
41
- subject.hit.length.must_equal "312"
42
- subject.band.label.value.must_equal "9999.99"
40
+ expect(subject.released_at).must_equal "31/03/1981"
41
+ expect(subject.hit.length).must_equal "312"
42
+ expect(subject.band.label.value).must_equal "9999.99"
43
43
  end
44
44
 
45
45
 
@@ -49,11 +49,11 @@ class CoercionTest < MiniTest::Spec
49
49
  subject.hit.length = "312"
50
50
  subject.band.label.value = "9999.99"
51
51
 
52
- subject.released_at.must_be_kind_of DateTime
53
- subject.released_at.must_equal DateTime.parse("30/03/1981")
54
- subject.hit.length.must_equal 312
55
- subject.hit.good.must_be_nil
56
- subject.band.label.value.must_equal 9999.99
52
+ expect(subject.released_at).must_be_kind_of DateTime
53
+ expect(subject.released_at).must_equal DateTime.parse("30/03/1981")
54
+ expect(subject.hit.length).must_equal 312
55
+ expect(subject.hit.good).must_be_nil
56
+ expect(subject.band.label.value).must_equal 9999.99
57
57
  end
58
58
  end
59
59
 
@@ -69,9 +69,9 @@ class CoercionTest < MiniTest::Spec
69
69
  end
70
70
 
71
71
  it "coerce values in setup and when using a setter" do
72
- subject.id.must_equal 1
72
+ expect(subject.id).must_equal 1
73
73
  subject.id = "2"
74
- subject.id.must_equal 2
74
+ expect(subject.id).must_equal 2
75
75
  end
76
76
  end
77
77
 
@@ -85,8 +85,15 @@ class CoercionTest < MiniTest::Spec
85
85
  property :id, type: const_get("Types::Coercible::#{DRY_TYPES_INT_CONSTANT}"), nilify: true
86
86
  end
87
87
 
88
- describe "with Nilify" do
88
+ class TwinWithoutTypeWithNilify < Disposable::Twin
89
+ feature Coercion
90
+
91
+ property :date_of_birth, nilify: true
92
+ property :date_of_death_by_unicorns, type: DRY_TYPES_CONSTANT::Nil | DRY_TYPES_CONSTANT::Date
93
+ property :id, type: const_get("Types::Coercible::#{DRY_TYPES_INT_CONSTANT}"), nilify: true
94
+ end
89
95
 
96
+ describe "with Nilify" do
90
97
  subject do
91
98
  TwinWithNilify.new(OpenStruct.new(date_of_birth: '1990-01-12',
92
99
  date_of_death_by_unicorns: '2037-02-18',
@@ -94,23 +101,54 @@ class CoercionTest < MiniTest::Spec
94
101
  end
95
102
 
96
103
  it "coerce values correctly" do
97
- subject.date_of_birth.must_equal Date.parse('1990-01-12')
98
- subject.date_of_death_by_unicorns.must_equal Date.parse('2037-02-18')
104
+ expect(subject.date_of_birth).must_equal Date.parse('1990-01-12')
105
+ expect(subject.date_of_death_by_unicorns).must_equal Date.parse('2037-02-18')
99
106
  end
100
107
 
101
108
  it "coerce empty values to nil when using option nilify: true" do
102
109
  subject.date_of_birth = ""
103
- subject.date_of_birth.must_be_nil
110
+ expect(subject.date_of_birth).must_be_nil
104
111
  end
105
112
 
106
113
  it "coerce empty values to nil when using dry-types | operator" do
107
114
  subject.date_of_death_by_unicorns = ""
108
- subject.date_of_death_by_unicorns.must_be_nil
115
+ expect(subject.date_of_death_by_unicorns).must_be_nil
109
116
  end
110
117
 
111
118
  it "converts blank string to nil, without :type option" do
112
119
  subject.id = ""
113
- subject.id.must_be_nil
120
+ expect(subject.id).must_be_nil
121
+ end
122
+ end
123
+
124
+ describe "without Type With Nilify" do
125
+ let(:date_of_birth) { '1990-01-12' }
126
+ subject do
127
+ TwinWithoutTypeWithNilify.new(
128
+ OpenStruct.new(
129
+ date_of_birth: date_of_birth,
130
+ date_of_death_by_unicorns: '2037-02-18',
131
+ id: 1
132
+ )
133
+ )
134
+ end
135
+
136
+ it 'raise error for new dry-types v - work as expected for older versions' do
137
+ if Disposable::Twin::Coercion::DRY_TYPES_VERSION >= Gem::Version.new("1.0")
138
+ assert_raises(Dry::Types::CoercionError) { subject.date_of_birth }
139
+ assert_raises(Dry::Types::CoercionError) { subject.date_of_death_by_unicorns }
140
+ else
141
+ expect(subject.date_of_birth).must_equal '1990-01-12'
142
+ expect(subject.date_of_death_by_unicorns).must_equal Date.parse('2037-02-18')
143
+ end
144
+ end
145
+
146
+ describe 'when passing nil' do
147
+ let(:date_of_birth) { '' }
148
+
149
+ it 'coerce values correctly' do
150
+ expect(subject.date_of_birth).must_be_nil
151
+ end
114
152
  end
115
153
  end
116
154
  end
@@ -135,13 +173,13 @@ class CoercionTypingTest < MiniTest::Spec
135
173
  # with type: Dry::Types::Strict::String
136
174
  # assert_raises(Dry::Types::ConstraintError) { twin.title = nil }
137
175
  twin.title = nil
138
- twin.title.must_be_nil
176
+ expect(twin.title).must_be_nil
139
177
 
140
178
  twin.title = "Yo"
141
- twin.title.must_equal "Yo"
179
+ expect(twin.title).must_equal "Yo"
142
180
 
143
181
  twin.title = ""
144
- twin.title.must_equal ""
182
+ expect(twin.title).must_equal ""
145
183
 
146
184
  assert_raises(Dry::Types::ConstraintError) { twin.title = :bla }
147
185
  assert_raises(Dry::Types::ConstraintError) { twin.title = 1 }
@@ -167,16 +205,16 @@ class CoercionTypingTest < MiniTest::Spec
167
205
 
168
206
  # assert_raises(Dry::Types::ConstraintError) { twin.title = nil } # in form, we either have a blank string or the key's not present at all.
169
207
  twin.title = nil
170
- twin.title.must_be_nil
208
+ expect(twin.title).must_be_nil
171
209
 
172
210
  twin.title = "" # nilify blank strings
173
- twin.title.must_be_nil
211
+ expect(twin.title).must_be_nil
174
212
 
175
213
  twin.title = "Yo"
176
- twin.title.must_equal "Yo"
214
+ expect(twin.title).must_equal "Yo"
177
215
 
178
216
  # twin.enabled = " TRUE"
179
- # twin.enabled.must_equal true
217
+ #expect(twin.enabled).must_equal true
180
218
  end
181
219
  end
182
220