strict_open_struct 0.0.1.1 → 0.0.2.0
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 +4 -4
- data/lib/strict_open_struct.rb +21 -2
- data/strict_open_struct.gemspec +2 -2
- data/test/basic_test.rb +12 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bab137007912c58b5c4fb39406cfa72a241bfebb
|
4
|
+
data.tar.gz: 87646385dac31f05f5ce1ab9f483b93553ce2086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22e3d78e28453679d25b8789b35d8009edcd5ad1458635c94c650a358911db0ec00e2917f65145b2f884e72f636ed4c059da2ece9cce08c5ea18b151f49b152e
|
7
|
+
data.tar.gz: 979ef44087b87b08170446c40a4c28f5921f31ad006021a323ef452a14b5f9ed14f3563e9eb5ee7c3d429a06520a2ce8401ce81a5a85aebed5bc85e0dadf5f65
|
data/lib/strict_open_struct.rb
CHANGED
@@ -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
|
12
|
+
if open_struct_responds_to?(method_name)
|
13
13
|
@open_struct.send(method_name, *args, &block)
|
14
14
|
else
|
15
|
-
|
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
|
data/strict_open_struct.gemspec
CHANGED
@@ -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.
|
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"
|
data/test/basic_test.rb
CHANGED
@@ -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.
|
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-
|
11
|
+
date: 2016-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|