bihash 1.0.0 → 1.1.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: b4950baf55de5c2d039c99642d21299374071b08
4
- data.tar.gz: dd607c38dbe190d3cc1c230d3b85c47329d24d77
3
+ metadata.gz: 267f9af4575dbcca9216e1c780c6d5bd91f291be
4
+ data.tar.gz: 249056135bb1a35e4f90c7b4f6453f317dfc410a
5
5
  SHA512:
6
- metadata.gz: e78ef70b4e47ef0ea27c40b337fde30a21840ff426216280d6fb58922b3a5cf6acac1d70e8185b0567a8aa3210e67655e62663af7a11f59e95ad9362c2db9d28
7
- data.tar.gz: 8d5bbda0bd6d9326314398d521e1db3fd3d52263cbaf0c4dacf3e7760180e7b8b65e90564507b9a5f72c939ea6f9019dbf5c93fbec13365c4bef9076da408415
6
+ metadata.gz: 4fb2d4c5807667407e8feff5f189e52ee899900cb1c85d025ebb25b439d570f8f0b60530bfd1b13fa9bb45f8c2c1f0d49e9ae4ac4648af16421aedb24bb2b2e9
7
+ data.tar.gz: dd4c378857235311be4573879a1aea3932e73ff55edf40052bbdb6e3c8c5ee2f63170677a88fb5eb5b0c84347e2cbb19bb9b58282a8c2099ab769456b292c568
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.0
4
- before_install: gem install bundler -v 1.11.2
3
+ - 2.3.6
4
+ - 2.4.3
5
+ - 2.5.0
6
+ before_install: gem install bundler -v 1.16.1
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ [![Build Status](https://travis-ci.org/Cohen-Carlisle/bihash.svg?branch=master)](https://travis-ci.org/Cohen-Carlisle/bihash)
1
2
  # Bihash
2
3
 
3
4
  A simple gem that implements a bidrectional hash
@@ -6,6 +7,19 @@ A simple gem that implements a bidrectional hash
6
7
 
7
8
  Use as a hash, except that keys and values are interchangeable.
8
9
 
10
+ ```ruby
11
+ abbreviations = Bihash["abbr" => "abbreviation"]
12
+ # => Bihash["abbr"=>"abbreviation"]
13
+ abbreviations["lol"] = "laugh out loud"
14
+ # => "laugh out loud"
15
+ puts abbreviations
16
+ # => Bihash["abbr"=>"abbreviation", "lol"=>"laugh out loud"]
17
+ abbreviations["lol"]
18
+ # => "laugh out loud"
19
+ abbreviations["laugh out loud"]
20
+ # => "lol"
21
+ ```
22
+
9
23
  ## Development
10
24
 
11
25
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -7,6 +7,8 @@ class Bihash
7
7
  'values',
8
8
  'each_key',
9
9
  'each_value',
10
+ 'transform_keys',
11
+ 'transform_keys!',
10
12
  'transform_values',
11
13
  'transform_values!',
12
14
  # O(n) reverse lookups
@@ -16,7 +18,10 @@ class Bihash
16
18
  'value?',
17
19
  'has_value?',
18
20
  # meaningless on bihash as both sides already hashed
19
- 'invert'
21
+ 'invert',
22
+ # mass removal of nil, but a bihash can have only one pair containing nil
23
+ 'compact',
24
+ 'compact!'
20
25
  ]
21
26
 
22
27
  def respond_to?(method, private = false)
@@ -1,3 +1,3 @@
1
1
  class Bihash
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
data/lib/bihash.rb CHANGED
@@ -68,14 +68,6 @@ class Bihash
68
68
  self
69
69
  end
70
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
-
79
71
  def compare_by_identity
80
72
  raise_error_if_frozen
81
73
  @forward.compare_by_identity
@@ -279,6 +271,14 @@ class Bihash
279
271
 
280
272
  def_delegator :@forward, :size
281
273
 
274
+ def slice(*args)
275
+ self.class.new.tap do |bh|
276
+ args.each do |arg|
277
+ bh[arg] = self[arg] if key?(arg)
278
+ end
279
+ end
280
+ end
281
+
282
282
  alias :store :[]=
283
283
 
284
284
  def to_h
data/spec/bihash_spec.rb CHANGED
@@ -300,49 +300,6 @@ describe Bihash do
300
300
  end
301
301
  end
302
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
343
- end
344
- end
345
-
346
303
  describe '#clear' do
347
304
  it 'should remove all pairs and return the bihash' do
348
305
  bh = Bihash[:key => 'value']
@@ -906,6 +863,19 @@ describe Bihash do
906
863
  end
907
864
  end
908
865
 
866
+ describe '#slice' do
867
+ it 'should return a new bihash with only the pairs that are in the args' do
868
+ bh = Bihash[1 => :one, 2 => :two, 3 => :three]
869
+ bh.slice(1, :one, :two, "nope").must_equal Bihash[1 => :one, 2 => :two]
870
+ bh.must_equal Bihash[1 => :one, 2 => :two, 3 => :three]
871
+ end
872
+
873
+ it 'should return a vanilla bihash without default values, etc.' do
874
+ sliced_bh = Bihash.new(404).slice
875
+ sliced_bh.default.must_be_nil
876
+ end
877
+ end
878
+
909
879
  describe '#to_h' do
910
880
  it 'should return a copy of the forward hash' do
911
881
  bh = Bihash[:key1 => 'val1', :key2 => 'val2']
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: 1.0.0
4
+ version: 1.1.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: 2017-03-24 00:00:00.000000000 Z
11
+ date: 2018-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  version: '0'
109
109
  requirements: []
110
110
  rubyforge_project:
111
- rubygems_version: 2.5.2
111
+ rubygems_version: 2.5.2.2
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: Bidirectional Hash