hmap 1.0.1 → 1.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +40 -16
- data/README.md +2 -2
- data/hmap.gemspec +7 -4
- data/lib/hmap/hmap.rb +21 -15
- data/lib/hmap/version.rb +1 -1
- metadata +21 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 77e9c393f40df641e51a65b9279fc479c5b3e85bb90e74cd6d13a836147c1b56
|
|
4
|
+
data.tar.gz: f1f9f8c51498c80c4de446917dc60462aa020e74a5721684de983d5b2a728211
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e925a388dcc787b0b5413d894b363e65f09ebdadf3dd3e25f9f33430421f5b350e494b1aed3d896ad11165555b72a711cd4c8488556dc539b82d9b12191684a2
|
|
7
|
+
data.tar.gz: 98b1d1082abf8af745cda978df664ecfd0565d685beb835ed0e4fd2fd68278d47ef969068d566de061c26086e1aef4492a7e7da29520885c232d99edcd3de68c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
### 1.1.0 (2026-11-03)
|
|
2
|
+
- require Ruby >= 3.2
|
|
3
|
+
- fix FrozenError from hmap, kmap, and vmap on frozen hashes
|
|
4
|
+
- raise ArgumentError when called without a block
|
|
5
|
+
- hmap and Hash.hmap raise on malformed pairs, e.g. [key], instead of filling in a nil value
|
|
6
|
+
- kmap and vmap pass the key and value to blocks with an optional second param, e.g. |k, v = nil|
|
|
7
|
+
|
|
1
8
|
### 1.0.1 (2024-07-12)
|
|
2
9
|
- fix changelog
|
|
3
10
|
- rebuild
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,41 +1,65 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
hmap (1.0
|
|
4
|
+
hmap (1.1.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
debug (1.11.1)
|
|
10
|
+
irb (~> 1.10)
|
|
11
|
+
reline (>= 0.3.8)
|
|
12
|
+
diff-lcs (1.6.2)
|
|
13
|
+
erb (6.0.7)
|
|
14
|
+
io-console (0.9.5)
|
|
15
|
+
irb (1.18.0)
|
|
16
|
+
pp (>= 0.6.0)
|
|
17
|
+
prism (>= 1.3.0)
|
|
18
|
+
rdoc (>= 4.0.0)
|
|
19
|
+
reline (>= 0.4.2)
|
|
20
|
+
logger (1.7.0)
|
|
21
|
+
pp (0.6.4)
|
|
22
|
+
prettyprint
|
|
23
|
+
prettyprint (0.2.1)
|
|
24
|
+
prism (2.1.0)
|
|
25
|
+
rbs (4.2.0)
|
|
26
|
+
logger
|
|
27
|
+
prism (>= 1.6.0)
|
|
28
|
+
tsort
|
|
29
|
+
rdoc (8.1.0)
|
|
30
|
+
erb
|
|
31
|
+
prism (>= 1.6.0)
|
|
32
|
+
rbs (>= 4.0.0)
|
|
33
|
+
tsort
|
|
34
|
+
reline (0.7.0)
|
|
35
|
+
io-console (~> 0.5)
|
|
36
|
+
rspec (3.13.2)
|
|
13
37
|
rspec-core (~> 3.13.0)
|
|
14
38
|
rspec-expectations (~> 3.13.0)
|
|
15
39
|
rspec-mocks (~> 3.13.0)
|
|
16
|
-
rspec-core (3.13.
|
|
40
|
+
rspec-core (3.13.6)
|
|
17
41
|
rspec-support (~> 3.13.0)
|
|
18
|
-
rspec-
|
|
42
|
+
rspec-debugging (0.0.5)
|
|
43
|
+
debug (>= 1.10)
|
|
44
|
+
rspec-core (>= 3.10)
|
|
45
|
+
rspec-expectations (3.13.5)
|
|
19
46
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
20
47
|
rspec-support (~> 3.13.0)
|
|
21
|
-
rspec-mocks (3.13.
|
|
48
|
+
rspec-mocks (3.13.8)
|
|
22
49
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
23
50
|
rspec-support (~> 3.13.0)
|
|
24
|
-
rspec-support (3.13.
|
|
25
|
-
simplecov (
|
|
26
|
-
|
|
27
|
-
simplecov-html (~> 0.11)
|
|
28
|
-
simplecov_json_formatter (~> 0.1)
|
|
29
|
-
simplecov-html (0.12.3)
|
|
30
|
-
simplecov_json_formatter (0.1.4)
|
|
51
|
+
rspec-support (3.13.7)
|
|
52
|
+
simplecov (1.3.2)
|
|
53
|
+
tsort (0.2.0)
|
|
31
54
|
|
|
32
55
|
PLATFORMS
|
|
33
56
|
ruby
|
|
34
57
|
|
|
35
58
|
DEPENDENCIES
|
|
36
|
-
|
|
59
|
+
debug (>= 1)
|
|
37
60
|
hmap!
|
|
38
61
|
rspec (>= 3.10)
|
|
62
|
+
rspec-debugging
|
|
39
63
|
simplecov (>= 0.22)
|
|
40
64
|
|
|
41
65
|
BUNDLED WITH
|
data/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Improved Hash mapping functions
|
|
|
9
9
|
|
|
10
10
|
### Usage
|
|
11
11
|
#### Hash.map
|
|
12
|
-
Create a Hash using an Enumerable by mapping
|
|
12
|
+
Create a Hash using an Enumerable by mapping its items into corresponding hash values
|
|
13
13
|
```ruby
|
|
14
14
|
Hash.map [:a, :bb, :ccc] {|v| v.length }
|
|
15
15
|
=> { a: 1, bb: 2, ccc: 3 }
|
|
@@ -44,7 +44,7 @@ Transform the values of a Hash
|
|
|
44
44
|
b: 2,
|
|
45
45
|
c: 3,
|
|
46
46
|
}.vmap &:to_s
|
|
47
|
-
=> { a: '
|
|
47
|
+
=> { a: '1', b: '2', c: '3' }
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
#### kmap
|
data/hmap.gemspec
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
require_relative "lib/hmap/version"
|
|
2
|
+
|
|
1
3
|
Gem::Specification.new do |s|
|
|
2
4
|
s.authors = ["Daniel Pepper"]
|
|
3
5
|
s.description = "Improved Hash mapping functions"
|
|
4
6
|
s.files = `git ls-files * ":!:spec"`.split("\n")
|
|
5
7
|
s.homepage = "https://github.com/dpep/rb_hmap"
|
|
6
8
|
s.license = "MIT"
|
|
7
|
-
s.name =
|
|
9
|
+
s.name = "hmap"
|
|
8
10
|
s.summary = "Hmap"
|
|
9
|
-
s.version =
|
|
11
|
+
s.version = Hmap::VERSION
|
|
10
12
|
|
|
11
|
-
s.required_ruby_version = ">= 3"
|
|
13
|
+
s.required_ruby_version = ">= 3.2"
|
|
12
14
|
|
|
13
|
-
s.add_development_dependency "
|
|
15
|
+
s.add_development_dependency "debug", ">= 1"
|
|
14
16
|
s.add_development_dependency "rspec", ">= 3.10"
|
|
17
|
+
s.add_development_dependency "rspec-debugging"
|
|
15
18
|
s.add_development_dependency "simplecov", ">= 0.22"
|
|
16
19
|
end
|
data/lib/hmap/hmap.rb
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
module Hmap
|
|
2
2
|
# create Hash from given keys and mapped values
|
|
3
3
|
def map(obj, &block)
|
|
4
|
-
|
|
5
|
-
block.call(*args)
|
|
6
|
-
end
|
|
4
|
+
raise ArgumentError, "no block given" unless block
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
obj.zip(obj.map(&block)).to_h
|
|
9
7
|
end
|
|
10
8
|
|
|
11
|
-
# map an Enumerable into a Hash, like
|
|
9
|
+
# map an Enumerable into a Hash, like obj.map { ... }.to_h
|
|
12
10
|
def hmap(obj, &block)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
raise ArgumentError, "no block given" unless block
|
|
12
|
+
|
|
13
|
+
obj.map(&block).compact.to_h
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# call with (key, value) if the block takes both, else just the one
|
|
17
|
+
def self.yield_pair(block, one, key, value)
|
|
18
|
+
positional = block.parameters.count { |type, _| type == :req || type == :opt }
|
|
19
|
+
positional >= 2 ? block.call(key, value) : block.call(one)
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def self.extended(base)
|
|
@@ -24,7 +26,7 @@ module Hmap
|
|
|
24
26
|
module InstanceMethods
|
|
25
27
|
# map the block's results back to a hash
|
|
26
28
|
def hmap(&block)
|
|
27
|
-
|
|
29
|
+
dup.hmap!(&block)
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
def hmap!(&block)
|
|
@@ -36,24 +38,28 @@ module Hmap
|
|
|
36
38
|
# map keys, but preserve associated values
|
|
37
39
|
# ie. http://apidock.com/rails/v4.2.7/Hash/transform_keys
|
|
38
40
|
def kmap(&block)
|
|
39
|
-
|
|
41
|
+
dup.kmap!(&block)
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def kmap!(&block)
|
|
45
|
+
raise ArgumentError, "no block given" unless block
|
|
46
|
+
|
|
43
47
|
hmap! do |k, v|
|
|
44
|
-
[ block
|
|
48
|
+
[ Hmap.yield_pair(block, k, k, v), v ]
|
|
45
49
|
end
|
|
46
50
|
end
|
|
47
51
|
|
|
48
52
|
# map values, but preserve associated keys
|
|
49
53
|
# ie. http://apidock.com/rails/v4.2.7/Hash/transform_values
|
|
50
54
|
def vmap(&block)
|
|
51
|
-
|
|
55
|
+
dup.vmap!(&block)
|
|
52
56
|
end
|
|
53
57
|
|
|
54
58
|
def vmap!(&block)
|
|
59
|
+
raise ArgumentError, "no block given" unless block
|
|
60
|
+
|
|
55
61
|
each do |k, v|
|
|
56
|
-
self[k] = block
|
|
62
|
+
self[k] = Hmap.yield_pair(block, v, k, v)
|
|
57
63
|
end
|
|
58
64
|
end
|
|
59
65
|
end
|
data/lib/hmap/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hmap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.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
|
-
name:
|
|
13
|
+
name: debug
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '1'
|
|
20
19
|
type: :development
|
|
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: '1'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: rspec
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,6 +37,20 @@ dependencies:
|
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
39
|
version: '3.10'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rspec-debugging
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
41
54
|
- !ruby/object:Gem::Dependency
|
|
42
55
|
name: simplecov
|
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -53,7 +66,6 @@ dependencies:
|
|
|
53
66
|
- !ruby/object:Gem::Version
|
|
54
67
|
version: '0.22'
|
|
55
68
|
description: Improved Hash mapping functions
|
|
56
|
-
email:
|
|
57
69
|
executables: []
|
|
58
70
|
extensions: []
|
|
59
71
|
extra_rdoc_files: []
|
|
@@ -71,7 +83,6 @@ homepage: https://github.com/dpep/rb_hmap
|
|
|
71
83
|
licenses:
|
|
72
84
|
- MIT
|
|
73
85
|
metadata: {}
|
|
74
|
-
post_install_message:
|
|
75
86
|
rdoc_options: []
|
|
76
87
|
require_paths:
|
|
77
88
|
- lib
|
|
@@ -79,15 +90,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
79
90
|
requirements:
|
|
80
91
|
- - ">="
|
|
81
92
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3'
|
|
93
|
+
version: '3.2'
|
|
83
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
95
|
requirements:
|
|
85
96
|
- - ">="
|
|
86
97
|
- !ruby/object:Gem::Version
|
|
87
98
|
version: '0'
|
|
88
99
|
requirements: []
|
|
89
|
-
rubygems_version:
|
|
90
|
-
signing_key:
|
|
100
|
+
rubygems_version: 4.0.16
|
|
91
101
|
specification_version: 4
|
|
92
102
|
summary: Hmap
|
|
93
103
|
test_files: []
|