navigable_hash 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZTM0ODE0MTZmMTBjZWIyNGI1ZjI0ZTBiMjhjNGEwOWZkZjA0YWJmYQ==
5
- data.tar.gz: !binary |-
6
- YmMwNzU2NDQ2M2I3MWNiM2JkNjg0ODk5YmUzNzM2Njk1OWY4Yzg3NQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NjQ0MGEwNTdmZTE2ZTU5YjMwODAyZmI0M2RmMzE2OThhMmI4ZjIwNWIzMjli
10
- ZGM1N2E1MWJlNTJlODhhNjU5NDJmZWMzMGMzOWUyMzA4MTNjNjhiNmY0NDZl
11
- YzcyN2EzN2M3ODEwNDk5MGIwNjc1YWFhYzBmZThkZDc1M2JhM2Y=
12
- data.tar.gz: !binary |-
13
- MmZkNjk4ODU1MzNlNTNkNzg5MjZlMDc5ZmRiMDgxYjI5NDEyMTAzMWNiN2Vm
14
- ZWMwMzEwODY3ZjU4Nzk3MjgwMDllNGY0NzZmZWYxOGEzMzVlMGM0MzU5MjUz
15
- ODg4ZTZkNjYyNDU1NDI0NzkyNGRiNDM4YzhiNzJjYjg5NTRlNmU=
2
+ SHA1:
3
+ metadata.gz: ea470547e2314253ab6f4a4897e0cb1c257108d3
4
+ data.tar.gz: 290f62d648a95c7008fb8e3691ff8c0d087700a7
5
+ SHA512:
6
+ metadata.gz: f8244b8936e50a1e1e87f4600a89cf4215109525b714900df06e593bb6e93da4553e13269123520a16a84e3c6e2483f24431adca07b260fb24d78ad7882f20d6
7
+ data.tar.gz: 5869f906e535da3cf6449915c50b11e604146601434d9d5e7699f0d4024c305e3eb961bd931e811ac8c399edf5e6b20bc32ead1da18c5976893ce8fd12c84375
@@ -0,0 +1 @@
1
+ 2.1.2
@@ -1,13 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
+ # Rubies 2.1.2
4
+ - 2.1.2
5
+
3
6
  # Rubies 2.0.0
4
7
  - 2.0.0
5
8
 
6
9
  # Rubies 1.9.x
7
10
  - 1.9.3
8
- - 1.9.2
9
11
  - jruby-19mode
10
-
11
- # Rubies 1.8.7
12
- - 1.8.7
13
- - jruby-18mode
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # NavigableHash
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/navigable_hash.png)](http://badge.fury.io/rb/navigable_hash)
4
- [![Build Status](https://travis-ci.org/jwaldrip/navigable_hash.png?branch=master)](https://travis-ci.org/jwaldrip/navigable_hash)
5
- [![Coverage Status](https://coveralls.io/repos/jwaldrip/navigable_hash/badge.png?branch=master)](https://coveralls.io/r/jwaldrip/navigable_hash)
6
- [![Code Climate](https://codeclimate.com/github/jwaldrip/navigable_hash.png)](https://codeclimate.com/github/jwaldrip/navigable_hash)
3
+ [![Version](http://allthebadges.io/jwaldrip/navigable_hash/badge_fury.png)](http://allthebadges.io/jwaldrip/navigable_hash/badge_fury)
4
+ [![Dependencies](http://allthebadges.io/jwaldrip/navigable_hash/gemnasium.png)](http://allthebadges.io/jwaldrip/navigable_hash/gemnasium)
5
+ [![Build Status](http://allthebadges.io/jwaldrip/navigable_hash/travis.png)](http://allthebadges.io/jwaldrip/navigable_hash/travis)
6
+ [![Coverage](http://allthebadges.io/jwaldrip/navigable_hash/coveralls.png)](http://allthebadges.io/jwaldrip/navigable_hash/coveralls)
7
+ [![Code Climate](http://allthebadges.io/jwaldrip/navigable_hash/code_climate.png)](http://allthebadges.io/jwaldrip/navigable_hash/code_climate)
7
8
 
8
9
  NavigableHash was built as lightweight and quick way to navigate through a hash or array object using the familiar ruby dot notation. See 'Usage' below for examples. Keys as strings or symbols don't matter, its all included.
9
10
 
@@ -176,16 +176,30 @@ class NavigableHash < Hash
176
176
 
177
177
  private
178
178
 
179
+ def set_and_cache_value(key, value)
180
+ cache_getter! key
181
+ self[key] = value
182
+ end
183
+
184
+ def get_and_cache_value(key)
185
+ cache_getter! key
186
+ self[key]
187
+ end
188
+
189
+ def cache_getter!(key)
190
+ define_singleton_method(key) { self[key] } unless respond_to? key
191
+ end
192
+
179
193
  def method_missing(m, *args, &block)
180
194
  m = m.to_s
181
- if args.size == 1 && m.gsub!(/(.+)=$/, '\1')
182
- self[m] = args.first
183
- elsif args.size == 0 && block_given?
195
+ if m.chomp!('=') && args.count == 1
196
+ set_and_cache_value(m, *args)
197
+ elsif args.empty? && block_given?
184
198
  self.navigate_hash_from_block m, &block
185
- elsif args.size == 0
186
- self[m]
199
+ elsif args.empty?
200
+ get_and_cache_value(m)
187
201
  else
188
- raise ArgumentError, "wrong number of arguments(#{args.size} for 0)"
202
+ fail ArgumentError, "wrong number of arguments (#{args.count} for 0)"
189
203
  end
190
204
  end
191
205
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "navigable_hash"
7
- spec.version = "1.2.0"
7
+ spec.version = "1.3.0"
8
8
  spec.authors = ["Jason Waldrip", "Kevin Wanek"]
9
9
  spec.email = ["jason@waldrip.net", "k@dmcy.us"]
10
10
  spec.description = %q{Allows a hash to be navigated with dot notation or indifferent access.}
@@ -12,7 +12,7 @@ module NavigableHash::HelperMethods
12
12
  end
13
13
 
14
14
  it "should have a valid value" do
15
- navigable.send(key).should == hash[key]
15
+ expect(navigable.send key).to eq hash[key]
16
16
  end
17
17
  end
18
18
  end
@@ -29,7 +29,7 @@ module NavigableHash::HelperMethods
29
29
  end
30
30
 
31
31
  it "should have a valid value" do
32
- navigable[key.to_sym].should == hash[key]
32
+ expect(navigable[key.to_sym]).to eq hash[key]
33
33
  end
34
34
  end
35
35
  end
@@ -46,7 +46,7 @@ module NavigableHash::HelperMethods
46
46
  end
47
47
 
48
48
  it "should have a valid value" do
49
- navigable[key.to_s].should == hash[key]
49
+ expect(navigable[key.to_s]).to eq hash[key]
50
50
  end
51
51
  end
52
52
  end
@@ -35,14 +35,14 @@ describe NavigableHash do
35
35
  it "should create a new navigable hash" do
36
36
  navigable = NavigableHash.new do |v|
37
37
  end
38
- navigable.should be_a NavigableHash
38
+ expect(navigable).to be_a NavigableHash
39
39
  end
40
40
 
41
41
  it "should assign values in the block to the hash" do
42
42
  navigable = NavigableHash.new do |v|
43
43
  v.foo = :bar
44
44
  end
45
- navigable.foo.should == :bar
45
+ expect(navigable.foo).to eq :bar
46
46
  end
47
47
  end
48
48
  end
@@ -77,7 +77,7 @@ describe NavigableHash do
77
77
  navigable.foo = {}
78
78
  navigable.foo.bar = {}
79
79
  navigable.foo.bar.baz = value
80
- navigable.foo.bar.baz.should == value
80
+ expect(navigable.foo.bar.baz).to eq value
81
81
  end
82
82
  end
83
83
 
@@ -88,11 +88,14 @@ describe NavigableHash do
88
88
 
89
89
  it "should get a value" do
90
90
  navigable.__any_method__ = "foo"
91
- navigable.__any_method__.should == "foo"
91
+ expect(navigable.__any_method__).to eq "foo"
92
92
  end
93
93
 
94
94
  it "should raise an error with arguments" do
95
- expect { navigable.__any_method__ :foo }.to raise_error
95
+ expect {
96
+ $pry = true
97
+ navigable.__any_method__ :foo
98
+ }.to raise_error
96
99
  end
97
100
 
98
101
  context "given a block" do
@@ -107,14 +110,14 @@ describe NavigableHash do
107
110
  it "should create a new navigable hash" do
108
111
  navigable.__any_method__ do |v|
109
112
  end
110
- navigable.__any_method__.should be_a NavigableHash
113
+ expect(navigable.__any_method__).to be_a NavigableHash
111
114
  end
112
115
 
113
116
  it "should assign values in the block to the hash" do
114
117
  navigable.__any_method__ do |v|
115
118
  v.foo = :bar
116
119
  end
117
- navigable.__any_method__.foo.should == :bar
120
+ expect(navigable.__any_method__.foo).to eq :bar
118
121
  end
119
122
  end
120
123
 
@@ -138,25 +141,25 @@ describe NavigableHash do
138
141
 
139
142
  context "given a hash" do
140
143
  it "should return a new instance of navigable hash" do
141
- navigable[:hash_item].should be_an_instance_of NavigableHash
144
+ expect(navigable[:hash_item]).to be_an_instance_of NavigableHash
142
145
  end
143
146
  end
144
147
 
145
148
  context "given an array" do
146
149
  it "should call #navigate with each value" do
147
- navigable[:array].should be_a Array
150
+ expect(navigable[:array]).to be_a Array
148
151
  end
149
152
  end
150
153
 
151
154
  context "given any object" do
152
155
  it "should return a value" do
153
- navigable[:object].should be_an_instance_of Object
156
+ expect(navigable[:object]).to be_an_instance_of Object
154
157
  end
155
158
  end
156
159
 
157
160
  context "given nil" do
158
161
  it "should return a value" do
159
- navigable[:nil_value].should be_nil
162
+ expect(navigable[:nil_value]).to be_nil
160
163
  end
161
164
  end
162
165
 
@@ -170,9 +173,9 @@ describe NavigableHash do
170
173
  context "given a hash" do
171
174
  it "should return a new instance of navigable hash" do
172
175
  hash = {:a => 1, :b => 2, :c => 3}
173
- navigable.should_receive(:navigate_hash).with(hash).and_call_original
176
+ expect(navigable).to receive(:navigate_hash).with(hash).and_call_original
174
177
  navigable[:hash] = hash
175
- navigable[:hash].should be_an_instance_of NavigableHash
178
+ expect(navigable[:hash]).to be_an_instance_of NavigableHash
176
179
  end
177
180
 
178
181
  context "given a subclass, setting with a navigable hash" do
@@ -182,9 +185,9 @@ describe NavigableHash do
182
185
  subject(:navigable){ SubNavigableHash.new(hash) }
183
186
  it 'should return an instance of the subclass' do
184
187
  hash = NavigableHash.new :a => 1, :b => 2, :c => 3
185
- navigable.should_receive(:navigate_hash).with(hash).and_call_original
188
+ expect(navigable).to receive(:navigate_hash).with(hash).and_call_original
186
189
  navigable[:hash] = hash
187
- navigable[:hash].should be_an_instance_of SubNavigableHash
190
+ expect(navigable[:hash]).to be_an_instance_of SubNavigableHash
188
191
  end
189
192
  end
190
193
  end
@@ -192,7 +195,7 @@ describe NavigableHash do
192
195
  context "given an array" do
193
196
  it "should call #navigate with each value" do
194
197
  array = [1, 2, 3]
195
- navigable.should_receive(:navigate_array).with(array)
198
+ expect(navigable).to receive(:navigate_array).with(array)
196
199
  navigable[:array] = array
197
200
  end
198
201
  end
@@ -200,14 +203,14 @@ describe NavigableHash do
200
203
  context "given any object" do
201
204
  it "should return a value" do
202
205
  object = Object.new
203
- navigable.should_receive(:navigate_value).with(object)
206
+ expect(navigable).to receive(:navigate_value).with(object)
204
207
  navigable[:object] = object
205
208
  end
206
209
  end
207
210
 
208
211
  context "given nil" do
209
212
  it "should return a value" do
210
- navigable.should_receive(:navigate_value).with(nil)
213
+ expect(navigable).to receive(:navigate_value).with(nil)
211
214
  navigable[:nil_value] = nil
212
215
  end
213
216
  end
@@ -215,7 +218,7 @@ describe NavigableHash do
215
218
 
216
219
  describe "#==" do
217
220
  it "should be equal to a hash" do
218
- navigable.should == hash
221
+ expect(navigable).to eq hash
219
222
  end
220
223
  end
221
224
 
@@ -236,11 +239,11 @@ describe NavigableHash do
236
239
 
237
240
  describe "#dup" do
238
241
  it "should return a copy of navigable hash" do
239
- navigable.dup.should be_an_instance_of NavigableHash
242
+ expect(navigable.dup).to be_an_instance_of NavigableHash
240
243
  end
241
244
 
242
245
  it "should be equal to its original" do
243
- navigable.dup.should == navigable
246
+ expect(navigable.dup).to eq navigable
244
247
  end
245
248
  end
246
249
 
@@ -248,13 +251,13 @@ describe NavigableHash do
248
251
  context "if a key exists" do
249
252
  it "should be true" do
250
253
  navigable[:present_key] = 'value'
251
- navigable.key?(:present_key).should be_true
254
+ expect(navigable.key? :present_key).to be_true
252
255
  end
253
256
  end
254
257
 
255
258
  context "if a key does not exist" do
256
259
  it "should be false" do
257
- navigable.key?(:no_key).should be_false
260
+ expect(navigable.key? :no_key).to be_false
258
261
  end
259
262
  end
260
263
  end
@@ -263,7 +266,7 @@ describe NavigableHash do
263
266
  context "given a hash" do
264
267
  let(:hash){ { :hash => {} } }
265
268
  it "should return an instance of NavigableHash" do
266
- navigable.fetch(:hash).should be_an_instance_of NavigableHash
269
+ expect(navigable.fetch :hash).to be_an_instance_of NavigableHash
267
270
  end
268
271
  end
269
272
  end
@@ -272,19 +275,19 @@ describe NavigableHash do
272
275
  context "given a hash" do
273
276
  it "should have a navigable hash" do
274
277
  merged = navigable.merge({ :some_hash => {}})
275
- merged[:some_hash].should be_an_instance_of NavigableHash
278
+ expect(merged[:some_hash]).to be_an_instance_of NavigableHash
276
279
  end
277
280
  end
278
281
  end
279
282
 
280
283
  describe "#to_hash" do
281
284
  it "should be an instance of Hash" do
282
- navigable.to_hash.should be_an_instance_of Hash
285
+ expect(navigable.to_hash).to be_an_instance_of Hash
283
286
  end
284
287
 
285
288
  it "inner hash should be an instance of hash" do
286
- navigable[:hash_item].should be_an_instance_of NavigableHash
287
- navigable.to_hash['hash_item'].should be_an_instance_of Hash
289
+ expect(navigable[:hash_item]).to be_an_instance_of NavigableHash
290
+ expect(navigable.to_hash['hash_item']).to be_an_instance_of Hash
288
291
  end
289
292
  end
290
293
 
@@ -292,7 +295,7 @@ describe NavigableHash do
292
295
  context "given a hash" do
293
296
  it "should have a navigable hash" do
294
297
  navigable.update({ :some_hash => {}})
295
- navigable[:some_hash].should be_an_instance_of NavigableHash
298
+ expect(navigable[:some_hash]).to be_an_instance_of NavigableHash
296
299
  end
297
300
  end
298
301
  end
@@ -300,20 +303,20 @@ describe NavigableHash do
300
303
  describe "#respond_to?" do
301
304
  context "if the key exists" do
302
305
  it "should be " do
303
- navigable.respond_to?(:this_is_not_a_method).should be_false
306
+ expect(navigable).to_not respond_to :this_is_not_a_method
304
307
  end
305
308
  end
306
309
 
307
310
  context "if the key does not exist" do
308
311
  it "should be " do
309
312
  navigable[:this_is_not_a_method] = "Hello"
310
- navigable.respond_to?(:this_is_not_a_method).should be_true
313
+ expect(navigable).to respond_to :this_is_not_a_method
311
314
  end
312
315
  end
313
316
 
314
317
  context "with a real method" do
315
318
  it "should be true" do
316
- navigable.respond_to?(:to_hash).should be_true
319
+ expect(navigable).to respond_to :to_hash
317
320
  end
318
321
  end
319
322
  end
@@ -321,13 +324,13 @@ describe NavigableHash do
321
324
  describe "#values_at" do
322
325
  let (:hash){ { :foo => "foo_value", :bar => "bar_value", :baz => "baz_value" } }
323
326
  it "should have the correct values" do
324
- navigable.values_at(:foo, :bar).should == [hash[:foo], hash[:bar]]
327
+ expect(navigable.values_at :foo, :bar).to eq [hash[:foo], hash[:bar]]
325
328
  end
326
329
  end
327
330
 
328
331
  describe "#method_missing" do
329
332
  it "should return nil" do
330
- navigable.this_is_not_a_method.should be_nil
333
+ expect(navigable.this_is_not_a_method).to be_nil
331
334
  end
332
335
 
333
336
  it "should not raise an error" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navigable_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Waldrip
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-16 00:00:00.000000000 Z
12
+ date: 2014-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '1.3'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.3'
28
28
  - !ruby/object:Gem::Dependency
@@ -145,10 +145,11 @@ executables: []
145
145
  extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
148
- - .coveralls.yml
149
- - .gitignore
150
- - .rspec
151
- - .travis.yml
148
+ - ".coveralls.yml"
149
+ - ".gitignore"
150
+ - ".rspec"
151
+ - ".ruby-version"
152
+ - ".travis.yml"
152
153
  - Gemfile
153
154
  - Guardfile
154
155
  - LICENSE.txt
@@ -169,17 +170,17 @@ require_paths:
169
170
  - lib
170
171
  required_ruby_version: !ruby/object:Gem::Requirement
171
172
  requirements:
172
- - - ! '>='
173
+ - - ">="
173
174
  - !ruby/object:Gem::Version
174
175
  version: '0'
175
176
  required_rubygems_version: !ruby/object:Gem::Requirement
176
177
  requirements:
177
- - - ! '>='
178
+ - - ">="
178
179
  - !ruby/object:Gem::Version
179
180
  version: '0'
180
181
  requirements: []
181
182
  rubyforge_project:
182
- rubygems_version: 2.0.6
183
+ rubygems_version: 2.2.2
183
184
  signing_key:
184
185
  specification_version: 4
185
186
  summary: Allows a hash to be navigated with dot notation or indifferent access.