rekey 3.0.1 → 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 +43 -54
- 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 -44
- data/test/test_array_handlers.rb +0 -153
- data/test/test_empty_input.rb +0 -29
- data/test/test_hash_block.rb +0 -74
- data/test/test_hash_handlers.rb +0 -131
- data/test/test_invalid_input.rb +0 -25
- data/test/test_monkey_patching.rb +0 -36
- data/test/test_range.rb +0 -44
- 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,78 +1,67 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "pluckit/pluck"
|
|
2
|
+
require "rekey/version"
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
module Rekey
|
|
5
|
-
|
|
6
|
+
extend self
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
else
|
|
13
|
-
proc {|v| [nil, v]}
|
|
14
|
-
end
|
|
14
|
+
def rekey(enumerable, key_handle = nil, value_handle = nil, &block)
|
|
15
|
+
validate_input!(key_handle, value_handle, &block)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
end
|
|
17
|
+
key_value_fn = if enumerable.respond_to?(:keys)
|
|
18
|
+
proc {|k, v| [k, v]}
|
|
19
|
+
else
|
|
20
|
+
proc {|v| [nil, v]}
|
|
21
|
+
end
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
# rekey input
|
|
24
|
+
enumerable.each_with_object({}) do |*args, res|
|
|
25
|
+
key, value = key_value_fn.call(*args)
|
|
26
|
+
new_key = key
|
|
27
|
+
new_value = value
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# standard block
|
|
35
|
-
new_key = block.call value
|
|
36
|
-
else
|
|
37
|
-
# block that wants both key and value
|
|
38
|
-
new_key = block.call key, value
|
|
39
|
-
end
|
|
29
|
+
if block
|
|
30
|
+
if block.arity < 2
|
|
31
|
+
# block only wants value
|
|
32
|
+
# arity -1 is a function pointer, eg. &:to_i
|
|
33
|
+
new_key = block.call(value)
|
|
40
34
|
else
|
|
41
|
-
|
|
42
|
-
new_value = PluckIt.pluckit value, value_handle if value_handle
|
|
43
|
-
end
|
|
35
|
+
# block wants both key and value
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
if res.is_a? Array
|
|
47
|
-
unless new_key.nil?
|
|
48
|
-
# safeguard against stupidity
|
|
37
|
+
if key_value_fn.arity != 2
|
|
49
38
|
raise ArgumentError.new(
|
|
50
|
-
"
|
|
39
|
+
"rekey block requests key/value pair but only value available"
|
|
51
40
|
)
|
|
52
41
|
end
|
|
53
42
|
|
|
54
|
-
|
|
55
|
-
else
|
|
56
|
-
res[new_key] = new_value
|
|
43
|
+
new_key = block.call(key, value)
|
|
57
44
|
end
|
|
45
|
+
else
|
|
46
|
+
new_key = PluckIt.pluckit(value, key_handle)
|
|
47
|
+
new_value = PluckIt.pluckit(value, value_handle) if value_handle
|
|
58
48
|
end
|
|
49
|
+
|
|
50
|
+
# collect results
|
|
51
|
+
res[new_key] = new_value
|
|
59
52
|
end
|
|
53
|
+
end
|
|
60
54
|
|
|
61
55
|
|
|
62
|
-
|
|
56
|
+
private
|
|
63
57
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
end
|
|
69
|
-
else
|
|
70
|
-
unless key_handle or value_handle
|
|
71
|
-
raise ArgumentError.new 'key_handle and/or value_handle are required'
|
|
72
|
-
end
|
|
58
|
+
def validate_input!(key_handle, value_handle, &block)
|
|
59
|
+
if block
|
|
60
|
+
if (key_handle || value_handle)
|
|
61
|
+
raise ArgumentError, "expected key / value handles, *or* block"
|
|
73
62
|
end
|
|
63
|
+
elsif key_handle.nil?
|
|
64
|
+
raise ArgumentError, "key handle or block required"
|
|
74
65
|
end
|
|
75
|
-
|
|
76
|
-
|
|
77
66
|
end
|
|
78
67
|
end
|
data/lib/rekey.rb
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
require_relative
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
module Rekey
|
|
5
|
-
VERSION = '3.0.1'
|
|
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
|
+
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,44 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyArrayBlockTest < Minitest::Test
|
|
6
|
-
|
|
7
|
-
def setup
|
|
8
|
-
@input = [*1..3]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def test_keys
|
|
12
|
-
assert_equal({
|
|
13
|
-
1 => 1,
|
|
14
|
-
2 => 2,
|
|
15
|
-
3 => 3,
|
|
16
|
-
},
|
|
17
|
-
@input.rekey {|v| v }
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
assert_equal({
|
|
21
|
-
2 => 1,
|
|
22
|
-
4 => 2,
|
|
23
|
-
6 => 3,
|
|
24
|
-
},
|
|
25
|
-
@input.rekey {|v| v * 2 }
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
assert_equal({
|
|
29
|
-
'1' => 1,
|
|
30
|
-
'2' => 2,
|
|
31
|
-
'3' => 3,
|
|
32
|
-
},
|
|
33
|
-
@input.rekey {|v| v.to_s }
|
|
34
|
-
)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_nil_key
|
|
38
|
-
assert_equal(
|
|
39
|
-
{ nil => 3 },
|
|
40
|
-
@input.rekey {|k, v| nil }
|
|
41
|
-
)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
data/test/test_array_handlers.rb
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyArrayHandlersTest < Minitest::Test
|
|
6
|
-
|
|
7
|
-
def setup
|
|
8
|
-
@input = [*1..3]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def test_both
|
|
12
|
-
assert_equal({
|
|
13
|
-
1 => 1,
|
|
14
|
-
2 => 2,
|
|
15
|
-
3 => 3,
|
|
16
|
-
},
|
|
17
|
-
@input.rekey(:to_i, :to_i)
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
assert_equal({
|
|
21
|
-
'1' => 1.0,
|
|
22
|
-
'2' => 2.0,
|
|
23
|
-
'3' => 3.0,
|
|
24
|
-
},
|
|
25
|
-
@input.rekey(:to_s, :to_f)
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
assert_equal({
|
|
29
|
-
'1' => 1.0,
|
|
30
|
-
'2' => 2.0,
|
|
31
|
-
'3' => 3.0,
|
|
32
|
-
},
|
|
33
|
-
@input.rekey('to_s', 'to_f')
|
|
34
|
-
)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_keys
|
|
38
|
-
assert_equal({
|
|
39
|
-
'1' => 1,
|
|
40
|
-
'2' => 2,
|
|
41
|
-
'3' => 3,
|
|
42
|
-
},
|
|
43
|
-
@input.rekey(:to_s)
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
assert_equal({
|
|
47
|
-
'1' => 1,
|
|
48
|
-
'2' => 2,
|
|
49
|
-
'3' => 3,
|
|
50
|
-
},
|
|
51
|
-
@input.rekey('to_s')
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
assert_equal({
|
|
55
|
-
1.0 => 1,
|
|
56
|
-
2.0 => 2,
|
|
57
|
-
3.0 => 3,
|
|
58
|
-
},
|
|
59
|
-
@input.rekey(:to_f)
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
assert_equal({
|
|
63
|
-
1.0 => 1,
|
|
64
|
-
2.0 => 2,
|
|
65
|
-
3.0 => 3,
|
|
66
|
-
},
|
|
67
|
-
@input.rekey(&:to_f)
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_values
|
|
72
|
-
assert_equal(
|
|
73
|
-
@input,
|
|
74
|
-
@input.rekey(nil, :to_i)
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
assert_equal(
|
|
78
|
-
@input.map(&:to_f),
|
|
79
|
-
@input.rekey(nil, :to_f)
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
assert_equal(
|
|
83
|
-
@input.map(&:to_s),
|
|
84
|
-
@input.rekey(nil, 'to_s')
|
|
85
|
-
)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def test_array_indices
|
|
89
|
-
array_data = [
|
|
90
|
-
[ 1, 2, 3 ],
|
|
91
|
-
[ 4, 5, 6 ],
|
|
92
|
-
[ 7, 8, 9 ],
|
|
93
|
-
]
|
|
94
|
-
|
|
95
|
-
assert_equal(
|
|
96
|
-
array_data,
|
|
97
|
-
array_data.rekey(nil, :to_a)
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
assert_equal(
|
|
101
|
-
[ 1, 4, 7 ],
|
|
102
|
-
array_data.rekey(nil, 0)
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
assert_equal({
|
|
106
|
-
1 => 3,
|
|
107
|
-
4 => 6,
|
|
108
|
-
7 => 9,
|
|
109
|
-
},
|
|
110
|
-
array_data.rekey(0, 2)
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
array_data = [
|
|
114
|
-
[ 1 ],
|
|
115
|
-
[ 2, 1 ],
|
|
116
|
-
[ 3, 2, 1 ],
|
|
117
|
-
]
|
|
118
|
-
assert_equal({
|
|
119
|
-
1 => 1,
|
|
120
|
-
2 => 2,
|
|
121
|
-
3 => 3,
|
|
122
|
-
},
|
|
123
|
-
array_data.rekey(0, :count)
|
|
124
|
-
)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def test_hash_indices
|
|
129
|
-
data = [
|
|
130
|
-
{ i: 1, v: 'a' },
|
|
131
|
-
{ i: 2, v: 'b' },
|
|
132
|
-
{ i: 3, v: 'c' },
|
|
133
|
-
]
|
|
134
|
-
|
|
135
|
-
assert_equal({
|
|
136
|
-
1 => data[0],
|
|
137
|
-
2 => data[1],
|
|
138
|
-
3 => data[2],
|
|
139
|
-
},
|
|
140
|
-
data.rekey(:i)
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
assert_equal({
|
|
144
|
-
1 => 'a',
|
|
145
|
-
2 => 'b',
|
|
146
|
-
3 => 'c',
|
|
147
|
-
},
|
|
148
|
-
data.rekey(:i, :v)
|
|
149
|
-
)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
end
|
data/test/test_empty_input.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyEmptyInputTest < Minitest::Test
|
|
6
|
-
|
|
7
|
-
def test_all
|
|
8
|
-
assert_equal(
|
|
9
|
-
{},
|
|
10
|
-
[].rekey(:k, :v)
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
assert_equal(
|
|
14
|
-
{},
|
|
15
|
-
{}.rekey(:k, :v)
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
assert_equal(
|
|
19
|
-
{},
|
|
20
|
-
Set.new.rekey(:k, :v)
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
assert_equal(
|
|
24
|
-
[],
|
|
25
|
-
Set.new.rekey(nil, :k)
|
|
26
|
-
)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
data/test/test_hash_block.rb
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require '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,131 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyHashHandlersTest < Minitest::Test
|
|
6
|
-
def setup
|
|
7
|
-
@input = {
|
|
8
|
-
a: 1,
|
|
9
|
-
b: 2,
|
|
10
|
-
c: 3,
|
|
11
|
-
}
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_both
|
|
15
|
-
assert_equal({
|
|
16
|
-
1 => 1,
|
|
17
|
-
2 => 2,
|
|
18
|
-
3 => 3,
|
|
19
|
-
},
|
|
20
|
-
@input.rekey(:to_i, :to_i)
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
assert_equal({
|
|
24
|
-
'1' => 1.0,
|
|
25
|
-
'2' => 2.0,
|
|
26
|
-
'3' => 3.0,
|
|
27
|
-
},
|
|
28
|
-
@input.rekey(:to_s, :to_i)
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
assert_equal({
|
|
32
|
-
'1' => 1.0,
|
|
33
|
-
'2' => 2.0,
|
|
34
|
-
'3' => 3.0,
|
|
35
|
-
},
|
|
36
|
-
@input.rekey('to_s', 'to_i')
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_keys
|
|
42
|
-
assert_equal({
|
|
43
|
-
'1' => 1,
|
|
44
|
-
'2' => 2,
|
|
45
|
-
'3' => 3,
|
|
46
|
-
},
|
|
47
|
-
@input.rekey(:to_s)
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
assert_equal({
|
|
51
|
-
1.0 => 1,
|
|
52
|
-
2.0 => 2,
|
|
53
|
-
3.0 => 3,
|
|
54
|
-
},
|
|
55
|
-
@input.rekey(:to_f)
|
|
56
|
-
)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_values
|
|
60
|
-
assert_equal(
|
|
61
|
-
@input,
|
|
62
|
-
@input.rekey(nil, :to_i)
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
assert_equal({
|
|
66
|
-
a: '1',
|
|
67
|
-
b: '2',
|
|
68
|
-
c: '3',
|
|
69
|
-
},
|
|
70
|
-
@input.rekey(nil, :to_s)
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
assert_equal({
|
|
74
|
-
a: '1',
|
|
75
|
-
b: '2',
|
|
76
|
-
c: '3',
|
|
77
|
-
},
|
|
78
|
-
@input.rekey(nil, 'to_s')
|
|
79
|
-
)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def test_hash_array
|
|
83
|
-
data = {
|
|
84
|
-
a: [ 1, 2, 3 ],
|
|
85
|
-
b: [ 4, 5, 6 ],
|
|
86
|
-
c: [ 7, 8, 9 ],
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
assert_equal({
|
|
90
|
-
a: 1,
|
|
91
|
-
b: 4,
|
|
92
|
-
c: 7,
|
|
93
|
-
},
|
|
94
|
-
data.rekey(nil, 0)
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
assert_equal({
|
|
98
|
-
1 => 2,
|
|
99
|
-
4 => 5,
|
|
100
|
-
7 => 8,
|
|
101
|
-
},
|
|
102
|
-
data.rekey(0, 1)
|
|
103
|
-
)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def test_hash_hash
|
|
107
|
-
data = {
|
|
108
|
-
a: { i: 1, v: 2 },
|
|
109
|
-
b: { i: 2, v: 4 },
|
|
110
|
-
c: { i: 3, v: 6 },
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
assert_equal({
|
|
114
|
-
a: 1,
|
|
115
|
-
b: 2,
|
|
116
|
-
c: 3,
|
|
117
|
-
},
|
|
118
|
-
data.rekey(nil, :i)
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
assert_equal({
|
|
122
|
-
1 => 2,
|
|
123
|
-
2 => 4,
|
|
124
|
-
3 => 6,
|
|
125
|
-
},
|
|
126
|
-
data.rekey(:i, :v)
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
end
|
data/test/test_invalid_input.rb
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyInvalidInputTest < Minitest::Test
|
|
6
|
-
def setup
|
|
7
|
-
@input = [*1..3]
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def test_all
|
|
12
|
-
assert_raises ArgumentError do
|
|
13
|
-
@input.rekey
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
assert_raises ArgumentError do
|
|
17
|
-
@input.rekey(:k) do |k| 1 end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
assert_raises ArgumentError do
|
|
21
|
-
@input.rekey(:k, :v) do |k| 1 end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'set'
|
|
3
|
-
|
|
4
|
-
$LOAD_PATH.unshift 'lib'
|
|
5
|
-
require 'rekey/rekey'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class MonkeyPatchingTest < Minitest::Test
|
|
9
|
-
def test_not_installed
|
|
10
|
-
if defined? Rekey::VERSION
|
|
11
|
-
# entire library was loaded, so these tests are invalid.
|
|
12
|
-
# this happens when run through `rake`
|
|
13
|
-
skip
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# `require 'rekey/rekey'` should load Rekey
|
|
17
|
-
assert Rekey
|
|
18
|
-
|
|
19
|
-
# but no monkey patching
|
|
20
|
-
assert_raises NoMethodError do
|
|
21
|
-
[ 1, 2, 3 ].rekey 0
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
assert_raises NoMethodError do
|
|
25
|
-
{ a: 1 }.rekey 0
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
assert_raises NoMethodError do
|
|
29
|
-
Set.new([ 1, 2, 3 ]).rekey 0
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
puts 'yay, no monkey patching'
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
end
|
data/test/test_range.rb
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require '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 ],
|
|
17
|
-
[ 4, 5 ],
|
|
18
|
-
],
|
|
19
|
-
@input.rekey(nil, 0..1)
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
assert_equal([
|
|
23
|
-
[ 2 ],
|
|
24
|
-
[ 5 ],
|
|
25
|
-
],
|
|
26
|
-
@input.rekey(nil, 1...2)
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
assert_equal({
|
|
30
|
-
[ 2 ] => @input[0],
|
|
31
|
-
[ 5 ] => @input[1],
|
|
32
|
-
},
|
|
33
|
-
@input.rekey(1...2)
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
assert_equal({
|
|
37
|
-
3 => [ 1, 2 ],
|
|
38
|
-
6 => [ 4, 5 ],
|
|
39
|
-
},
|
|
40
|
-
@input.rekey(2, 0..1)
|
|
41
|
-
)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
data/test/test_regexp.rb
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
require 'minitest/autorun'
|
|
2
|
-
require 'rekey'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class RekeyRegexpTest < Minitest::Test
|
|
6
|
-
|
|
7
|
-
def setup
|
|
8
|
-
@input = [
|
|
9
|
-
[ 'a', 'aa', 'b', 'ba' ],
|
|
10
|
-
[ 'b', 'c', 'bc' ],
|
|
11
|
-
]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_stuff
|
|
15
|
-
assert_equal([
|
|
16
|
-
['a', 'aa', 'ba'],
|
|
17
|
-
[],
|
|
18
|
-
],
|
|
19
|
-
@input.rekey(nil, /a/)
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
assert_equal([
|
|
23
|
-
['b', 'ba'],
|
|
24
|
-
['b', 'bc'],
|
|
25
|
-
],
|
|
26
|
-
@input.rekey(nil, /b/)
|
|
27
|
-
)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end
|