aduki 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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