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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45420ab64b5875f1f53255ea0600451290e07f9a
4
- data.tar.gz: 9a4a18aa6898f51506d3cd6161a1c3b3b7d5b628
3
+ metadata.gz: b2083ed7af6b80549df900d66e0cb35155771108
4
+ data.tar.gz: 35b6925901470ff78de0eaedc036a14c4fcb2af3
5
5
  SHA512:
6
- metadata.gz: 4ed7538d054f37e27516b18927a1285f1c827165b44738b47fe656990aa9605aa0a0d1a0dd422096c1554043f7c33e9a2d05129378186642da1ad15a683b5b97
7
- data.tar.gz: dbab54e9a51a1e76377f0d9be20dce68240514d4573d365f35202054faaa98bb838e67b8fe85fcf281e62c40528eae52b63efc068657a08cb5c4d6e477706d6c
6
+ metadata.gz: 885a4d4e4a2430322027ef36ca3881852fbcd25cb8d0ea57b880ecc09e773110365609ca16c47013a8743ee713b26275de58b63874a1ca0eeecf824de2a1afd0
7
+ data.tar.gz: bfd53ddbae29f3705a6e958b90b3e8d3e59bb17d87a111695f0d7767da14c8951f03d2a5cb89806865d84f6634898fa1f33d139e0ee847359c38c53c6bb9ef8d
@@ -96,16 +96,22 @@ module Aduki
96
96
  array << to_value(klass, getter, value)
97
97
  end
98
98
 
99
- def self.apply_single_attribute klass, object, setter, value
100
- existing_value = object.send setter
101
- if existing_value && value.is_a?(Hash)
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
- object.send setter_method, to_value(klass, setter, value)
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
@@ -1,3 +1,3 @@
1
1
  module Aduki
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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
@@ -46,7 +46,12 @@ end
46
46
  class Gadget
47
47
  include Aduki::Initializer
48
48
  attr_accessor :name, :price, :supplier
49
+ attr_writer :wattage
49
50
  aduki_initialize :speaker, Speaker
51
+
52
+ def watts
53
+ @wattage
54
+ end
50
55
  end
51
56
 
52
57
  class Machine
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aduki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Conan Dalton