setsumei 0.0.5 → 0.0.6

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.
@@ -11,7 +11,7 @@ module Setsumei
11
11
  attr_accessor :klass, :options
12
12
 
13
13
  def set_value_on(object, options = {})
14
- return nil if options.empty? || options[:from_value_in].empty?
14
+ return nil if options.empty? || options[:from_value_in].nil?
15
15
 
16
16
  array( extract_from_hash options[:from_value_in] ).each do |data|
17
17
  object << Build.a(klass, from: data)
@@ -23,7 +23,7 @@ module Setsumei
23
23
  [thing].flatten(1).compact
24
24
  end
25
25
  def extract_from_hash(hash)
26
- hash[ extract_key_for hash ]
26
+ (options[:direct_collection] && hash) || hash[ extract_key_for hash ]
27
27
  end
28
28
  def extract_key_for(hash)
29
29
  Build::Key.for configured_key, given: hash_keys(hash)
@@ -1,3 +1,3 @@
1
1
  module Setsumei
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -19,6 +19,63 @@ module Setsumei
19
19
  its(:options) { should == options }
20
20
  end
21
21
 
22
+ describe "#set_value_on(object, from_value_in: data) where data is a direct single or collection of values" do
23
+ let(:object) { mock "object", :<< => nil }
24
+
25
+ let(:klass) { mock "a klass" }
26
+ let(:collection) { Collection.of klass, from_value_in: data, direct_collection: true }
27
+
28
+ subject { collection.set_value_on object, from_value_in: data }
29
+
30
+ context "nil value" do
31
+ let(:data) { nil }
32
+ it "should protect against instances where there are attributes, but not for our defined element keys" do
33
+ object.should_not_receive(:<<)
34
+ subject
35
+ end
36
+ end
37
+ context "single value" do
38
+ let(:data) { mock "data" }
39
+ let(:single_instance) { mock "single_instance" }
40
+
41
+ before { Build.stub(:a).and_return single_instance }
42
+
43
+ it "should build a single instance of klass" do
44
+ Build.should_receive(:a).with(klass, from: data).and_return(single_instance)
45
+ subject
46
+ end
47
+ it "should append this to the object" do
48
+ object.should_receive(:<<).with(single_instance)
49
+ subject
50
+ end
51
+ end
52
+ context "multiple values" do
53
+ let(:a_value) { mock "a_value" }
54
+ let(:another_value) { mock "another_value" }
55
+ let(:more_values) { mock "more_values" }
56
+
57
+ let(:first_instance) { mock "first_instance" }
58
+ let(:second_instance) { mock "second_instance" }
59
+ let(:final_instance) { mock "final_instance" }
60
+
61
+ let(:data) { [a_value,another_value,more_values] }
62
+
63
+ before { Build.stub(:a).and_return( first_instance, second_instance, final_instance ) }
64
+
65
+ it "should build multiple instances of klass" do
66
+ Build.should_receive(:a).with(klass, from: a_value)#and_return(first_instance)
67
+ Build.should_receive(:a).with(klass, from: another_value)#and_return(second_instance)
68
+ Build.should_receive(:a).with(klass, from: more_values)#and_return(final_instance)
69
+ subject
70
+ end
71
+ it "should append all of these to the object" do
72
+ object.should_receive(:<<).with(first_instance)
73
+ object.should_receive(:<<).with(second_instance)
74
+ object.should_receive(:<<).with(final_instance)
75
+ subject
76
+ end
77
+ end
78
+ end
22
79
  describe "#set_value_on(object, from_value_in: hash)" do
23
80
  let(:object) { mock "object" }
24
81
  let(:hash) { Hash.new }
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: setsumei
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.5
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jon Rowe