rekey 4.0.0 → 4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9fd354b9d3c1d9586254cada81be1e6bb9727a4a
4
- data.tar.gz: 35a6a2235d235543d2ce42cd483f98ba8ea3da38
2
+ SHA256:
3
+ metadata.gz: 2fa7a26ea0c5de294ea7b5b87c72d9bfb1dfe60bd4aed34068712d0e751dab4d
4
+ data.tar.gz: d4021c41d1147df578cb411224c53adcef870b1484e45c432c83f9312b81a089
5
5
  SHA512:
6
- metadata.gz: f3dba9ce015ac3bd8cb5c6b0e9c1f887c2127453649e2d0357e52d710ddc67970a8ae2747d3b1686198ed29533b66c3445df3ef227d69b39c6666c075b51301c
7
- data.tar.gz: b9b139e019b4587f06dd0c1a1fed7e7fb9e7bd78c72af91cdb2202a8015612c1f268e10b121cfcb23e12ac8160e2b10f83368b55cf6d6e400cb8048bbc81e62e
6
+ metadata.gz: af81ef145ff59e27ac19c720f44f4976c69df570c2d19d7b711f134906df651c8e202798ab9429644b59dba4e4f47d0cd367db90a07b8838a4540d522cfd8a19
7
+ data.tar.gz: '0986dbde9b4e19dcc4f4b07ce619396a335b990258107ce0b5314844aa0a2e5d24fe4fd3d43379e9fb7af2fd619a38d6587a8baf708cd4db2ecbcdd3d56a6d52'
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ ### 4.2.0 (2026-11-03)
2
+ - drop Ruby 3.0 and 3.1 (end of life); requires Ruby >= 3.2
3
+ - fix: a block with two required args and a splat (`|k, v, *rest|`) gets the key and value instead of the value as `k`
4
+ - fix: a `false` handle passed together with a block raises ArgumentError instead of being ignored
5
+ - feature: a callable (lambda, proc, Method) works as a key or value handle: `users.rekey(:id, ->(u) { u.name.upcase })`. Requires pluckit >= 1.3
6
+
7
+ ### 4.1.0 (2026-04-10)
8
+ - ruby version / gem updates
9
+
10
+ ### 4.0.0 (2018-10-08)
11
+ - 7a49250 better monkey patching tests
12
+ - 9d94818 extend self
13
+ - 574461c clean up arity handling, expand tests
14
+ - 4b85ea6 require a key handle or block...for a nil key operation, use PluckIt
15
+ - d6cba35 fix unit test requires
16
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Daniel Pepper
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,118 @@
1
+ Rekey
2
+ ======
3
+ ![Gem](https://img.shields.io/gem/dt/rekey?style=plastic)
4
+ [![codecov](https://codecov.io/gh/dpep/rekey_rb/branch/main/graph/badge.svg?token=Z6W48XUEQD)](https://codecov.io/gh/dpep/rekey_rb)
5
+
6
+ Turn an Enumerable into a Hash, with derived keys and values.
7
+
8
+ ```ruby
9
+ require "rekey"
10
+
11
+ rows = [
12
+ { id: 1, name: "alice" },
13
+ { id: 2, name: "bob" },
14
+ ]
15
+
16
+ rows.rekey(:id)
17
+ # => {1 => {id: 1, name: "alice"}, 2 => {id: 2, name: "bob"}}
18
+
19
+ rows.rekey(:id, :name)
20
+ # => {1 => "alice", 2 => "bob"}
21
+ ```
22
+
23
+ #### Install
24
+ ```gem install rekey```
25
+
26
+
27
+ #### Handles
28
+ `rekey(key_handle, value_handle = nil)`. Without a value handle, each element is its own value.
29
+
30
+ [pluckit](https://github.com/dpep/pluckit_rb) resolves handles, so a handle can be a Hash key, a method name, an array index, a Range, or a Regexp:
31
+
32
+ ```ruby
33
+ [[1, "a"], [2, "b"]].rekey(0, 1)
34
+ # => {1 => "a", 2 => "b"}
35
+
36
+ %w[apple banana].rekey(0..2, :length)
37
+ # => {"app" => 5, "ban" => 6}
38
+
39
+ %w[apple banana].rekey(/^./)
40
+ # => {"a" => "apple", "b" => "banana"}
41
+ ```
42
+
43
+ A callable (lambda, proc, Method) works as either handle:
44
+
45
+ ```ruby
46
+ rows.rekey(:id, ->(r) { r[:name].upcase })
47
+ # => {1 => "ALICE", 2 => "BOB"}
48
+
49
+ [1, 2].rekey(:itself, 10.method(:*))
50
+ # => {1 => 10, 2 => 20}
51
+ ```
52
+
53
+
54
+ #### Blocks
55
+ A block computes the key; the element stays the value.
56
+
57
+ ```ruby
58
+ [2, 4, 6].rekey { |v| v / 2 }
59
+ # => {1 => 2, 2 => 4, 3 => 6}
60
+ ```
61
+
62
+ Pass handles or a block, not both. Mixing them raises ArgumentError.
63
+
64
+
65
+ #### Hash input
66
+ Handles and one-parameter blocks look at the values. The outer keys are dropped.
67
+
68
+ ```ruby
69
+ users = {
70
+ x: { id: 1, name: "alice" },
71
+ y: { id: 2, name: "bob" },
72
+ }
73
+
74
+ users.rekey(:id, :name)
75
+ # => {1 => "alice", 2 => "bob"}
76
+ ```
77
+
78
+ A block with two required parameters gets the key and value:
79
+
80
+ ```ruby
81
+ { a: 1 }.rekey { |k, v| "#{k}#{v}" }
82
+ # => {"a1" => 1}
83
+ ```
84
+
85
+ On anything other than a Hash, a two-parameter block raises ArgumentError.
86
+
87
+
88
+ #### Duplicate keys
89
+ The last one wins, as with `to_h` and `index_by`.
90
+
91
+ ```ruby
92
+ [{ id: 1, v: "a" }, { id: 1, v: "b" }].rekey(:id, :v)
93
+ # => {1 => "b"}
94
+ ```
95
+
96
+ Watch for a handle that misses. A typo, or `"id"` on symbol-keyed hashes, gives `nil` for every row, so the whole result collapses to one entry:
97
+
98
+ ```ruby
99
+ rows.rekey("id")
100
+ # => {nil => {id: 2, name: "bob"}}
101
+ ```
102
+
103
+
104
+ #### Without the monkey patch
105
+ `require "rekey"` adds `#rekey` to every Enumerable. To skip the global patch, load the module alone and use the refinement, or call it directly:
106
+
107
+ ```ruby
108
+ require "rekey/rekey"
109
+
110
+ using Rekey
111
+ rows.rekey(:id)
112
+
113
+ # or
114
+ Rekey.rekey(rows, :id)
115
+ ```
116
+
117
+
118
+ ----
data/lib/rekey/rekey.rb CHANGED
@@ -1,11 +1,18 @@
1
- require 'pluckit/pluck'
1
+ require "pluckit/pluck"
2
+ require "rekey/version"
2
3
 
3
4
 
4
5
  module Rekey
5
6
  extend self
6
7
 
8
+ refine Enumerable do
9
+ def rekey(key_handle = nil, value_handle = nil, &block)
10
+ Rekey.rekey(self, key_handle, value_handle, &block)
11
+ end
12
+ end
13
+
7
14
  def rekey(enumerable, key_handle = nil, value_handle = nil, &block)
8
- validate_input key_handle, value_handle, &block
15
+ validate_input!(key_handle, value_handle, &block)
9
16
 
10
17
  key_value_fn = if enumerable.respond_to?(:keys)
11
18
  proc {|k, v| [k, v]}
@@ -15,29 +22,28 @@ module Rekey
15
22
 
16
23
  # rekey input
17
24
  enumerable.each_with_object({}) do |*args, res|
18
- key, value = key_value_fn.call *args
25
+ key, value = key_value_fn.call(*args)
19
26
  new_key = key
20
27
  new_value = value
21
28
 
22
29
  if block
23
- if block.arity < 2
30
+ if required_args(block) < 2
24
31
  # block only wants value
25
- # arity -1 is a function pointer, eg. &:to_i
26
- new_key = block.call value
32
+ new_key = block.call(value)
27
33
  else
28
34
  # block wants both key and value
29
35
 
30
36
  if key_value_fn.arity != 2
31
37
  raise ArgumentError.new(
32
- 'rekey block requests key/value pair but only value available'
38
+ "rekey block requests key/value pair but only value available"
33
39
  )
34
40
  end
35
41
 
36
- new_key = block.call key, value
42
+ new_key = block.call(key, value)
37
43
  end
38
44
  else
39
- new_key = PluckIt.pluckit value, key_handle
40
- new_value = PluckIt.pluckit value, value_handle if value_handle
45
+ new_key = PluckIt.pluckit(value, key_handle)
46
+ new_value = PluckIt.pluckit(value, value_handle) if value_handle
41
47
  end
42
48
 
43
49
  # collect results
@@ -48,15 +54,18 @@ module Rekey
48
54
 
49
55
  private
50
56
 
51
- def validate_input key_handle, value_handle, &block
57
+ # a negative arity means -(required + 1): optional args or a splat follow
58
+ def required_args(block)
59
+ block.arity < 0 ? -block.arity - 1 : block.arity
60
+ end
61
+
62
+ def validate_input!(key_handle, value_handle, &block)
52
63
  if block
53
- if (key_handle or value_handle)
54
- raise ArgumentError.new 'expected key / value handles, *or* block'
64
+ unless key_handle.nil? && value_handle.nil?
65
+ raise ArgumentError, "expected key / value handles, *or* block"
55
66
  end
56
67
  elsif key_handle.nil?
57
- raise ArgumentError.new 'key handle or block required'
68
+ raise ArgumentError, "key handle or block required"
58
69
  end
59
70
  end
60
-
61
-
62
71
  end
@@ -0,0 +1,3 @@
1
+ module Rekey
2
+ VERSION = "4.2.0"
3
+ end
data/lib/rekey.rb CHANGED
@@ -1,13 +1,7 @@
1
- require_relative 'rekey/rekey'
2
-
3
-
4
- module Rekey
5
- VERSION = '4.0.0'
6
- end
7
-
1
+ require_relative "rekey/rekey"
8
2
 
9
3
  module Enumerable
10
4
  def rekey(key_handle = nil, value_handle = nil, &block)
11
- Rekey.rekey self, key_handle, value_handle, &block
5
+ Rekey.rekey(self, key_handle, value_handle, &block)
12
6
  end
13
7
  end
data/rekey.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ require_relative "lib/rekey/version"
2
+
3
+ Gem::Specification.new do |s|
4
+ s.authors = ["Daniel Pepper"]
5
+ s.description = "Reformat Enumerables into Hashes, using derived keys / values"
6
+ s.files = `git ls-files * ':!:spec'`.split("\n")
7
+ s.homepage = "https://github.com/dpep/rekey_rb"
8
+ s.license = "MIT"
9
+ s.name = "rekey"
10
+ s.summary = s.description
11
+ s.version = Rekey::VERSION
12
+
13
+ s.metadata = {
14
+ "changelog_uri" => "#{s.homepage}/blob/main/CHANGELOG.md",
15
+ "rubygems_mfa_required" => "true",
16
+ "source_code_uri" => s.homepage,
17
+ }
18
+
19
+ s.required_ruby_version = ">= 3.2"
20
+
21
+ s.add_dependency "pluckit", ">= 1.3"
22
+
23
+ s.add_development_dependency "debug"
24
+ s.add_development_dependency "rspec"
25
+ s.add_development_dependency "simplecov"
26
+ end
metadata CHANGED
@@ -1,79 +1,90 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rekey
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2018-10-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: pluckit
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '1.1'
18
+ version: '1.3'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '1.1'
25
+ version: '1.3'
27
26
  - !ruby/object:Gem::Dependency
28
- name: minitest
27
+ name: debug
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - "~>"
30
+ - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '5'
32
+ version: '0'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
- - - "~>"
37
+ - - ">="
39
38
  - !ruby/object:Gem::Version
40
- version: '5'
39
+ version: '0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: rake
41
+ name: rspec
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
- - - "~>"
44
+ - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: '10'
46
+ version: '0'
48
47
  type: :development
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
- - - "~>"
51
+ - - ">="
53
52
  - !ruby/object:Gem::Version
54
- version: '10'
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: simplecov
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
55
68
  description: Reformat Enumerables into Hashes, using derived keys / values
56
- email:
57
69
  executables: []
58
70
  extensions: []
59
71
  extra_rdoc_files: []
60
72
  files:
73
+ - CHANGELOG.md
74
+ - Gemfile
75
+ - LICENSE.txt
76
+ - README.md
61
77
  - lib/rekey.rb
62
78
  - lib/rekey/rekey.rb
63
- - test/test_array_block.rb
64
- - test/test_array_handlers.rb
65
- - test/test_empty_input.rb
66
- - test/test_hash_block.rb
67
- - test/test_hash_handlers.rb
68
- - test/test_invalid_input.rb
69
- - test/test_monkey_patching.rb
70
- - test/test_range.rb
71
- - test/test_regexp.rb
72
- homepage: https://github.com/dpep/rb_rekey
79
+ - lib/rekey/version.rb
80
+ - rekey.gemspec
81
+ homepage: https://github.com/dpep/rekey_rb
73
82
  licenses:
74
83
  - MIT
75
- metadata: {}
76
- post_install_message:
84
+ metadata:
85
+ changelog_uri: https://github.com/dpep/rekey_rb/blob/main/CHANGELOG.md
86
+ rubygems_mfa_required: 'true'
87
+ source_code_uri: https://github.com/dpep/rekey_rb
77
88
  rdoc_options: []
78
89
  require_paths:
79
90
  - lib
@@ -81,25 +92,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
92
  requirements:
82
93
  - - ">="
83
94
  - !ruby/object:Gem::Version
84
- version: '0'
95
+ version: '3.2'
85
96
  required_rubygems_version: !ruby/object:Gem::Requirement
86
97
  requirements:
87
98
  - - ">="
88
99
  - !ruby/object:Gem::Version
89
100
  version: '0'
90
101
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.6.11
93
- signing_key:
102
+ rubygems_version: 4.0.16
94
103
  specification_version: 4
95
- summary: Rekey
96
- test_files:
97
- - test/test_array_block.rb
98
- - test/test_array_handlers.rb
99
- - test/test_empty_input.rb
100
- - test/test_hash_block.rb
101
- - test/test_hash_handlers.rb
102
- - test/test_invalid_input.rb
103
- - test/test_monkey_patching.rb
104
- - test/test_range.rb
105
- - test/test_regexp.rb
104
+ summary: Reformat Enumerables into Hashes, using derived keys / values
105
+ test_files: []
@@ -1,55 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyArrayBlockTest < Minitest::Test
6
-
7
- def setup
8
- @input = [*1..3]
9
- end
10
-
11
- def test_all
12
- assert_equal({
13
- 1 => 1,
14
- 2 => 2,
15
- 3 => 3,
16
- },
17
- @input.rekey {|v| v }
18
- )
19
-
20
- assert_equal({
21
- 1 => 1,
22
- 2 => 2,
23
- 3 => 3,
24
- },
25
- @input.rekey(&:itself)
26
- )
27
-
28
- assert_equal({
29
- 2 => 1,
30
- 4 => 2,
31
- 6 => 3,
32
- },
33
- @input.rekey {|v| v * 2 }
34
- )
35
-
36
- assert_equal({
37
- '1' => 1,
38
- '2' => 2,
39
- '3' => 3,
40
- },
41
- @input.rekey {|v| v.to_s }
42
- )
43
-
44
- assert_equal(
45
- { nil => 3 },
46
- @input.rekey {|v| nil }
47
- )
48
-
49
- assert_equal(
50
- { 123 => 3 },
51
- @input.rekey { 123 }
52
- )
53
- end
54
-
55
- end
@@ -1,129 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyArrayHandlersTest < Minitest::Test
6
-
7
- def setup
8
- @input = [*1..3]
9
- end
10
-
11
-
12
- def test_keys
13
- assert_equal({
14
- '1' => 1,
15
- '2' => 2,
16
- '3' => 3,
17
- },
18
- @input.rekey(:to_s)
19
- )
20
-
21
- assert_equal({
22
- '1' => 1,
23
- '2' => 2,
24
- '3' => 3,
25
- },
26
- @input.rekey('to_s')
27
- )
28
-
29
- assert_equal({
30
- 1.0 => 1,
31
- 2.0 => 2,
32
- 3.0 => 3,
33
- },
34
- @input.rekey(:to_f)
35
- )
36
-
37
- assert_equal({
38
- 1.0 => 1,
39
- 2.0 => 2,
40
- 3.0 => 3,
41
- },
42
- @input.rekey(&:to_f)
43
- )
44
- end
45
-
46
-
47
- def test_both
48
- assert_equal({
49
- 1 => 1,
50
- 2 => 2,
51
- 3 => 3,
52
- },
53
- @input.rekey(:to_i, :to_i)
54
- )
55
-
56
- assert_equal({
57
- '1' => 1.0,
58
- '2' => 2.0,
59
- '3' => 3.0,
60
- },
61
- @input.rekey(:to_s, :to_f)
62
- )
63
-
64
- assert_equal({
65
- '1' => 1.0,
66
- '2' => 2.0,
67
- '3' => 3.0,
68
- },
69
- @input.rekey('to_s', 'to_f')
70
- )
71
- end
72
-
73
-
74
- def test_array_indices
75
- array_data = [
76
- [ 1, 2, 3 ],
77
- [ 4, 5, 6 ],
78
- [ 7, 8, 9 ],
79
- ]
80
-
81
- assert_equal({
82
- 1 => 3,
83
- 4 => 6,
84
- 7 => 9,
85
- },
86
- array_data.rekey(0, 2)
87
- )
88
-
89
- array_data = [
90
- [ 1 ],
91
- [ 2, 1 ],
92
- [ 3, 2, 1 ],
93
- ]
94
- assert_equal({
95
- 1 => 1,
96
- 2 => 2,
97
- 3 => 3,
98
- },
99
- array_data.rekey(0, :count)
100
- )
101
- end
102
-
103
-
104
- def test_hash_indices
105
- data = [
106
- { i: 1, v: 'a' },
107
- { i: 2, v: 'b' },
108
- { i: 3, v: 'c' },
109
- ]
110
-
111
- assert_equal({
112
- 1 => data[0],
113
- 2 => data[1],
114
- 3 => data[2],
115
- },
116
- data.rekey(:i)
117
- )
118
-
119
- assert_equal({
120
- 1 => 'a',
121
- 2 => 'b',
122
- 3 => 'c',
123
- },
124
- data.rekey(:i, :v)
125
- )
126
- end
127
-
128
-
129
- end
@@ -1,25 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'set'
3
- require_relative '../lib/rekey'
4
-
5
-
6
- class RekeyEmptyInputTest < Minitest::Test
7
-
8
- def test_all
9
- assert_equal(
10
- {},
11
- [].rekey(:k, :v)
12
- )
13
-
14
- assert_equal(
15
- {},
16
- {}.rekey(:k, :v)
17
- )
18
-
19
- assert_equal(
20
- {},
21
- Set.new.rekey(:k, :v)
22
- )
23
- end
24
-
25
- end
@@ -1,74 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyHashBlockTest < Minitest::Test
6
- def setup
7
- @input = {
8
- a: 1,
9
- b: 2,
10
- c: 3,
11
- }
12
- end
13
-
14
- def test_arity1_keys
15
- assert_equal({
16
- 1 => 1,
17
- 2 => 2,
18
- 3 => 3,
19
- },
20
- @input.rekey {|v| v }
21
- )
22
-
23
- assert_equal({
24
- '1' => 1,
25
- '2' => 2,
26
- '3' => 3,
27
- },
28
- @input.rekey {|v| v.to_s }
29
- )
30
-
31
- # it can use Arrays as Hash keys...if you really want to
32
- assert_equal({
33
- [1] => 1,
34
- [2] => 2,
35
- [3] => 3,
36
- },
37
- @input.rekey {|v| [v] }
38
- )
39
- end
40
-
41
- def test_arity2_keys
42
- assert_equal({
43
- 1 => 1,
44
- 2 => 2,
45
- 3 => 3,
46
- },
47
- @input.rekey {|k, v| v }
48
- )
49
-
50
- assert_equal({
51
- a: 1,
52
- b: 2,
53
- c: 3,
54
- },
55
- @input.rekey {|k, v| k }
56
- )
57
-
58
- assert_equal({
59
- 'aa' => 1,
60
- 'bb' => 2,
61
- 'cc' => 3,
62
- },
63
- @input.rekey {|k, v| k.to_s * 2 }
64
- )
65
- end
66
-
67
- def test_nil_key
68
- assert_equal(
69
- { nil => 3 },
70
- @input.rekey {|k, v| nil }
71
- )
72
- end
73
-
74
- end
@@ -1,112 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyHashHandlersTest < Minitest::Test
6
-
7
- def setup
8
- @input = {
9
- a: 1,
10
- b: 2,
11
- c: 3,
12
- }
13
- end
14
-
15
-
16
- def test_keys
17
- assert_equal({
18
- '1' => 1,
19
- '2' => 2,
20
- '3' => 3,
21
- },
22
- @input.rekey(:to_s)
23
- )
24
-
25
- assert_equal({
26
- 1.0 => 1,
27
- 2.0 => 2,
28
- 3.0 => 3,
29
- },
30
- @input.rekey(:to_f)
31
- )
32
- end
33
-
34
-
35
- def test_both
36
- assert_equal({
37
- 1 => 1,
38
- 2 => 2,
39
- 3 => 3,
40
- },
41
- @input.rekey(:to_i, :to_i)
42
- )
43
-
44
- assert_equal({
45
- '1' => 1.0,
46
- '2' => 2.0,
47
- '3' => 3.0,
48
- },
49
- @input.rekey(:to_s, :to_i)
50
- )
51
-
52
- assert_equal({
53
- '1' => 1.0,
54
- '2' => 2.0,
55
- '3' => 3.0,
56
- },
57
- @input.rekey('to_s', 'to_i')
58
- )
59
- end
60
-
61
-
62
- def test_hash_array
63
- data = {
64
- a: [ 1, 2, 3 ],
65
- b: [ 4, 5, 6 ],
66
- c: [ 7, 8, 9 ],
67
- }
68
-
69
- assert_equal({
70
- 1 => 2,
71
- 4 => 5,
72
- 7 => 8,
73
- },
74
- data.rekey(0, 1)
75
- )
76
-
77
- assert_equal({
78
- 1 => 3,
79
- 4 => 6,
80
- 7 => 9,
81
- },
82
- data.rekey(:min, :max)
83
- )
84
- end
85
-
86
-
87
- def test_hash_hash
88
- data = {
89
- a: { i: 1, v: 2 },
90
- b: { i: 2, v: 4 },
91
- c: { i: 3, v: 6 },
92
- }
93
-
94
- assert_equal({
95
- 1 => { i: 1, v: 2 },
96
- 2 => { i: 2, v: 4 },
97
- 3 => { i: 3, v: 6 },
98
- },
99
- data.rekey(:i)
100
- )
101
-
102
- assert_equal({
103
- 1 => 2,
104
- 2 => 4,
105
- 3 => 6,
106
- },
107
- data.rekey(:i, :v)
108
- )
109
-
110
- end
111
-
112
- end
@@ -1,50 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyInvalidInputTest < Minitest::Test
6
- def setup
7
- @input = [*1..3]
8
- end
9
-
10
-
11
- def test_nil
12
- assert_raises ArgumentError do
13
- @input.rekey
14
- end
15
-
16
- assert_raises ArgumentError do
17
- @input.rekey nil
18
- end
19
-
20
- assert_raises ArgumentError do
21
- @input.rekey nil, :v
22
- end
23
-
24
- # unfortunately, these still pass
25
- @input.rekey(nil) {|v| v}
26
- @input.rekey(nil, nil) {|v| v}
27
- end
28
-
29
-
30
- def test_handles_and_block
31
- assert_raises ArgumentError do
32
- @input.rekey(:k) {|k| 1}
33
- end
34
-
35
- assert_raises ArgumentError do
36
- @input.rekey(:k, :v) {|k| 1}
37
- end
38
- end
39
-
40
-
41
- def test_block_underflow
42
- # block requesting key and value, but @input
43
- # doesn't have keys
44
- assert_raises ArgumentError do
45
- @input.rekey {|k, v| 1}
46
- end
47
- end
48
-
49
-
50
- end
@@ -1,44 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'set'
3
- require_relative '../lib/rekey/rekey'
4
-
5
-
6
- class MonkeyPatchingTest < Minitest::Test
7
-
8
- def test_not_installed
9
- if defined? Rekey::VERSION
10
- # entire library was loaded, so these tests are invalid.
11
- # this happens when run through `rake`
12
- skip
13
- end
14
-
15
- # `require 'rekey/rekey'` should load Rekey
16
- assert Rekey
17
-
18
- # but no monkey patching
19
- assert_raises NoMethodError do
20
- [ 1, 2, 3 ].rekey 0
21
- end
22
-
23
- assert_raises NoMethodError do
24
- { a: 1 }.rekey 0
25
- end
26
-
27
- assert_raises NoMethodError do
28
- Set.new([ 1, 2, 3 ]).rekey 0
29
- end
30
-
31
- puts 'yay, no monkey patching'
32
- end
33
-
34
-
35
- def test_pluckit
36
- assert PluckIt
37
-
38
- assert_raises NoMethodError do
39
- [ 1, 2, 3 ].pluck 0
40
- end
41
- end
42
-
43
-
44
- end
data/test/test_range.rb DELETED
@@ -1,30 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyRangeTest < Minitest::Test
6
-
7
- def setup
8
- @input = [
9
- [ 1, 2, 3 ],
10
- [ 4, 5, 6 ],
11
- ]
12
- end
13
-
14
- def test_stuff
15
- assert_equal({
16
- [ 1, 2 ] => [ 1, 2, 3 ],
17
- [ 4, 5 ] => [ 4, 5, 6 ],
18
- },
19
- @input.rekey(0..1)
20
- )
21
-
22
- assert_equal({
23
- 3 => [ 1, 2 ],
24
- 6 => [ 4, 5 ],
25
- },
26
- @input.rekey(2, 0..1)
27
- )
28
- end
29
-
30
- end
data/test/test_regexp.rb DELETED
@@ -1,30 +0,0 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/rekey'
3
-
4
-
5
- class RekeyRegexpTest < Minitest::Test
6
-
7
- def setup
8
- @input = [
9
- [ 'a', 'aa', 'b', 'ba', 'dd' ],
10
- [ 'b', 'c', 'bc', 'de' ],
11
- ]
12
- end
13
-
14
- def test_stuff
15
- assert_equal({
16
- 'a' => ['a', 'aa', 'ba'],
17
- 'b' => [],
18
- },
19
- @input.rekey(0, /a/)
20
- )
21
-
22
- assert_equal({
23
- ['dd'] => ['b', 'ba'],
24
- ['de'] => ['b', 'bc'],
25
- },
26
- @input.rekey(/d/, /b/)
27
- )
28
- end
29
-
30
- end