pluckit 0.1.0 → 0.2.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 +4 -4
- data/lib/pluckit.rb +23 -14
- data/test/test_array.rb +9 -0
- data/test/test_hash.rb +13 -0
- data/test/test_pluck.rb +21 -0
- data/test/test_set.rb +9 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42c6c3073a9907cc8cfc8dfe0fe43e4fe7a60fb5
|
4
|
+
data.tar.gz: 2c978a6bbd3d96e3c040af65cf85e4266f84041c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b18dcf896e35913022655730e469702cacad1c64e2aaffed5f1312edc223a1c735b027cf49ac7a7d19bed7737ca88fbf18120e61bb6bfa27f979051c499c66d
|
7
|
+
data.tar.gz: 4b31395eaaec78888732784450b796885353e3b0b200cac26c3fc5ce510d3a90ab6bedaeb418a67f3699e390065ec94219f97c0c5609bd2a9de5cfc1739f9a70
|
data/lib/pluckit.rb
CHANGED
@@ -1,19 +1,28 @@
|
|
1
1
|
module PluckIt
|
2
|
-
VERSION = '0.
|
2
|
+
VERSION = '0.2.0'
|
3
3
|
|
4
4
|
class << self
|
5
5
|
|
6
|
-
def pluck v,
|
6
|
+
def pluck v, *handles
|
7
|
+
if handles.count > 1
|
8
|
+
handles.map {|h| pluck_single v, h }
|
9
|
+
else
|
10
|
+
pluck_single v, handles.first
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def pluck_single v, handle
|
7
18
|
if v.is_a? Hash
|
8
19
|
v[handle]
|
9
20
|
elsif ([Symbol, String].include? handle.class) and v.respond_to? handle
|
10
21
|
v.send handle
|
11
|
-
elsif
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
v[handle]
|
16
|
-
end
|
22
|
+
elsif handle.is_a? Regexp and v.respond_to? :grep
|
23
|
+
v.grep handle
|
24
|
+
elsif v.respond_to? :[]
|
25
|
+
v[handle]
|
17
26
|
else
|
18
27
|
raise ArgumentError.new "invalid handle: #{handle}, for value #{v}"
|
19
28
|
end
|
@@ -24,27 +33,27 @@ end
|
|
24
33
|
|
25
34
|
|
26
35
|
class Array
|
27
|
-
def pluck
|
36
|
+
def pluck *handles
|
28
37
|
each_with_object(clone.clear) do |val, res|
|
29
|
-
res << PluckIt.pluck(val,
|
38
|
+
res << PluckIt.pluck(val, *handles)
|
30
39
|
end
|
31
40
|
end
|
32
41
|
end
|
33
42
|
|
34
43
|
|
35
44
|
class Hash
|
36
|
-
def pluck
|
45
|
+
def pluck *handles
|
37
46
|
each_with_object(clone.clear) do |(key, val), res|
|
38
|
-
res[key] = PluckIt.pluck(val,
|
47
|
+
res[key] = PluckIt.pluck(val, *handles)
|
39
48
|
end
|
40
49
|
end
|
41
50
|
end
|
42
51
|
|
43
52
|
|
44
53
|
class Set
|
45
|
-
def pluck
|
54
|
+
def pluck *handles
|
46
55
|
each_with_object(clone.clear) do |val, res|
|
47
|
-
res.add PluckIt.pluck(val,
|
56
|
+
res.add PluckIt.pluck(val, *handles)
|
48
57
|
end
|
49
58
|
end
|
50
59
|
end
|
data/test/test_array.rb
CHANGED
data/test/test_hash.rb
CHANGED
@@ -31,6 +31,19 @@ class PluckItHashTest < Minitest::Test
|
|
31
31
|
c: { x: 3, y: 6 },
|
32
32
|
}.pluck(:x)
|
33
33
|
)
|
34
|
+
|
35
|
+
assert_equal(
|
36
|
+
{
|
37
|
+
a: [ 1, 2 ],
|
38
|
+
b: [ 2, 4 ],
|
39
|
+
c: [ 3, 6 ],
|
40
|
+
},
|
41
|
+
{
|
42
|
+
a: { x: 1, y: 2 },
|
43
|
+
b: { x: 2, y: 4 },
|
44
|
+
c: { x: 3, y: 6 },
|
45
|
+
}.pluck(:x, :y)
|
46
|
+
)
|
34
47
|
end
|
35
48
|
|
36
49
|
|
data/test/test_pluck.rb
CHANGED
@@ -40,6 +40,11 @@ class PluckItTest < Minitest::Test
|
|
40
40
|
/a/
|
41
41
|
)
|
42
42
|
)
|
43
|
+
|
44
|
+
assert_equal(
|
45
|
+
[ 1, 2 ],
|
46
|
+
PluckIt.pluck(data, 0, 1)
|
47
|
+
)
|
43
48
|
end
|
44
49
|
|
45
50
|
|
@@ -62,11 +67,17 @@ class PluckItTest < Minitest::Test
|
|
62
67
|
assert_nil(
|
63
68
|
PluckIt.pluck(data, :count)
|
64
69
|
)
|
70
|
+
|
71
|
+
assert_equal(
|
72
|
+
[ 1, 2 ],
|
73
|
+
PluckIt.pluck(data, :a, :b)
|
74
|
+
)
|
65
75
|
end
|
66
76
|
|
67
77
|
|
68
78
|
class ABC
|
69
79
|
def foo() 123 end
|
80
|
+
def bar() 456 end
|
70
81
|
end
|
71
82
|
|
72
83
|
def test_obj
|
@@ -79,6 +90,11 @@ class PluckItTest < Minitest::Test
|
|
79
90
|
self.class.const_get(:ABC),
|
80
91
|
PluckIt.pluck(ABC.new, :class)
|
81
92
|
)
|
93
|
+
|
94
|
+
assert_equal(
|
95
|
+
[ 123, 456 ],
|
96
|
+
PluckIt.pluck(ABC.new, :foo, :bar)
|
97
|
+
)
|
82
98
|
end
|
83
99
|
|
84
100
|
|
@@ -94,6 +110,11 @@ class PluckItTest < Minitest::Test
|
|
94
110
|
3,
|
95
111
|
PluckIt.pluck(data, :count)
|
96
112
|
)
|
113
|
+
|
114
|
+
assert_equal(
|
115
|
+
[ 1, 3 ],
|
116
|
+
PluckIt.pluck(data, :first, :count)
|
117
|
+
)
|
97
118
|
end
|
98
119
|
|
99
120
|
|
data/test/test_set.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pluckit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pepper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
69
|
version: '0'
|
70
70
|
requirements: []
|
71
71
|
rubyforge_project:
|
72
|
-
rubygems_version: 2.6.
|
72
|
+
rubygems_version: 2.6.11
|
73
73
|
signing_key:
|
74
74
|
specification_version: 4
|
75
75
|
summary: PluckIt
|