disposable 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/README.md +19 -0
- data/database.sqlite3 +0 -0
- data/lib/disposable/twin.rb +1 -0
- data/lib/disposable/twin/default.rb +12 -0
- data/lib/disposable/twin/setup.rb +6 -2
- data/lib/disposable/version.rb +1 -1
- data/test/twin/default_test.rb +75 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53b71c61f518f6c2e11210f479cd37258c8bf1d8
|
4
|
+
data.tar.gz: 6527a70e2a954f8c490818a08c4fc2a1657f43d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f768a7a5e0ba34502a34e40f0a13db3c81af668ffb743afbf8fe9ad2dfdec8d72d8faa5950e2b7bca742a9a4fa2e00922954b2a9ebedfdb3994e366762328d84
|
7
|
+
data.tar.gz: b8efbe750912d51d9ef2ede971e4282db397fd4c3b82394d6257d23eed25f3c854f82b796ff3da8b3ad33442d7e54b23b3a68debdccfb5c3acbf174989ec58e0
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -206,6 +206,25 @@ twin.id #=> 1
|
|
206
206
|
|
207
207
|
Again, coercion only happens in the setter.
|
208
208
|
|
209
|
+
|
210
|
+
## Defaults
|
211
|
+
|
212
|
+
Default values can be set via `:default`.
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
class AlbumTwin < Disposable::Twin
|
216
|
+
feature Default
|
217
|
+
|
218
|
+
property :title, default: "The Greatest Songs Ever Written"
|
219
|
+
property :composer, default: Composer.new do
|
220
|
+
property :name
|
221
|
+
end
|
222
|
+
end
|
223
|
+
```
|
224
|
+
|
225
|
+
Default value is applied when the model's getter returns `nil`.
|
226
|
+
|
227
|
+
|
209
228
|
## Collections
|
210
229
|
|
211
230
|
Collections can be defined analogue to `property`. The exposed API is the `Array` API.
|
data/database.sqlite3
CHANGED
Binary file
|
data/lib/disposable/twin.rb
CHANGED
@@ -12,6 +12,7 @@ require "disposable/twin/builder"
|
|
12
12
|
require "disposable/twin/changed"
|
13
13
|
require "disposable/twin/property_processor"
|
14
14
|
require "disposable/twin/persisted"
|
15
|
+
require "disposable/twin/default"
|
15
16
|
|
16
17
|
# Twin.new(model/composition hash/hash, options)
|
17
18
|
# assign hash to @fields
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# TODO: allow default: -> for hashes, etc.
|
2
|
+
module Disposable::Twin::Default
|
3
|
+
def setup_value_for(dfn, options)
|
4
|
+
value = super
|
5
|
+
return value unless value.nil?
|
6
|
+
default_for(dfn, options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_for(dfn, options)
|
10
|
+
dfn[:default]
|
11
|
+
end
|
12
|
+
end
|
@@ -24,8 +24,7 @@ module Disposable
|
|
24
24
|
schema.each do |dfn|
|
25
25
|
next if dfn[:readable] == false
|
26
26
|
|
27
|
-
|
28
|
-
value = options[name.to_sym] || mapper.send(name) # model.title.
|
27
|
+
value = setup_value_for(dfn, options)
|
29
28
|
|
30
29
|
setup_write!(dfn, value)
|
31
30
|
end
|
@@ -34,6 +33,11 @@ module Disposable
|
|
34
33
|
# from_hash(options) # assigns known properties from options.
|
35
34
|
end
|
36
35
|
|
36
|
+
def setup_value_for(dfn, options)
|
37
|
+
name = dfn.name
|
38
|
+
options[name.to_sym] || mapper.send(name) # model.title.
|
39
|
+
end
|
40
|
+
|
37
41
|
def setup_write!(dfn, value)
|
38
42
|
send(dfn.setter, value)
|
39
43
|
end
|
data/lib/disposable/version.rb
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class DefaultTest < Minitest::Spec
|
4
|
+
Song = Struct.new(:title, :composer)
|
5
|
+
Composer = Struct.new(:name)
|
6
|
+
|
7
|
+
class Twin < Disposable::Twin
|
8
|
+
feature Default
|
9
|
+
|
10
|
+
property :title, default: "Mediocore"
|
11
|
+
property :composer, default: Composer.new do
|
12
|
+
property :name, default: "NOFX"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# all given.
|
17
|
+
it do
|
18
|
+
twin = Twin.new(Song.new("Anarchy Camp", Composer.new("Nofx")))
|
19
|
+
twin.title.must_equal "Anarchy Camp"
|
20
|
+
twin.composer.name.must_equal "Nofx"
|
21
|
+
end
|
22
|
+
|
23
|
+
# defaults, please.
|
24
|
+
it do
|
25
|
+
twin = Twin.new(Song.new)
|
26
|
+
twin.title.must_equal "Mediocore"
|
27
|
+
twin.composer.name.must_equal "NOFX"
|
28
|
+
end
|
29
|
+
|
30
|
+
# false value is not defaulted.
|
31
|
+
it do
|
32
|
+
twin = Twin.new(Song.new(false))
|
33
|
+
twin.title.must_equal false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
require "disposable/twin/struct"
|
39
|
+
class DefaultWithStructTest < Minitest::Spec
|
40
|
+
Song = Struct.new(:settings)
|
41
|
+
|
42
|
+
class Twin < Disposable::Twin
|
43
|
+
feature Default
|
44
|
+
feature Sync
|
45
|
+
|
46
|
+
property :settings, default: Hash.new do
|
47
|
+
include Struct
|
48
|
+
|
49
|
+
property :enabled, default: "yes"
|
50
|
+
property :roles, default: Hash.new do
|
51
|
+
include Struct
|
52
|
+
property :admin, default: "maybe"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# all given.
|
58
|
+
it do
|
59
|
+
twin = Twin.new(Song.new({enabled: true, roles: {admin: false}}))
|
60
|
+
twin.settings.enabled.must_equal true
|
61
|
+
twin.settings.roles.admin.must_equal false
|
62
|
+
end
|
63
|
+
|
64
|
+
# defaults, please.
|
65
|
+
it do
|
66
|
+
song = Song.new
|
67
|
+
twin = Twin.new(song)
|
68
|
+
twin.settings.enabled.must_equal "yes"
|
69
|
+
twin.settings.roles.admin.must_equal "maybe"
|
70
|
+
|
71
|
+
twin.sync
|
72
|
+
|
73
|
+
song.settings.must_equal({"enabled"=>"yes", "roles"=>{"admin"=>"maybe"}})
|
74
|
+
end
|
75
|
+
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.1.
|
4
|
+
version: 0.1.6
|
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-07-
|
11
|
+
date: 2015-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/disposable/twin/coercion.rb
|
165
165
|
- lib/disposable/twin/collection.rb
|
166
166
|
- lib/disposable/twin/composition.rb
|
167
|
+
- lib/disposable/twin/default.rb
|
167
168
|
- lib/disposable/twin/option.rb
|
168
169
|
- lib/disposable/twin/persisted.rb
|
169
170
|
- lib/disposable/twin/property_processor.rb
|
@@ -188,6 +189,7 @@ files:
|
|
188
189
|
- test/twin/coercion_test.rb
|
189
190
|
- test/twin/collection_test.rb
|
190
191
|
- test/twin/composition_test.rb
|
192
|
+
- test/twin/default_test.rb
|
191
193
|
- test/twin/expose_test.rb
|
192
194
|
- test/twin/feature_test.rb
|
193
195
|
- test/twin/from_test.rb
|
@@ -244,6 +246,7 @@ test_files:
|
|
244
246
|
- test/twin/coercion_test.rb
|
245
247
|
- test/twin/collection_test.rb
|
246
248
|
- test/twin/composition_test.rb
|
249
|
+
- test/twin/default_test.rb
|
247
250
|
- test/twin/expose_test.rb
|
248
251
|
- test/twin/feature_test.rb
|
249
252
|
- test/twin/from_test.rb
|