bihash 0.1.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5d8345deb718d95a3241b798749ff0b1a1eb571
4
- data.tar.gz: 38d06e9a1d0478fe5caaaacd788efe2ec8f029ae
3
+ metadata.gz: b4950baf55de5c2d039c99642d21299374071b08
4
+ data.tar.gz: dd607c38dbe190d3cc1c230d3b85c47329d24d77
5
5
  SHA512:
6
- metadata.gz: 0bb47fb6f7d979f9afccf4743fd380c3f5c87668782c5f72ac8c7004249b062bc4278bc1f16d668100d7f6439574938f7aa2cf3544ce59fd25739a299e2fea6d
7
- data.tar.gz: 7b8801d5e0d0f3bd19dc4f98d3c8025ae4e2f50c0d70655597845272086801bf92a0ae1fad07508f41eb02b8594e17c3fce28191f295e9b357f65df60f4b5efc
6
+ metadata.gz: e78ef70b4e47ef0ea27c40b337fde30a21840ff426216280d6fb58922b3a5cf6acac1d70e8185b0567a8aa3210e67655e62663af7a11f59e95ad9362c2db9d28
7
+ data.tar.gz: 8d5bbda0bd6d9326314398d521e1db3fd3d52263cbaf0c4dacf3e7760180e7b8b65e90564507b9a5f72c939ea6f9019dbf5c93fbec13365c4bef9076da408415
@@ -1,5 +1,6 @@
1
1
  require 'forwardable'
2
2
  require 'bihash/version'
3
+ require 'bihash/unimplemented_methods'
3
4
 
4
5
  class Bihash
5
6
  include Enumerable
@@ -14,8 +15,28 @@ class Bihash
14
15
  h && new_from_hash(h)
15
16
  end
16
17
 
18
+ def <(rhs)
19
+ raise_error_unless_bihash(rhs)
20
+ merged_hash_attrs < rhs.send(:merged_hash_attrs)
21
+ end
22
+
23
+ def <=(rhs)
24
+ raise_error_unless_bihash(rhs)
25
+ merged_hash_attrs <= rhs.send(:merged_hash_attrs)
26
+ end
27
+
17
28
  def ==(rhs)
18
- rhs.is_a?(self.class) && rhs.send(:merged_hash_attrs) == merged_hash_attrs
29
+ rhs.is_a?(self.class) && merged_hash_attrs == rhs.send(:merged_hash_attrs)
30
+ end
31
+
32
+ def >(rhs)
33
+ raise_error_unless_bihash(rhs)
34
+ merged_hash_attrs > rhs.send(:merged_hash_attrs)
35
+ end
36
+
37
+ def >=(rhs)
38
+ raise_error_unless_bihash(rhs)
39
+ merged_hash_attrs >= rhs.send(:merged_hash_attrs)
19
40
  end
20
41
 
21
42
  def [](key)
@@ -47,6 +68,14 @@ class Bihash
47
68
  self
48
69
  end
49
70
 
71
+ def compact
72
+ dup.tap { |d| d.compact! }
73
+ end
74
+
75
+ def compact!
76
+ reject! { |k1, k2| k1.nil? || k2.nil? }
77
+ end
78
+
50
79
  def compare_by_identity
51
80
  raise_error_if_frozen
52
81
  @forward.compare_by_identity
@@ -112,6 +141,10 @@ class Bihash
112
141
  end
113
142
  end
114
143
 
144
+ def dig(*keys)
145
+ (@forward.key?(keys[0]) ? @forward : @reverse).dig(*keys)
146
+ end
147
+
115
148
  def each(&block)
116
149
  if block_given?
117
150
  @forward.each(&block)
@@ -131,6 +164,10 @@ class Bihash
131
164
  (@forward.key?(key) ? @forward : @reverse).fetch(key, *default, &block)
132
165
  end
133
166
 
167
+ def fetch_values(*keys)
168
+ keys.map { |key| fetch(key) }
169
+ end
170
+
134
171
  def_delegator :@forward, :flatten
135
172
 
136
173
  def has_key?(arg)
@@ -186,7 +223,7 @@ class Bihash
186
223
 
187
224
  def reject(&block)
188
225
  if block_given?
189
- dup.delete_if(&block)
226
+ dup.tap { |d| d.reject!(&block) }
190
227
  else
191
228
  to_enum(:reject)
192
229
  end
@@ -213,7 +250,7 @@ class Bihash
213
250
 
214
251
  def select(&block)
215
252
  if block_given?
216
- dup.keep_if(&block)
253
+ dup.tap { |d| d.select!(&block) }
217
254
  else
218
255
  to_enum(:select)
219
256
  end
@@ -248,6 +285,12 @@ class Bihash
248
285
  @forward.dup
249
286
  end
250
287
 
288
+ alias :to_hash :to_h
289
+
290
+ def to_proc
291
+ method(:[]).to_proc
292
+ end
293
+
251
294
  alias :to_s :inspect
252
295
 
253
296
  alias :update :merge!
@@ -0,0 +1,31 @@
1
+ require 'set'
2
+
3
+ class Bihash
4
+ UNIMPLEMENTED_METHODS = Set[
5
+ # expected to only deal with half the hash: keys or values
6
+ 'keys',
7
+ 'values',
8
+ 'each_key',
9
+ 'each_value',
10
+ 'transform_values',
11
+ 'transform_values!',
12
+ # O(n) reverse lookups
13
+ 'key',
14
+ 'index',
15
+ 'rassoc',
16
+ 'value?',
17
+ 'has_value?',
18
+ # meaningless on bihash as both sides already hashed
19
+ 'invert'
20
+ ]
21
+
22
+ def respond_to?(method, private = false)
23
+ UNIMPLEMENTED_METHODS.include?(method.to_s) ? false : super
24
+ end
25
+
26
+ UNIMPLEMENTED_METHODS.each do |method|
27
+ define_method(method) do |*|
28
+ raise NoMethodError, "Bihash##{method} not implemented"
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  class Bihash
2
- VERSION = '0.1.0'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -5,6 +5,17 @@ describe Bihash do
5
5
  Bihash.must_include Enumerable
6
6
  end
7
7
 
8
+ Bihash::UNIMPLEMENTED_METHODS.each do |method|
9
+ it "should report that it does not respond to ##{method}" do
10
+ Bihash.new.respond_to?(method).must_equal false
11
+ end
12
+
13
+ it "should raise NoMethodError if ##{method} is called" do
14
+ error = -> { Bihash.new.send(method) }.must_raise NoMethodError
15
+ error.message.must_equal "Bihash##{method} not implemented"
16
+ end
17
+ end
18
+
8
19
  describe '::[]' do
9
20
  it 'should be able to create an empty bihash' do
10
21
  bh = Bihash[]
@@ -66,7 +77,7 @@ describe Bihash do
66
77
  bh = Bihash.new
67
78
  bh.must_be_instance_of Bihash
68
79
  bh.must_be_empty
69
- bh[:not_a_key].must_equal nil
80
+ bh[:not_a_key].must_be_nil
70
81
  end
71
82
 
72
83
  it 'should create an empty bihash with a default if given an object arg' do
@@ -111,8 +122,13 @@ describe Bihash do
111
122
  bh[2].must_equal :k2
112
123
  end
113
124
 
125
+ it 'should convert a bihash to a bihash' do
126
+ bh = Bihash[:key => 'value']
127
+ Bihash.try_convert(bh).must_equal bh
128
+ end
129
+
114
130
  it 'should return nil if the object does not respond to #to_hash' do
115
- Bihash.try_convert(Object.new).must_equal nil
131
+ Bihash.try_convert(Object.new).must_be_nil
116
132
  end
117
133
 
118
134
  it 'should not accept a hash with duplicate values' do
@@ -120,6 +136,42 @@ describe Bihash do
120
136
  end
121
137
  end
122
138
 
139
+ describe '#<' do
140
+ it 'should raise an error if the right hand side is not a bihash' do
141
+ -> { Bihash[a: 1, b: 2] < {a: 1, b: 2, c: 3} }.must_raise TypeError
142
+ end
143
+
144
+ it 'should return true when the argument is a strict subset of self' do
145
+ (Bihash[a: 1, b: 2] < Bihash[a: 1, b: 2, c: 3]).must_equal true
146
+ end
147
+
148
+ it 'should return false when the argument is equal to self' do
149
+ (Bihash[a: 1, b: 2] < Bihash[a: 1, b: 2]).must_equal false
150
+ end
151
+
152
+ it 'should return false when the argument is not a subset of self' do
153
+ (Bihash[a: 1, b: 2, c: 3] < Bihash[a: 1, b: 2]).must_equal false
154
+ end
155
+ end
156
+
157
+ describe '#<=' do
158
+ it 'should raise an error if the right hand side is not a bihash' do
159
+ -> { Bihash[a: 1, b: 2] <= {a: 1, b: 2, c: 3} }.must_raise TypeError
160
+ end
161
+
162
+ it 'should return true when the argument is a strict subset of self' do
163
+ (Bihash[a: 1, b: 2] <= Bihash[a: 1, b: 2, c: 3]).must_equal true
164
+ end
165
+
166
+ it 'should return true when the argument is equal to self' do
167
+ (Bihash[a: 1, b: 2] <= Bihash[a: 1, b: 2]).must_equal true
168
+ end
169
+
170
+ it 'should return false when the argument is not a subset of self' do
171
+ (Bihash[a: 1, b: 2, c: 3] <= Bihash[a: 1, b: 2]).must_equal false
172
+ end
173
+ end
174
+
123
175
  describe '#==' do
124
176
  it 'should return true when two bihashes have the same pairs' do
125
177
  bh1, bh2 = Bihash[:k1 => 1, :k2 => 2], Bihash[2 => :k2, 1 => :k1]
@@ -137,6 +189,42 @@ describe Bihash do
137
189
  end
138
190
  end
139
191
 
192
+ describe '#>' do
193
+ it 'should raise an error if the right hand side is not a bihash' do
194
+ -> { Bihash[a: 1, b: 2] > {a: 1, b: 2, c: 3} }.must_raise TypeError
195
+ end
196
+
197
+ it 'should return true when the argument is a strict superset of self' do
198
+ (Bihash[a: 1, b: 2, c: 3] > Bihash[a: 1, b: 2]).must_equal true
199
+ end
200
+
201
+ it 'should return false when the argument is equal to self' do
202
+ (Bihash[a: 1, b: 2] > Bihash[a: 1, b: 2]).must_equal false
203
+ end
204
+
205
+ it 'should return false when the argument is not a superset of self' do
206
+ (Bihash[a: 1, b: 2] > Bihash[a: 1, b: 2, c: 3]).must_equal false
207
+ end
208
+ end
209
+
210
+ describe '#>=' do
211
+ it 'should raise an error if the right hand side is not a bihash' do
212
+ -> { Bihash[a: 1, b: 2] >= {a: 1, b: 2, c: 3} }.must_raise TypeError
213
+ end
214
+
215
+ it 'should return true when the argument is a strict superset of self' do
216
+ (Bihash[a: 1, b: 2, c: 3] >= Bihash[a: 1, b: 2]).must_equal true
217
+ end
218
+
219
+ it 'should return true when the argument is equal to self' do
220
+ (Bihash[a: 1, b: 2] >= Bihash[a: 1, b: 2]).must_equal true
221
+ end
222
+
223
+ it 'should return false when the argument is not a superset of self' do
224
+ (Bihash[a: 1, b: 2] >= Bihash[a: 1, b: 2, c: 3]).must_equal false
225
+ end
226
+ end
227
+
140
228
  describe '#[]' do
141
229
  it 'should return the other pair' do
142
230
  bh = Bihash[:key => 'value']
@@ -147,10 +235,10 @@ describe Bihash do
147
235
  it 'should return falsey values correctly' do
148
236
  bh1 = Bihash[nil => false]
149
237
  bh1[nil].must_equal false
150
- bh1[false].must_equal nil
238
+ bh1[false].must_be_nil
151
239
 
152
240
  bh2 = Bihash[false => nil]
153
- bh2[false].must_equal nil
241
+ bh2[false].must_be_nil
154
242
  bh2[nil].must_equal false
155
243
  end
156
244
  end
@@ -201,14 +289,57 @@ describe Bihash do
201
289
 
202
290
  it 'should return nil if the argument is not a key' do
203
291
  bh = Bihash.new(404)
204
- bh.assoc(:not_a_key).must_equal nil
292
+ bh.assoc(:not_a_key).must_be_nil
205
293
  end
206
294
 
207
295
  it 'should find the key using #==' do
208
296
  bh = Bihash[[] => 'array']
209
297
  bh['array'] << 'modified'
210
298
  bh.assoc(['modified']).must_equal [['modified'], 'array']
211
- bh.assoc([]).must_equal nil
299
+ bh.assoc([]).must_be_nil
300
+ end
301
+ end
302
+
303
+ describe '#compact' do
304
+ describe 'when any pairs contain a nil key' do
305
+ it 'should return a new bihash with any pairs containing nil removed' do
306
+ bh = Bihash[1 => :one, 2 => nil, 3 => :three]
307
+ bh.compact.must_equal Bihash[1 => :one, 3 => :three]
308
+ bh.must_equal Bihash[1 => :one, 2 => nil, 3 => :three]
309
+ end
310
+ end
311
+
312
+ describe 'no pairs contain a nil key' do
313
+ it 'should return a copy of the original bihash' do
314
+ bh = Bihash[1 => :one, 2 => :two, 3 => :three]
315
+ compacted_bh = bh.compact
316
+ compacted_bh.must_equal Bihash[1 => :one, 2=> :two, 3 => :three]
317
+ compacted_bh.object_id.wont_equal bh.object_id
318
+ end
319
+ end
320
+ end
321
+
322
+ describe '#compact!' do
323
+ it 'should delete any pairs containing nil' do
324
+ bh1 = Bihash[1 => :one, 2 => nil, 3 => :three]
325
+ bh1_id = bh1.object_id
326
+ bh1.compact!.object_id.must_equal bh1_id
327
+ bh1.must_equal Bihash[1 => :one, 3 => :three]
328
+
329
+ bh2 = Bihash[1 => :one, 2 => nil, 3 => :three]
330
+ bh2_id = bh2.object_id
331
+ bh2.compact!.object_id.must_equal bh2_id
332
+ bh2.must_equal Bihash[1 => :one, 3 => :three]
333
+ end
334
+
335
+ it 'should return nil if no changes were made to the bihash' do
336
+ bh = Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
337
+ bh.compact!.must_be_nil
338
+ bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
339
+ end
340
+
341
+ it 'should raise RuntimeError if called on a frozen bihash' do
342
+ -> { Bihash.new.freeze.compact! }.must_raise RuntimeError
212
343
  end
213
344
  end
214
345
 
@@ -229,7 +360,7 @@ describe Bihash do
229
360
  bh = Bihash[1 => :one]
230
361
  clone = bh.clone
231
362
  clone[2] = :two
232
- bh[2].must_equal nil
363
+ bh[2].must_be_nil
233
364
  end
234
365
  end
235
366
 
@@ -238,8 +369,8 @@ describe Bihash do
238
369
  bh = Bihash.new.compare_by_identity
239
370
  key1, key2 = 'key', 'value'
240
371
  bh[key1] = key2
241
- bh['key'].must_equal nil
242
- bh['value'].must_equal nil
372
+ bh['key'].must_be_nil
373
+ bh['value'].must_be_nil
243
374
  bh[key1].must_equal 'value'
244
375
  bh[key2].must_equal 'key'
245
376
  end
@@ -264,9 +395,9 @@ describe Bihash do
264
395
  describe 'when there is not a default proc' do
265
396
  it 'should return the default' do
266
397
  bh1 = Bihash[:key => 'value']
267
- bh1.default.must_equal nil
268
- bh1.default(:not_a_key).must_equal nil
269
- bh1.default(:key).must_equal nil
398
+ bh1.default.must_be_nil
399
+ bh1.default(:not_a_key).must_be_nil
400
+ bh1.default(:key).must_be_nil
270
401
 
271
402
  bh2 = Bihash.new(404)
272
403
  bh2[:key] = 'value'
@@ -278,7 +409,7 @@ describe Bihash do
278
409
 
279
410
  describe 'when there is a default proc' do
280
411
  it 'should return the default if called with no argument' do
281
- Bihash.new { 'proc called' }.default.must_equal nil
412
+ Bihash.new { 'proc called' }.default.must_be_nil
282
413
  end
283
414
 
284
415
  it 'should call the default proc when called with an argument' do
@@ -317,8 +448,8 @@ describe Bihash do
317
448
  end
318
449
 
319
450
  it 'should return nil if there is no default proc' do
320
- Bihash.new.default_proc.must_equal nil
321
- Bihash.new(404).default_proc.must_equal nil
451
+ Bihash.new.default_proc.must_be_nil
452
+ Bihash.new(404).default_proc.must_be_nil
322
453
  end
323
454
  end
324
455
 
@@ -333,8 +464,8 @@ describe Bihash do
333
464
  it 'should set the default value to nil if argument is nil' do
334
465
  bh = Bihash.new(:default_object)
335
466
  bh[:not_a_key].must_equal :default_object
336
- (bh.default_proc = nil).must_equal nil
337
- bh[:not_a_key].must_equal nil
467
+ (bh.default_proc = nil).must_be_nil
468
+ bh[:not_a_key].must_be_nil
338
469
  end
339
470
 
340
471
  it 'should raise TypeError if not given a non-proc (except nil)' do
@@ -397,12 +528,35 @@ describe Bihash do
397
528
  end
398
529
  end
399
530
 
531
+ describe '#dig' do
532
+ it 'should traverse nested bihashes' do
533
+ bh = Bihash[foo: Bihash[bar: Bihash[baz: 4]]]
534
+ bh.dig(:foo, :bar, :baz).must_equal 4
535
+ bh.dig(:foo, :bar, 4).must_equal :baz
536
+ end
537
+
538
+ it 'should traverse nested hashes' do
539
+ bh = Bihash[foo: {bar: {baz: 4}}]
540
+ bh.dig(:foo, :bar, :baz).must_equal 4
541
+ end
542
+
543
+ it 'should traverse nested arrays' do
544
+ bh = Bihash[foo: [[4]]]
545
+ bh.dig(:foo, 0, 0).must_equal 4
546
+ end
547
+
548
+ it 'should return nil if any intermediate step is nil' do
549
+ bh = Bihash[foo: Bihash[bar: Bihash[baz: 4]]]
550
+ bh.dig(:foo, :bur, :boz).must_be_nil
551
+ end
552
+ end
553
+
400
554
  describe '#dup' do
401
555
  it 'should make a copy of the bihash' do
402
556
  bh = Bihash[1 => :one]
403
557
  dup = bh.dup
404
558
  dup[2] = :two
405
- bh[2].must_equal nil
559
+ bh[2].must_be_nil
406
560
  end
407
561
  end
408
562
 
@@ -448,10 +602,10 @@ describe Bihash do
448
602
  it 'should return falsey values correctly' do
449
603
  bh1 = Bihash[nil => false]
450
604
  bh1.fetch(nil).must_equal false
451
- bh1.fetch(false).must_equal nil
605
+ bh1.fetch(false).must_be_nil
452
606
 
453
607
  bh2 = Bihash[false => nil]
454
- bh2.fetch(false).must_equal nil
608
+ bh2.fetch(false).must_be_nil
455
609
  bh2.fetch(nil).must_equal false
456
610
  end
457
611
 
@@ -470,8 +624,28 @@ describe Bihash do
470
624
  end
471
625
  end
472
626
 
627
+ describe '#fetch_values' do
628
+ it 'should return an array of values corresponding to the given keys' do
629
+ Bihash[1 => :one, 2 => :two].fetch_values(1, 2).must_equal [:one, :two]
630
+ Bihash[1 => :one, 2 => :two].fetch_values(:one, :two).must_equal [1, 2]
631
+ Bihash[1 => :one, 2 => :two].fetch_values(1, :two).must_equal [:one, 2]
632
+ end
633
+
634
+ it 'should raise a KeyError if any key is not found' do
635
+ -> { Bihash.new.fetch_values(404) }.must_raise KeyError
636
+ end
637
+
638
+ it 'should not duplicate entries if a key equals its value' do
639
+ Bihash[:key => :key].fetch_values(:key).must_equal [:key]
640
+ end
641
+
642
+ it 'should return an empty array with no args' do
643
+ Bihash[:key => 'value'].fetch_values.must_equal []
644
+ end
645
+ end
646
+
473
647
  describe '#flatten' do
474
- it 'extract the pairs into an array' do
648
+ it 'should extract the pairs into an array' do
475
649
  Bihash[:k1 => 'v1', :k2 => 'v2'].flatten.must_equal [:k1, 'v1', :k2, 'v2']
476
650
  end
477
651
 
@@ -574,7 +748,7 @@ describe Bihash do
574
748
  it 'should recompute all key hash values and return the bihash' do
575
749
  bh = Bihash[[] => :array]
576
750
  bh[:array] << 1
577
- bh[[1]].must_equal nil
751
+ bh[[1]].must_be_nil
578
752
  bh.rehash[[1]].must_equal :array
579
753
  bh[[1]].must_equal :array
580
754
  end
@@ -591,14 +765,16 @@ describe Bihash do
591
765
  end
592
766
 
593
767
  describe '#reject' do
594
- describe 'should return a bihash with items not rejected by the block' do
595
- it 'when some items are rejected' do
768
+ describe 'when some items are rejected' do
769
+ it 'should return a bihash with items not rejected by the block' do
596
770
  bh = Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
597
771
  bh.reject { |k1,k2| k1.even? }.must_equal Bihash[1 => :one, 3 => :three]
598
772
  bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
599
773
  end
774
+ end
600
775
 
601
- it 'when no items are rejected' do
776
+ describe 'when no items are rejected' do
777
+ it 'should return a bihash with items not rejected by the block' do
602
778
  bh = Bihash[1 => :one, 3 => :three, 5 => :five, 7 => :seven]
603
779
  bh.reject { |k1,k2| k1.even? }.must_equal bh
604
780
  bh.must_equal bh
@@ -622,7 +798,7 @@ describe Bihash do
622
798
 
623
799
  it 'should return nil if no changes were made to the bihash' do
624
800
  bh = Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
625
- bh.reject! { |key1, key2| key1 > 5 }.must_equal nil
801
+ bh.reject! { |key1, key2| key1 > 5 }.must_be_nil
626
802
  bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
627
803
  end
628
804
 
@@ -658,14 +834,16 @@ describe Bihash do
658
834
  end
659
835
 
660
836
  describe '#select' do
661
- describe 'should return a bihash with items selected by the block' do
662
- it 'when only some items are selected' do
837
+ describe 'when only some items are selected' do
838
+ it 'should return a bihash with items selected by the block' do
663
839
  bh = Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
664
840
  bh.select { |k1,k2| k1.even? }.must_equal Bihash[2 => :two, 4 => :four]
665
841
  bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
666
842
  end
843
+ end
667
844
 
668
- it 'when all items are selected' do
845
+ describe 'when all items are selected' do
846
+ it 'should return a bihash with items selected by the block' do
669
847
  bh = Bihash[2 => :two, 4 => :four, 6 => :six, 8 => :eight]
670
848
  bh.select { |k1,k2| k1.even? }.must_equal bh
671
849
  bh.must_equal bh
@@ -689,7 +867,7 @@ describe Bihash do
689
867
 
690
868
  it 'should return nil if no changes were made to the bihash' do
691
869
  bh = Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
692
- bh.select! { |key1, key2| key1 < 5 }.must_equal nil
870
+ bh.select! { |key1, key2| key1 < 5 }.must_be_nil
693
871
  bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three, 4 => :four]
694
872
  end
695
873
 
@@ -712,7 +890,7 @@ describe Bihash do
712
890
  end
713
891
 
714
892
  it 'should return the default value if bihash is empty' do
715
- Bihash.new.shift.must_equal nil
893
+ Bihash.new.shift.must_be_nil
716
894
  Bihash.new(404).shift.must_equal 404
717
895
  Bihash.new { 'd3f4u17' }.shift.must_equal 'd3f4u17'
718
896
  end
@@ -736,6 +914,21 @@ describe Bihash do
736
914
  h.delete(:key1)
737
915
  bh.must_include :key1
738
916
  end
917
+
918
+ it 'should be an alias of #to_hash' do
919
+ bh = Bihash.new
920
+ bh.method(:to_hash).must_equal bh.method(:to_h)
921
+ end
922
+ end
923
+
924
+ describe '#to_proc' do
925
+ it 'should convert the bihash to a proc' do
926
+ Bihash[].to_proc.must_be_instance_of Proc
927
+ end
928
+
929
+ it 'should call #[] on the bihash when the proc is called' do
930
+ Bihash[:key => 'value'].to_proc.call(:key).must_equal 'value'
931
+ end
739
932
  end
740
933
 
741
934
  describe '#to_s' do
@@ -1,5 +1,4 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require 'bihash'
3
3
 
4
- require 'minitest/spec'
5
4
  require 'minitest/autorun'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bihash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cohen Carlisle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-20 00:00:00.000000000 Z
11
+ date: 2017-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ files:
84
84
  - bin/console
85
85
  - bin/setup
86
86
  - lib/bihash.rb
87
+ - lib/bihash/unimplemented_methods.rb
87
88
  - lib/bihash/version.rb
88
89
  - spec/bihash_spec.rb
89
90
  - spec/spec_helper.rb
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  version: '0'
108
109
  requirements: []
109
110
  rubyforge_project:
110
- rubygems_version: 2.5.1
111
+ rubygems_version: 2.5.2
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: Bidirectional Hash