hash_selectors 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +15 -0
- data/lib/hash_selectors.rb +40 -0
- data/spec/hash_selectors_spec.rb +56 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c54e88d54866fd6a2b4f084d3e07cd8bf79cad9a
|
4
|
+
data.tar.gz: 64124d0bc34c1beca634a2a5791b441f64bba35a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2ab23a176b61a530f96e8d36d62e45084504a8e14402d8c7e96a22f3cb4275823503a04c540aff93c3a0a56f27d47bf4a276305c6fcd9dc395f39a46f7ab443
|
7
|
+
data.tar.gz: 8ff3671d090084ae55b0f3151632de1703a99f0fb89a4fc996504b7af1c06cd874b38110cbc7e31c241067581de750060247b21c75607a0248845a0a905ed14b
|
data/README.md
CHANGED
@@ -2,3 +2,18 @@ hash-selectors
|
|
2
2
|
==============
|
3
3
|
|
4
4
|
A small set of select methods for Ruby Hashes
|
5
|
+
|
6
|
+
# select_by...
|
7
|
+
{a: 1, b: 2, c: 3}.select_by_keys :a, :b # returns {a: 1, b: 2}
|
8
|
+
|
9
|
+
{a: 1, b: 2, c: 3}.select_by_values 1, 3 # returns {a: 1, c: 3}
|
10
|
+
|
11
|
+
# reject_by...
|
12
|
+
{a: 1, b: 2, c: 3}.reject_by_keys :c # returns {a: 1, b: 2}
|
13
|
+
|
14
|
+
{a: 1, b: 2, c: 3}.reject_by_values 2 # returns {a: 1, c: 3}
|
15
|
+
|
16
|
+
# partition_by...
|
17
|
+
{a: 1, b: 2, c: 3}.partition_by_keys :a, :b # returns [{a: 1, b: 2}, {c: 3}]
|
18
|
+
|
19
|
+
{a: 1, b: 2, c: 3}.partition_by_values 1, 3 # returns [{a: 1, c: 3}, {b: 2}]
|
data/lib/hash_selectors.rb
CHANGED
@@ -2,6 +2,46 @@
|
|
2
2
|
# Automatically mixed-in to Hash on load.
|
3
3
|
module HashSelectors
|
4
4
|
|
5
|
+
# @example
|
6
|
+
# {a: 1, b: 2, c: 3}.partition_by_keys :a, :b # returns [{a: 1, b: 2}, {c: 3}]
|
7
|
+
#
|
8
|
+
# @param [Glob of any type] ks
|
9
|
+
# @return [Hash] Partitioned results based on whether keys are included within the *ks* argument.
|
10
|
+
def partition_by_keys(*ks)
|
11
|
+
### OPTIMIZE: Simple partition with the block results in nested Arrays. Investigate.
|
12
|
+
blk = lambda { |k,v| ks.include?(k) }
|
13
|
+
[select(&blk), reject(&blk)]
|
14
|
+
end
|
15
|
+
|
16
|
+
# @example
|
17
|
+
# {a: 1, b: 2, c: 3}.partition_by_values 2, 3 # returns [{b: 2, c: 3}, {a: 1}]
|
18
|
+
#
|
19
|
+
# @param [Glob of any type] vs
|
20
|
+
# @return [Hash] Partitioned results based on whether values are included within the *vs* argument.
|
21
|
+
def partition_by_values(*vs)
|
22
|
+
### OPTIMIZE: Simple partition with the block results in nested Arrays. Investigate.
|
23
|
+
blk = lambda { |k,v| vs.include?(v) }
|
24
|
+
[select(&blk), reject(&blk)]
|
25
|
+
end
|
26
|
+
|
27
|
+
# @example
|
28
|
+
# {a: 1, b: 2, c: 3}.reject_by_keys :a, :b # returns {c: 3}
|
29
|
+
#
|
30
|
+
# @param [Glob of any type] ks
|
31
|
+
# @return [Hash] That subset of the Hash whose keys are not found within the *ks* argument.
|
32
|
+
def reject_by_keys(*ks)
|
33
|
+
reject { |k,v| ks.include?(k) }
|
34
|
+
end
|
35
|
+
|
36
|
+
# @example
|
37
|
+
# {a: 1, b: 2, c: 3}.reject_by_values 2, 3 # returns {a: 1}
|
38
|
+
#
|
39
|
+
# @param [Glob of any type] vs
|
40
|
+
# @return [Hash] That subset of the Hash whose values are not found within the *vs* argument.
|
41
|
+
def reject_by_values(*vs)
|
42
|
+
reject { |k,v| vs.include?(v) }
|
43
|
+
end
|
44
|
+
|
5
45
|
# @example
|
6
46
|
# {a: 1, b: 2, c: 3}.select_by_keys :a, :b # returns {a: 1, b: 2}
|
7
47
|
#
|
data/spec/hash_selectors_spec.rb
CHANGED
@@ -7,6 +7,62 @@ RSpec.describe HashSelectors do
|
|
7
7
|
|
8
8
|
### INSTANCE METHODS
|
9
9
|
|
10
|
+
describe "#partition_by_keys" do
|
11
|
+
context "assuming a Hash: {a: 1, b: 2, c: {c2: [:d, :e]}}" do
|
12
|
+
let(:the_hash) { {a: 1, b: 2, c: {c2: [:d, :e]}} }
|
13
|
+
context "and given :a, :d" do
|
14
|
+
subject { the_hash.partition_by_keys :a, :d }
|
15
|
+
it { is_expected.to eq([{a: 1}, {b: 2, c: {c2: [:d, :e]}}]) }
|
16
|
+
end
|
17
|
+
context "and given :a, :b" do
|
18
|
+
subject { the_hash.partition_by_keys :a, :b }
|
19
|
+
it { is_expected.to eq([{a: 1, b: 2}, {c: {c2: [:d, :e]}}]) }
|
20
|
+
end
|
21
|
+
context "and given :b, :c" do
|
22
|
+
subject { the_hash.partition_by_keys :b, :c }
|
23
|
+
it { is_expected.to eq([{b: 2, c: {c2: [:d, :e]}}, {a: 1}]) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#partition_by_values" do
|
29
|
+
context "assuming a Hash: {a: 1, b: 2, c: {c2: [:d, :e]}}" do
|
30
|
+
let(:the_hash) { {a: 1, b: 2, c: {c2: [:d, :e]}} }
|
31
|
+
context "and given 1, 2" do
|
32
|
+
subject { the_hash.partition_by_values 1, 2 }
|
33
|
+
it { is_expected.to eq([{a: 1, b: 2}, {c: {c2: [:d, :e]}}]) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#reject_by_keys" do
|
39
|
+
context "assuming a Hash: {a: 1, b: 2, c: {c2: [:d, :e]}}" do
|
40
|
+
let(:the_hash) { {a: 1, b: 2, c: {c2: [:d, :e]}} }
|
41
|
+
context "and given :a, :d" do
|
42
|
+
subject { the_hash.reject_by_keys :a, :d }
|
43
|
+
it { is_expected.to eq({b: 2, c: {c2: [:d, :e]}}) }
|
44
|
+
end
|
45
|
+
context "and given :a, :b" do
|
46
|
+
subject { the_hash.reject_by_keys :a, :b }
|
47
|
+
it { is_expected.to eq({c: {c2: [:d, :e]}}) }
|
48
|
+
end
|
49
|
+
context "and given :b, :c" do
|
50
|
+
subject { the_hash.reject_by_keys :b, :c }
|
51
|
+
it { is_expected.to eq({a: 1}) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#reject_by_values" do
|
57
|
+
context "assuming a Hash: {a: 1, b: 2, c: {c2: [:d, :e]}}" do
|
58
|
+
let(:the_hash) { {a: 1, b: 2, c: {c2: [:d, :e]}} }
|
59
|
+
context "and given 1, 2" do
|
60
|
+
subject { the_hash.reject_by_values 1, 2 }
|
61
|
+
it { is_expected.to eq({c: {c2: [:d, :e]}}) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
10
66
|
describe "#select_by_keys" do
|
11
67
|
context "assuming a Hash: {a: 1, b: 2, c: {c2: [:d, :e]}}" do
|
12
68
|
let(:the_hash) { {a: 1, b: 2, c: {c2: [:d, :e]}} }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_selectors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin C. Baird
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|