strict_open_struct 0.0.1.1 → 0.0.2.0

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: 8472c72ec447b974aa0492d24169d22184bf1102
4
- data.tar.gz: 29145adf654bb7b8596e69e501f2b6a61d3b94f9
3
+ metadata.gz: bab137007912c58b5c4fb39406cfa72a241bfebb
4
+ data.tar.gz: 87646385dac31f05f5ce1ab9f483b93553ce2086
5
5
  SHA512:
6
- metadata.gz: b1d6318a21c1fa2261b6d8f11f91f176f15cba2d629e070fcda81b70d3b1f8a3734ea1670f3cfa18e4d04576dd9e1bf489ca2a9714204d17a54c03619036c98b
7
- data.tar.gz: 5073b4ad0687ff0ba253b8c0c2782ccdbbd74c5010e89dfe1df6e679fe0a35c397a67418e7383c1dd899056a701779f1713c759646fa972c827a4e369e09ab06
6
+ metadata.gz: 22e3d78e28453679d25b8789b35d8009edcd5ad1458635c94c650a358911db0ec00e2917f65145b2f884e72f636ed4c059da2ece9cce08c5ea18b151f49b152e
7
+ data.tar.gz: 979ef44087b87b08170446c40a4c28f5921f31ad006021a323ef452a14b5f9ed14f3563e9eb5ee7c3d429a06520a2ce8401ce81a5a85aebed5bc85e0dadf5f65
@@ -9,14 +9,33 @@ class StrictOpenStruct
9
9
  # Raises NoMethodError unless the underlying OpenStruct
10
10
  # responds to the method or the method is a setter
11
11
  def method_missing(method_name, *args, &block)
12
- if @open_struct.respond_to?(method_name) || method_name =~ /=$/
12
+ if open_struct_responds_to?(method_name)
13
13
  @open_struct.send(method_name, *args, &block)
14
14
  else
15
- fail NoMethodError, "undefined method `#{method_name}' for #{self}"
15
+ failure(method_name)
16
16
  end
17
17
  end
18
18
 
19
+ def respond_to_missing?(method_name, include_private = false)
20
+ open_struct_responds_to?(method_name)
21
+ end
22
+
19
23
  def ==(other)
20
24
  @open_struct == other.instance_variable_get("@open_struct")
21
25
  end
26
+
27
+ def [](key)
28
+ @open_struct.to_h.fetch(key.to_sym)
29
+ end
30
+
31
+ private
32
+
33
+ def failure(method_name)
34
+ fail NoMethodError, "undefined method `#{method_name}' for #{self}"
35
+ end
36
+
37
+ def open_struct_responds_to?(method_name)
38
+ @open_struct.respond_to?(method_name) || method_name =~ /=$/
39
+ end
40
+
22
41
  end
@@ -4,8 +4,8 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "strict_open_struct"
7
- spec.version = "0.0.1.1"
8
- spec.authors = ["Nathan Wenneker"]
7
+ spec.version = "0.0.2.0"
8
+ spec.authors = ["Nathan Wenneker, Jon Gautsch"]
9
9
  spec.email = ["nathan@preferral.com"]
10
10
  spec.summary = %q{Thin layer on top of OpenStruct to raise exceptions for undefined keys.}
11
11
  spec.homepage = "https://github.com/Preferral/strict_open_struct"
@@ -46,5 +46,17 @@ describe StrictOpenStruct do
46
46
  end
47
47
  end
48
48
 
49
+ describe "#[]" do
50
+ specify "returns value for key, when it exists" do
51
+ assert_equal StrictOpenStruct.new(a: 'a')[:a], 'a'
52
+ end
53
+
54
+ specify "raises an exception if key is undefined" do
55
+ assert_raises KeyError do
56
+ StrictOpenStruct.new[:a]
57
+ end
58
+ end
59
+ end
60
+
49
61
  end
50
62
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strict_open_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.1
4
+ version: 0.0.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - Nathan Wenneker
7
+ - Nathan Wenneker, Jon Gautsch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-11 00:00:00.000000000 Z
11
+ date: 2016-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler