rekey 4.0.0 → 4.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 +5 -5
- data/CHANGELOG.md +10 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +52 -0
- data/lib/rekey/rekey.rb +19 -14
- data/lib/rekey/version.rb +3 -0
- data/lib/rekey.rb +2 -8
- data/rekey.gemspec +23 -0
- metadata +40 -43
- data/test/test_array_block.rb +0 -55
- data/test/test_array_handlers.rb +0 -129
- data/test/test_empty_input.rb +0 -25
- data/test/test_hash_block.rb +0 -74
- data/test/test_hash_handlers.rb +0 -112
- data/test/test_invalid_input.rb +0 -50
- data/test/test_monkey_patching.rb +0 -44
- data/test/test_range.rb +0 -30
- data/test/test_regexp.rb +0 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: fa46e960e7f7282b323629b69f26868f9eb59f09752128afc01858fcd33e74b2
|
|
4
|
+
data.tar.gz: 6bdf503d29bdfce9e99a43a0ad6b418c1d3905b5c512a318e0b7bcab2f60b48d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dac8e9d6262d58ab957ca9175cbc081314612519776737cacce78f89580c65e0aa72393e6d79a0f43a230fa0dbde16b470a5292efabc98e55dd8156362d4f5b8
|
|
7
|
+
data.tar.gz: 01ed776768fed346f854f3ece0a4af3cf1a2cede9c13d390f5528a2af51f8e89b2125005b15fff65ccda8f5a5dc926b5a2c17c75908b87918f77cdd5fd293201
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
### 4.1.0 (2026-04-10)
|
|
2
|
+
- ruby version / gem updates
|
|
3
|
+
|
|
4
|
+
### 4.0.0 (2018-10-08)
|
|
5
|
+
- 7a49250 better monkey patching tests
|
|
6
|
+
- 9d94818 extend self
|
|
7
|
+
- 574461c clean up arity handling, expand tests
|
|
8
|
+
- 4b85ea6 require a key handle or block...for a nil key operation, use PluckIt
|
|
9
|
+
- d6cba35 fix unit test requires
|
|
10
|
+
|
data/Gemfile
ADDED
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,52 @@
|
|
|
1
|
+
Rekey
|
|
2
|
+
======
|
|
3
|
+

|
|
4
|
+
[](https://codecov.io/gh/dpep/rekey_rb)
|
|
5
|
+
|
|
6
|
+
Reformat Enumerables into Hashes, using derived keys / values
|
|
7
|
+
|
|
8
|
+
#### Install
|
|
9
|
+
```gem install rekey```
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#### Usage
|
|
13
|
+
```ruby
|
|
14
|
+
require "rekey"
|
|
15
|
+
|
|
16
|
+
# key a list of records by id
|
|
17
|
+
[
|
|
18
|
+
{ id: 1, name: "alice", age: 30},
|
|
19
|
+
{ id: 2, name: "bob", age: 24},
|
|
20
|
+
{ id: 3, name: "charlie", age: 88},
|
|
21
|
+
].rekey :id
|
|
22
|
+
=> {
|
|
23
|
+
1 => { id: 1, name: "alice", age: 30},
|
|
24
|
+
2 => { id: 2, name: "bob", age: 24},
|
|
25
|
+
3 => { id: 3, name: "charlie", age: 88},
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# create an id => value map from a list of records
|
|
30
|
+
[
|
|
31
|
+
{ id: 1, name: "alice", age: 30},
|
|
32
|
+
{ id: 2, name: "bob", age: 24},
|
|
33
|
+
{ id: 3, name: "charlie", age: 88},
|
|
34
|
+
].rekey :id, :name
|
|
35
|
+
=> {
|
|
36
|
+
1 => "alice",
|
|
37
|
+
2 => "bob",
|
|
38
|
+
3 => "charlie"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# or use blocks
|
|
43
|
+
[ 2, 4, 6 ].rekey {|v| v / 2}
|
|
44
|
+
=> {
|
|
45
|
+
1 => 2,
|
|
46
|
+
2 => 4,
|
|
47
|
+
3 => 6
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
----
|
data/lib/rekey/rekey.rb
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
require
|
|
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
|
|
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,7 +22,7 @@ module Rekey
|
|
|
15
22
|
|
|
16
23
|
# rekey input
|
|
17
24
|
enumerable.each_with_object({}) do |*args, res|
|
|
18
|
-
key, value = key_value_fn.call
|
|
25
|
+
key, value = key_value_fn.call(*args)
|
|
19
26
|
new_key = key
|
|
20
27
|
new_value = value
|
|
21
28
|
|
|
@@ -23,21 +30,21 @@ module Rekey
|
|
|
23
30
|
if block.arity < 2
|
|
24
31
|
# block only wants value
|
|
25
32
|
# arity -1 is a function pointer, eg. &:to_i
|
|
26
|
-
new_key = block.call
|
|
33
|
+
new_key = block.call(value)
|
|
27
34
|
else
|
|
28
35
|
# block wants both key and value
|
|
29
36
|
|
|
30
37
|
if key_value_fn.arity != 2
|
|
31
38
|
raise ArgumentError.new(
|
|
32
|
-
|
|
39
|
+
"rekey block requests key/value pair but only value available"
|
|
33
40
|
)
|
|
34
41
|
end
|
|
35
42
|
|
|
36
|
-
new_key = block.call
|
|
43
|
+
new_key = block.call(key, value)
|
|
37
44
|
end
|
|
38
45
|
else
|
|
39
|
-
new_key = PluckIt.pluckit
|
|
40
|
-
new_value = PluckIt.pluckit
|
|
46
|
+
new_key = PluckIt.pluckit(value, key_handle)
|
|
47
|
+
new_value = PluckIt.pluckit(value, value_handle) if value_handle
|
|
41
48
|
end
|
|
42
49
|
|
|
43
50
|
# collect results
|
|
@@ -48,15 +55,13 @@ module Rekey
|
|
|
48
55
|
|
|
49
56
|
private
|
|
50
57
|
|
|
51
|
-
def validate_input
|
|
58
|
+
def validate_input!(key_handle, value_handle, &block)
|
|
52
59
|
if block
|
|
53
|
-
if (key_handle
|
|
54
|
-
raise ArgumentError
|
|
60
|
+
if (key_handle || value_handle)
|
|
61
|
+
raise ArgumentError, "expected key / value handles, *or* block"
|
|
55
62
|
end
|
|
56
63
|
elsif key_handle.nil?
|
|
57
|
-
raise ArgumentError
|
|
64
|
+
raise ArgumentError, "key handle or block required"
|
|
58
65
|
end
|
|
59
66
|
end
|
|
60
|
-
|
|
61
|
-
|
|
62
67
|
end
|
data/lib/rekey.rb
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
require_relative
|
|
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
|
|
5
|
+
Rekey.rekey(self, key_handle, value_handle, &block)
|
|
12
6
|
end
|
|
13
7
|
end
|
data/rekey.gemspec
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package_name = File.basename(__FILE__).split(".")[0]
|
|
2
|
+
require "./lib/#{package_name}/version"
|
|
3
|
+
|
|
4
|
+
package = Rekey
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = package_name
|
|
8
|
+
s.version = package.const_get "VERSION"
|
|
9
|
+
s.authors = ["Daniel Pepper"]
|
|
10
|
+
s.summary = package.to_s
|
|
11
|
+
s.description = "Reformat Enumerables into Hashes, using derived keys / values"
|
|
12
|
+
s.homepage = "https://github.com/dpep/#{package_name}_rb"
|
|
13
|
+
s.license = "MIT"
|
|
14
|
+
s.files = `git ls-files * ":!:spec"`.split("\n")
|
|
15
|
+
|
|
16
|
+
s.required_ruby_version = ">= 3"
|
|
17
|
+
|
|
18
|
+
s.add_runtime_dependency "pluckit"
|
|
19
|
+
|
|
20
|
+
s.add_development_dependency "debug"
|
|
21
|
+
s.add_development_dependency "rspec"
|
|
22
|
+
s.add_development_dependency "simplecov"
|
|
23
|
+
end
|
metadata
CHANGED
|
@@ -1,79 +1,87 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rekey
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Pepper
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
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: '
|
|
18
|
+
version: '0'
|
|
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: '
|
|
25
|
+
version: '0'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: debug
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
|
-
- - "
|
|
30
|
+
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
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: '
|
|
39
|
+
version: '0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
41
|
+
name: rspec
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
|
-
- - "
|
|
44
|
+
- - ">="
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
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: '
|
|
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
|
-
-
|
|
64
|
-
-
|
|
65
|
-
|
|
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
84
|
metadata: {}
|
|
76
|
-
post_install_message:
|
|
77
85
|
rdoc_options: []
|
|
78
86
|
require_paths:
|
|
79
87
|
- lib
|
|
@@ -81,25 +89,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
81
89
|
requirements:
|
|
82
90
|
- - ">="
|
|
83
91
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: '
|
|
92
|
+
version: '3'
|
|
85
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
94
|
requirements:
|
|
87
95
|
- - ">="
|
|
88
96
|
- !ruby/object:Gem::Version
|
|
89
97
|
version: '0'
|
|
90
98
|
requirements: []
|
|
91
|
-
|
|
92
|
-
rubygems_version: 2.6.11
|
|
93
|
-
signing_key:
|
|
99
|
+
rubygems_version: 3.6.9
|
|
94
100
|
specification_version: 4
|
|
95
101
|
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
|
|
102
|
+
test_files: []
|
data/test/test_array_block.rb
DELETED
|
@@ -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
|
data/test/test_array_handlers.rb
DELETED
|
@@ -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
|
data/test/test_empty_input.rb
DELETED
|
@@ -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
|
data/test/test_hash_block.rb
DELETED
|
@@ -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
|
data/test/test_hash_handlers.rb
DELETED
|
@@ -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
|
data/test/test_invalid_input.rb
DELETED
|
@@ -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
|