hash-proxy 0.1.4 → 0.1.5
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.
- data/Gemfile.lock +13 -12
- data/History.txt +3 -0
- data/README.md +8 -0
- data/lib/hash_proxy/proxy.rb +16 -6
- data/spec/hash_proxy_spec.rb +37 -0
- data/version.txt +1 -1
- metadata +9 -9
data/Gemfile.lock
CHANGED
@@ -12,22 +12,23 @@ GEM
|
|
12
12
|
bones (>= 3.6)
|
13
13
|
rspec (>= 1.3)
|
14
14
|
bones-yard (1.0.0)
|
15
|
+
bones (>= 3.5.0)
|
15
16
|
yard (>= 0.5.8)
|
16
|
-
diff-lcs (1.1
|
17
|
+
diff-lcs (1.2.1)
|
17
18
|
git (1.2.5)
|
18
19
|
little-plugger (1.1.3)
|
19
20
|
loquacious (1.9.1)
|
20
|
-
rake (0.
|
21
|
-
redcarpet (2.
|
22
|
-
rspec (2.
|
23
|
-
rspec-core (~> 2.
|
24
|
-
rspec-expectations (~> 2.
|
25
|
-
rspec-mocks (~> 2.
|
26
|
-
rspec-core (2.
|
27
|
-
rspec-expectations (2.
|
28
|
-
diff-lcs (
|
29
|
-
rspec-mocks (2.
|
30
|
-
yard (0.8.2)
|
21
|
+
rake (10.0.3)
|
22
|
+
redcarpet (2.2.2)
|
23
|
+
rspec (2.13.0)
|
24
|
+
rspec-core (~> 2.13.0)
|
25
|
+
rspec-expectations (~> 2.13.0)
|
26
|
+
rspec-mocks (~> 2.13.0)
|
27
|
+
rspec-core (2.13.1)
|
28
|
+
rspec-expectations (2.13.0)
|
29
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
30
|
+
rspec-mocks (2.13.0)
|
31
|
+
yard (0.8.5.2)
|
31
32
|
|
32
33
|
PLATFORMS
|
33
34
|
ruby
|
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -53,6 +53,8 @@ instead of the method call notation:
|
|
53
53
|
Requirements
|
54
54
|
------------
|
55
55
|
|
56
|
+
* Probably does not work on ruby 1.8.x due to dependency on
|
57
|
+
json module from the 1.9.x standard library
|
56
58
|
* No runtime dependencies
|
57
59
|
* To build and test, run bundle install after cloning from github
|
58
60
|
|
@@ -81,6 +83,12 @@ Original author: Douglas A. Seifert (doug@dseifert.net)
|
|
81
83
|
History
|
82
84
|
-------
|
83
85
|
|
86
|
+
### Version 0.1.5 / 2013-03-12
|
87
|
+
* Support #to_json
|
88
|
+
|
89
|
+
### Version 0.1.4 / 2012-11-07
|
90
|
+
* Support serialization
|
91
|
+
|
84
92
|
### Version 0.1.3 / 2012-08-13
|
85
93
|
* Support to_ary method on NullObject
|
86
94
|
|
data/lib/hash_proxy/proxy.rb
CHANGED
@@ -26,12 +26,7 @@ module HashProxy
|
|
26
26
|
# Create a hashProxy::Proxy object from the provided Hash.
|
27
27
|
#
|
28
28
|
# @param [Hash] hash The hash we are proxying
|
29
|
-
|
30
|
-
# to hash proxies only when requested via
|
31
|
-
# a method call. If false, all nested Hash
|
32
|
-
# and Array objects are converted to Proxy
|
33
|
-
# objects at creation time
|
34
|
-
def initialize(hash, options = {})
|
29
|
+
def initialize(hash)
|
35
30
|
@hash = hash
|
36
31
|
@converted = {}
|
37
32
|
end
|
@@ -43,6 +38,16 @@ module HashProxy
|
|
43
38
|
@hash.size + @converted.size
|
44
39
|
end
|
45
40
|
|
41
|
+
# Get all keys in this hash proxy
|
42
|
+
def keys
|
43
|
+
(@hash.keys + @converted.keys)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Get all keys in this hash proxy
|
47
|
+
def values
|
48
|
+
(@hash.values + @converted.values)
|
49
|
+
end
|
50
|
+
|
46
51
|
# Yields to the provided block all the values in this Hash proxy. All values
|
47
52
|
# are converted via #convert_value as they are yielded. The order in which
|
48
53
|
# values are yielded is not deterministic. Insertion order in the original
|
@@ -85,6 +90,11 @@ module HashProxy
|
|
85
90
|
@converted[key] = convert_value(value)
|
86
91
|
end
|
87
92
|
|
93
|
+
# Handle conversion to json
|
94
|
+
def to_json(options = nil)
|
95
|
+
@hash.merge(@converted).to_json(options)
|
96
|
+
end
|
97
|
+
|
88
98
|
# Turns arbitrary method invocations into
|
89
99
|
# lookups or sets on the contained hash
|
90
100
|
def method_missing(name, *args)
|
data/spec/hash_proxy_spec.rb
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
require File.expand_path('../spec_helper', __FILE__)
|
3
3
|
|
4
4
|
describe HashProxy do
|
5
|
+
it "can be serialized and deserialized" do
|
6
|
+
proxy = HashProxy.create_from(:size => 42, :bar => :foo)
|
7
|
+
data = Marshal.dump(proxy)
|
8
|
+
proxy2 = Marshal.load(data)
|
9
|
+
proxy.keys.should eq(proxy2.keys)
|
10
|
+
proxy.values.should eq(proxy2.values)
|
11
|
+
end
|
12
|
+
|
5
13
|
it "works with null values" do
|
6
14
|
proxy = HashProxy.create_from(:null => nil)
|
7
15
|
proxy.size.should eq(1)
|
@@ -129,6 +137,35 @@ describe HashProxy do
|
|
129
137
|
proxy.key.does.not.exist.to_a.should eq([])
|
130
138
|
end
|
131
139
|
|
140
|
+
describe "json conversion" do
|
141
|
+
require 'json'
|
142
|
+
it "should work when no keys are converted" do
|
143
|
+
hash = {foo: 'bar', baz: {subkey: 'sub1', subkey2: 'sub2'}}
|
144
|
+
proxy = HashProxy.create_from hash
|
145
|
+
proxy.to_json.should eq(hash.to_json)
|
146
|
+
end
|
147
|
+
it "should work when normal value has been converted" do
|
148
|
+
orig = {foo: 'bar', baz: {subkey: 'sub1', subkey2: 'sub2'}}
|
149
|
+
hash = Marshal.load(Marshal.dump(orig))
|
150
|
+
proxy = HashProxy.create_from hash
|
151
|
+
proxy.foo.should eq('bar')
|
152
|
+
# Need to parse back to ruby arrays so we can use the ruby == operator
|
153
|
+
# to compare
|
154
|
+
JSON.parse(proxy.to_json).should eq(JSON.parse(orig.to_json))
|
155
|
+
end
|
156
|
+
it "should work when nested value has been converted" do
|
157
|
+
orig = {foo: 'bar', baz: {subkey: 'sub1', subkey2: 'sub2'}}
|
158
|
+
hash = Marshal.load(Marshal.dump(orig))
|
159
|
+
proxy = HashProxy.create_from hash
|
160
|
+
proxy.baz.each do |key, val|
|
161
|
+
orig[:baz][key].should eq(val)
|
162
|
+
end
|
163
|
+
# Need to parse back to ruby arrays so we can use the ruby == operator
|
164
|
+
# to compare
|
165
|
+
JSON.parse(proxy.to_json).should eq(JSON.parse(orig.to_json))
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
132
169
|
# TODO: Am I itching badly enough to make this pass? ....
|
133
170
|
#it "should lazily handle nested arrays" do
|
134
171
|
# hash = {:foo => [{:key1 => 'val11', :key2 => 'val12'}, {:key1 => 'val21', :key2 => 'val22'}], :bar => :baz}
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bones
|
@@ -82,7 +82,7 @@ dependencies:
|
|
82
82
|
requirements:
|
83
83
|
- - ! '>='
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version: 2.
|
85
|
+
version: 2.2.2
|
86
86
|
type: :development
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,7 +90,7 @@ dependencies:
|
|
90
90
|
requirements:
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: 2.
|
93
|
+
version: 2.2.2
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: bones
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,8 +113,7 @@ description: ! 'An object that proxies method calls to a Hash object as hash key
|
|
113
113
|
email: doug@dseifert.net
|
114
114
|
executables: []
|
115
115
|
extensions: []
|
116
|
-
extra_rdoc_files:
|
117
|
-
- History.txt
|
116
|
+
extra_rdoc_files: []
|
118
117
|
files:
|
119
118
|
- .bnsignore
|
120
119
|
- .gitignore
|
@@ -133,9 +132,7 @@ files:
|
|
133
132
|
homepage: https://github.com/seifertd/hash-proxy
|
134
133
|
licenses: []
|
135
134
|
post_install_message:
|
136
|
-
rdoc_options:
|
137
|
-
- --main
|
138
|
-
- README.md
|
135
|
+
rdoc_options: []
|
139
136
|
require_paths:
|
140
137
|
- lib
|
141
138
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -144,6 +141,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
141
|
- - ! '>='
|
145
142
|
- !ruby/object:Gem::Version
|
146
143
|
version: '0'
|
144
|
+
segments:
|
145
|
+
- 0
|
146
|
+
hash: -4040495455569849470
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|