aduki 0.1.0 → 0.1.1
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 +4 -4
- data/lib/aduki.rb +14 -8
- data/lib/aduki/version.rb +1 -1
- data/spec/merge_attributes_spec.rb +44 -0
- data/spec/spec_helper.rb +5 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2083ed7af6b80549df900d66e0cb35155771108
|
4
|
+
data.tar.gz: 35b6925901470ff78de0eaedc036a14c4fcb2af3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 885a4d4e4a2430322027ef36ca3881852fbcd25cb8d0ea57b880ecc09e773110365609ca16c47013a8743ee713b26275de58b63874a1ca0eeecf824de2a1afd0
|
7
|
+
data.tar.gz: bfd53ddbae29f3705a6e958b90b3e8d3e59bb17d87a111695f0d7767da14c8951f03d2a5cb89806865d84f6634898fa1f33d139e0ee847359c38c53c6bb9ef8d
|
data/lib/aduki.rb
CHANGED
@@ -96,16 +96,22 @@ module Aduki
|
|
96
96
|
array << to_value(klass, getter, value)
|
97
97
|
end
|
98
98
|
|
99
|
-
def self.
|
100
|
-
|
101
|
-
|
102
|
-
Aduki.apply_attributes existing_value, value
|
103
|
-
else
|
104
|
-
setter_method = "#{setter}=".to_sym
|
105
|
-
return unless object.respond_to? setter_method
|
99
|
+
def self.apply_new_single_attribute klass, object, setter, value
|
100
|
+
setter_method = "#{setter}=".to_sym
|
101
|
+
return unless object.respond_to? setter_method
|
106
102
|
|
107
|
-
|
103
|
+
object.send setter_method, to_value(klass, setter, value)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.apply_single_attribute klass, object, setter, value
|
107
|
+
if value.is_a?(Hash)
|
108
|
+
existing_value = object.send setter if object.respond_to?(setter)
|
109
|
+
if existing_value
|
110
|
+
Aduki.apply_attributes existing_value, value
|
111
|
+
return
|
112
|
+
end
|
108
113
|
end
|
114
|
+
apply_new_single_attribute klass, object, setter, value
|
109
115
|
end
|
110
116
|
|
111
117
|
def self.apply_attribute klass, object, setter, value
|
data/lib/aduki/version.rb
CHANGED
@@ -31,4 +31,48 @@ describe Aduki::Initializer do
|
|
31
31
|
expect(model.gadget.speaker.ohms). to eq "29"
|
32
32
|
expect(model.gadget.speaker.diameter).to eq "large"
|
33
33
|
end
|
34
|
+
|
35
|
+
it "does not die when reader accessor is absent" do
|
36
|
+
props = {
|
37
|
+
"name" => "Brackish Water",
|
38
|
+
"gadget.wattage" => "240",
|
39
|
+
"gadget.name" => "The Loud Gadget",
|
40
|
+
"gadget.speaker.ohms" => "29"
|
41
|
+
}
|
42
|
+
|
43
|
+
model = Model.new props
|
44
|
+
|
45
|
+
expect(model.name). to eq "Brackish Water"
|
46
|
+
expect(model.gadget.name). to eq "The Loud Gadget"
|
47
|
+
expect(model.gadget.price). to eq nil
|
48
|
+
expect(model.gadget.watts). to eq "240"
|
49
|
+
expect(model.gadget.speaker.ohms). to eq "29"
|
50
|
+
expect(model.gadget.speaker.diameter).to eq nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "does not die when an existing value is present" do
|
54
|
+
props = {
|
55
|
+
"name" => "Brackish Water",
|
56
|
+
"gadget.wattage" => "240",
|
57
|
+
"gadget.name" => "The Loud Gadget",
|
58
|
+
"gadget.speaker.ohms" => "29"
|
59
|
+
}
|
60
|
+
|
61
|
+
model = Model.new props
|
62
|
+
|
63
|
+
more_props = {
|
64
|
+
"name" => "Smelly Brackish Water",
|
65
|
+
"gadget.wattage" => "120",
|
66
|
+
"gadget.speaker.diameter" => "large"
|
67
|
+
}
|
68
|
+
|
69
|
+
Aduki.apply_attributes model, more_props
|
70
|
+
|
71
|
+
expect(model.name). to eq "Smelly Brackish Water"
|
72
|
+
expect(model.gadget.name). to eq "The Loud Gadget"
|
73
|
+
expect(model.gadget.price). to eq nil
|
74
|
+
expect(model.gadget.watts). to eq "120"
|
75
|
+
expect(model.gadget.speaker.ohms). to eq "29"
|
76
|
+
expect(model.gadget.speaker.diameter).to eq "large"
|
77
|
+
end
|
34
78
|
end
|
data/spec/spec_helper.rb
CHANGED