pluckit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab364fcad0f735ae899cd58285bedc88d04c4586
4
- data.tar.gz: a61477d6eb298051c79f43797b3ab4d556479f1f
3
+ metadata.gz: 7c06dc75e5f426dc4ad79cfab2c4d1728c29fc7b
4
+ data.tar.gz: 11c8dfcdb0b4a23aeecc091aa2e1caaa3dde37cd
5
5
  SHA512:
6
- metadata.gz: ac883f33d3cb65eaccae40d1a1662367b9d785ed1eb87c075288517928c234d2a3e7ad96f8f595fed9fbc23364c5876a668ac616295ca767d1b6016a51161610
7
- data.tar.gz: bf29eba3a2feeed14c17af96c39976038da4a4b8ce11794a20b7d5d3395b1b70cf2f4988c56122d76887e50e04c313458469d4dde6191534825a7739ec004a08
6
+ metadata.gz: 57943971842d5c0b76f0c14716d41040247e3de561e08f17b1634e08c3a648c250b75ec3a197a96a7b9564f06d6b05f2ae39633728ba593567bbb0ae18b382a9
7
+ data.tar.gz: c1433c1310c53811469c1b301b32a8375bacd150dc9b36debaa66fd0933abeb96a6c47507c4b912edfc55aa5f9db91ae38a090bb834c7d6bf8a708ace72f71e1
data/lib/pluckit.rb CHANGED
@@ -1,16 +1,10 @@
1
1
  module PluckIt
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
 
4
4
  class << self
5
5
 
6
6
  def pluck v, handle
7
- if ([Symbol, String].include? handle.class) and v.respond_to? handle
8
- if v.method(handle).arity <= 0
9
- v.send handle
10
- else
11
- v.send handle, v
12
- end
13
- elsif v.is_a? Array
7
+ if v.is_a? Array
14
8
  if handle.is_a? Regexp
15
9
  v.grep handle
16
10
  else
@@ -18,6 +12,8 @@ module PluckIt
18
12
  end
19
13
  elsif v.is_a? Hash
20
14
  v[handle]
15
+ elsif ([Symbol, String].include? handle.class) and v.respond_to? handle
16
+ v.send handle
21
17
  else
22
18
  raise ArgumentError.new "invalid handle: #{handle}, for value #{v}"
23
19
  end
@@ -32,3 +28,11 @@ class Array
32
28
  map {|x| PluckIt.pluck x, handle }
33
29
  end
34
30
  end
31
+
32
+
33
+ class Hash
34
+ def pluck(handle)
35
+ res = values.map {|x| PluckIt.pluck x, handle }
36
+ Hash[keys.zip res]
37
+ end
38
+ end
data/test/test_array.rb CHANGED
@@ -16,16 +16,6 @@ class PluckItArrayTest < Minitest::Test
16
16
  [ 1, 4, 7 ],
17
17
  data.pluck(0)
18
18
  )
19
-
20
- assert_equal(
21
- [ 1, 4, 7 ],
22
- data.pluck(:first)
23
- )
24
-
25
- assert_equal(
26
- [ 1, 4, 7 ],
27
- data.pluck('first')
28
- )
29
19
  end
30
20
 
31
21
 
@@ -69,4 +59,21 @@ class PluckItArrayTest < Minitest::Test
69
59
  end
70
60
 
71
61
 
62
+ class ABC
63
+ attr_accessor :val
64
+ def initialize(v) self.val = v end
65
+ end
66
+
67
+ def test_obj
68
+ assert_equal(
69
+ [ 1, 2, 3 ],
70
+ [
71
+ ABC.new(1),
72
+ ABC.new(2),
73
+ ABC.new(3),
74
+ ].pluck(:val)
75
+ )
76
+ end
77
+
78
+
72
79
  end
data/test/test_hash.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'minitest/autorun'
2
+ require 'pluckit'
3
+
4
+
5
+ class PluckItHashTest < Minitest::Test
6
+
7
+
8
+ def test_basic
9
+ assert_equal(
10
+ {
11
+ a: 1,
12
+ b: 4,
13
+ c: 7,
14
+ },
15
+ {
16
+ a: [ 1, 2, 3 ],
17
+ b: [ 4, 5, 6 ],
18
+ c: [ 7, 8, 9 ],
19
+ }.pluck(0)
20
+ )
21
+
22
+ assert_equal(
23
+ {
24
+ a: 1,
25
+ b: 2,
26
+ c: 3,
27
+ },
28
+ {
29
+ a: { x: 1, y: 2 },
30
+ b: { x: 2, y: 4 },
31
+ c: { x: 3, y: 6 },
32
+ }.pluck(:x)
33
+ )
34
+ end
35
+
36
+
37
+ class ABC
38
+ attr_accessor :val
39
+ def initialize(v) self.val = v end
40
+ end
41
+
42
+ def test_obj
43
+ assert_equal(
44
+ {
45
+ a: 1,
46
+ b: 2,
47
+ c: 3,
48
+ },
49
+ {
50
+ a: ABC.new(1),
51
+ b: ABC.new(2),
52
+ c: ABC.new(3),
53
+ }.pluck(:val)
54
+ )
55
+ end
56
+
57
+
58
+ end
@@ -0,0 +1,71 @@
1
+ require 'minitest/autorun'
2
+ require 'pluckit'
3
+
4
+
5
+ class PluckItTest < Minitest::Test
6
+
7
+
8
+ def test_array
9
+ data = [ 1, 2, 3 ]
10
+
11
+ assert_equal(
12
+ 1,
13
+ PluckIt.pluck(data, 0)
14
+ )
15
+
16
+ assert_equal(
17
+ 2,
18
+ PluckIt.pluck(data, 1)
19
+ )
20
+
21
+ assert_equal(
22
+ [ 1, 2 ],
23
+ PluckIt.pluck(data, 0..1)
24
+ )
25
+
26
+ assert_equal(
27
+ [ 'a', 'ba', 'ca' ],
28
+ PluckIt.pluck(
29
+ [ 'a', 'ba', 'bb', 'bc', 'ca' ],
30
+ /a/
31
+ )
32
+ )
33
+ end
34
+
35
+
36
+ def test_hash
37
+ data = {
38
+ a: 1,
39
+ b: 2,
40
+ c: 3,
41
+ }
42
+
43
+ assert_equal(
44
+ 2,
45
+ PluckIt.pluck(data, :b)
46
+ )
47
+
48
+ assert_nil(
49
+ PluckIt.pluck(data, :z)
50
+ )
51
+ end
52
+
53
+
54
+ class ABC
55
+ def foo() 123 end
56
+ end
57
+
58
+ def test_obj
59
+ assert_equal(
60
+ 123,
61
+ PluckIt.pluck(ABC.new, :foo)
62
+ )
63
+
64
+ assert_equal(
65
+ self.class.const_get(:ABC),
66
+ PluckIt.pluck(ABC.new, :class)
67
+ )
68
+ end
69
+
70
+
71
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluckit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
@@ -46,6 +46,8 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - lib/pluckit.rb
48
48
  - test/test_array.rb
49
+ - test/test_hash.rb
50
+ - test/test_pluck.rb
49
51
  homepage: https://github.com/dpep/pluckit
50
52
  licenses:
51
53
  - MIT
@@ -72,3 +74,5 @@ specification_version: 4
72
74
  summary: PluckIt
73
75
  test_files:
74
76
  - test/test_array.rb
77
+ - test/test_hash.rb
78
+ - test/test_pluck.rb