hamsterdam 1.0.8 → 1.0.9

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.
@@ -112,6 +112,19 @@ module Hamsterdam
112
112
  end
113
113
  end
114
114
 
115
+ def self.safe_create(values=Hamsterdam.hash)
116
+ h = field_names.inject(Hamsterdam.hash) do |memo, field_name|
117
+ if values.has_key?(field_name)
118
+ memo.put(field_name, values[field_name])
119
+ elsif values.has_key?(field_name.to_s)
120
+ memo.put(field_name.to_s, values[field_name.to_s])
121
+ else
122
+ memo
123
+ end
124
+ end
125
+ new(h)
126
+ end
127
+
115
128
  def merge(values)
116
129
  self.class.new(@data.merge(ensure_expected_hash(values)))
117
130
  end
@@ -167,7 +180,6 @@ module Hamsterdam
167
180
  end
168
181
 
169
182
  def flesh_out(data)
170
- # binding.pry
171
183
  fnames = self.class.field_names
172
184
  data = symbolize_keys(data)
173
185
  miss = fnames - data.keys
@@ -1,3 +1,3 @@
1
1
  module Hamsterdam
2
- VERSION = "1.0.8"
2
+ VERSION = "1.0.9"
3
3
  end
@@ -63,7 +63,7 @@ describe "Hamsterdam structures" do
63
63
  struct.bottom.should == "all the way down"
64
64
  end
65
65
 
66
- it "can be built with underlying persistent data structure hashes hashes" do
66
+ it "can be built with underlying persistent data structure hashes" do
67
67
  struct = struct_class.new(Hamsterdam.hash(top: 10, bottom: "low"))
68
68
  struct.should be
69
69
  struct.top.should == 10
@@ -275,4 +275,28 @@ describe "Hamsterdam structures" do
275
275
  val.internal_hash.should == Hamsterdam.hash(foo: 3, bar: 4)
276
276
  end
277
277
  end
278
+
279
+ describe "alternate constructor method that ignores invalid keys (vs raising an error)" do
280
+ let(:the_struct) { Hamsterdam::Struct.define(:foo, :bar) }
281
+
282
+ it "ignores unknown keys" do
283
+ val = the_struct.safe_create(:foo => "the foo", "bar" => "the bar", :baz => "the baz")
284
+ val.foo.should == "the foo"
285
+ val.bar.should == "the bar"
286
+
287
+ val.internal_hash.should == Hamsterdam.hash(foo: "the foo", bar: "the bar")
288
+ end
289
+
290
+ it "does not require anything be passed" do
291
+ val = the_struct.safe_create
292
+ val.foo.should be_nil
293
+ val.bar.should be_nil
294
+ end
295
+
296
+ it "can be built with underlying persistent data structure hashes" do
297
+ val = the_struct.safe_create(Hamsterdam.hash(no: "ye", foo: "the foo"))
298
+ val.foo.should == "the foo"
299
+ val.bar.should be_nil
300
+ end
301
+ end
278
302
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: hamsterdam
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.8
5
+ version: 1.0.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - David Crosby
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-23 00:00:00.000000000 Z
12
+ date: 2013-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hamster