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 +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
|