deepstruct 0.0.5 → 0.0.7
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 +15 -0
- data/lib/deepstruct.rb +16 -8
- data/lib/deepstruct/version.rb +1 -1
- data/spec/deepstruct_spec.rb +22 -4
- metadata +5 -17
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NTY3MzliMTEzZDNiNTNkYjNmZTE0ZDdkMjQ5N2Y2ZDExOWEyZWMyYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MDI3MjMzNzg2MmY0ZjA5OTc5MzBjN2FiNTk2NjQzNzY1NjU0NTQwMw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjA0NDA4MTFhNDQxZGVkMDMyOWExNGRhMGRmZjM4NTY0ZjNjYzAyMjFiMWZj
|
10
|
+
ZDlkNjMyN2JjMGQ5NTZjODEzYzVjNzIwMzQ0ZjEyNDc2NTk5OWYzMTk5NTcy
|
11
|
+
ODUzYTEyYTU5NWJlODllOTUzMDcxMWFlNTAwNjdmOThmNjZhNGU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MGU2ZTE0ZTExMTdmZTBhMDhiOWFmZjY4ZGQ2MDJmYmQxYzYxYzU4MjY5NzEx
|
14
|
+
NDZjNDk1NjM5MTYwODQxZTA5NTM3Nzc1YmQ0MDk0YmY4YWExMTYxODU2NWIw
|
15
|
+
MzMzNzczZWNkZGNlMmM2MDFmYzRlMDEzMWMzYjdhMzIzN2NiZTI=
|
data/lib/deepstruct.rb
CHANGED
@@ -22,36 +22,44 @@ module DeepStruct
|
|
22
22
|
"#<#{self.class} #{@value.inspect}>"
|
23
23
|
end
|
24
24
|
|
25
|
-
def to_json
|
26
|
-
@value.to_json
|
25
|
+
def to_json(*args)
|
26
|
+
@value.to_json(*args)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
class HashWrapper < DeepWrapper
|
31
|
-
def respond_to?(
|
32
|
-
@value.respond_to?(
|
31
|
+
def respond_to?(name, include_private = false)
|
32
|
+
super || @value.respond_to?(name, include_private) || case name.to_s
|
33
|
+
when /\A(.*)\?\z/
|
34
|
+
has_key?($1)
|
35
|
+
when /\=\z/
|
36
|
+
true
|
37
|
+
else
|
38
|
+
has_key?(name.to_s)
|
39
|
+
end
|
33
40
|
end
|
34
41
|
|
35
42
|
# Given a symbol or a string this yields the variant of the key that
|
36
43
|
# exists in the wrapped hash if any. If none exists (or the key is not
|
37
44
|
# a symbol or string) the input value is passed through unscathed.
|
38
|
-
def
|
45
|
+
def indifferently(key, &block)
|
39
46
|
return yield(key) if @value.has_key?(key)
|
40
47
|
return yield(key.to_s) if key.is_a?(Symbol) && @value.has_key?(key.to_s)
|
41
48
|
return yield(key.to_sym) if key.is_a?(String) && @value.has_key?(key.to_sym)
|
42
49
|
return yield(key)
|
43
50
|
end
|
51
|
+
alias_method :indiffrently, :indifferently # Fixes spelling error
|
44
52
|
|
45
53
|
def []=(key, value)
|
46
|
-
|
54
|
+
indifferently(key) { |key| @value[key] = value }
|
47
55
|
end
|
48
56
|
|
49
57
|
def [](key)
|
50
|
-
|
58
|
+
indifferently(key) { |key| DeepStruct.wrap(@value[key]) }
|
51
59
|
end
|
52
60
|
|
53
61
|
def has_key?(key)
|
54
|
-
|
62
|
+
indifferently(key) { |key| @value.has_key?(key) }
|
55
63
|
end
|
56
64
|
|
57
65
|
def method_missing(method, *args, &block)
|
data/lib/deepstruct/version.rb
CHANGED
data/spec/deepstruct_spec.rb
CHANGED
@@ -63,6 +63,12 @@ describe DeepStruct do
|
|
63
63
|
struct.to_json.should eq('{"a":[1,2,3]}')
|
64
64
|
end
|
65
65
|
|
66
|
+
it 'supports being converted to json when inside something else' do
|
67
|
+
struct = DeepStruct.wrap({:a => [1,2,3]})
|
68
|
+
outer = {hello: struct}
|
69
|
+
outer.to_json.should eq('{"hello":{"a":[1,2,3]}}')
|
70
|
+
end
|
71
|
+
|
66
72
|
it "raises NoMethodError when reading missing keys" do
|
67
73
|
->{DeepStruct.wrap({}).not_there}.should raise_error(NoMethodError)
|
68
74
|
end
|
@@ -89,30 +95,42 @@ describe DeepStruct do
|
|
89
95
|
end
|
90
96
|
|
91
97
|
context "HashWrapper, #respond_to?" do
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
98
|
+
%w(unwrap size each).each do |method_name|
|
99
|
+
it "responds to ##{method_name}" do
|
100
|
+
struct = DeepStruct.wrap({:a => true})
|
101
|
+
struct.respond_to?(method_name).should be_true
|
102
|
+
struct.respond_to?(method_name.to_sym).should be_true
|
103
|
+
end
|
96
104
|
end
|
97
105
|
|
98
106
|
it "responds to keys that are present as symbols" do
|
99
107
|
struct = DeepStruct.wrap({:a => nil})
|
100
108
|
struct.respond_to?(:a).should be_true
|
109
|
+
struct.respond_to?('a').should be_true
|
101
110
|
end
|
102
111
|
|
103
112
|
it "responds to keys that are present as strings" do
|
104
113
|
struct = DeepStruct.wrap({'a' => nil})
|
105
114
|
struct.respond_to?(:a).should be_true
|
115
|
+
struct.respond_to?('a').should be_true
|
106
116
|
end
|
107
117
|
|
108
118
|
it "doesn't respond to missing keys" do
|
109
119
|
struct = DeepStruct.wrap({:a => true})
|
110
120
|
struct.respond_to?(:b).should be_false
|
121
|
+
struct.respond_to?('b').should be_false
|
111
122
|
end
|
112
123
|
|
113
124
|
it "responds to keys that can be assigned to" do
|
114
125
|
struct = DeepStruct.wrap({:a => true})
|
115
126
|
struct.respond_to?(:a=).should be_true
|
127
|
+
struct.respond_to?('a=').should be_true
|
128
|
+
end
|
129
|
+
|
130
|
+
it "responds to keys with '?' suffix" do
|
131
|
+
struct = DeepStruct.wrap({:a => true})
|
132
|
+
struct.respond_to?(:a?).should be_true
|
133
|
+
struct.respond_to?('a?').should be_true
|
116
134
|
end
|
117
135
|
end
|
118
136
|
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deepstruct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Simen Svale Skogsrud
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -63,33 +58,26 @@ files:
|
|
63
58
|
- spec/spec_helper.rb
|
64
59
|
homepage: ''
|
65
60
|
licenses: []
|
61
|
+
metadata: {}
|
66
62
|
post_install_message:
|
67
63
|
rdoc_options: []
|
68
64
|
require_paths:
|
69
65
|
- lib
|
70
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
67
|
requirements:
|
73
68
|
- - ! '>='
|
74
69
|
- !ruby/object:Gem::Version
|
75
70
|
version: '0'
|
76
|
-
segments:
|
77
|
-
- 0
|
78
|
-
hash: -4475093401064523013
|
79
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
72
|
requirements:
|
82
73
|
- - ! '>='
|
83
74
|
- !ruby/object:Gem::Version
|
84
75
|
version: '0'
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
hash: -4475093401064523013
|
88
76
|
requirements: []
|
89
77
|
rubyforge_project: deepstruct
|
90
|
-
rubygems_version: 1.
|
78
|
+
rubygems_version: 2.1.11
|
91
79
|
signing_key:
|
92
|
-
specification_version:
|
80
|
+
specification_version: 4
|
93
81
|
summary: A sibling of ostruct that handles deeply nested structures and basic data
|
94
82
|
type detection
|
95
83
|
test_files:
|