hash-polyfill 0.1.20170629 → 0.1.20180120

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: d867362eafcd7f18aaca64f5681913c05c914422
4
- data.tar.gz: 39f2ae9706458974ef5918019b01b1c929987548
2
+ SHA256:
3
+ metadata.gz: 1c972a4f79be7c3c78811cecf259ebf6e6be96e92c7812df42326b770c57a9a0
4
+ data.tar.gz: a6cb3ec4847b0edc0b25ba339e48d6719ee018255d8d508e48e1e9fc1c5bbaf4
5
5
  SHA512:
6
- metadata.gz: 7e0ab771ba9e87ac863daeba2ee849323e444a5fbdf3b98fd1e80a57c8488d23562aa1345c09ff1e895da2d36d8f294389985cbbe4fc47b62c7848f5dbda29fe
7
- data.tar.gz: 9463ed9777a5b319239b839222cf9f265ea4e37070e3897a135bfa78932ea61552191ad5f618374b387b324bb55194a811d513f3adbc76b0108175581df1243e
6
+ metadata.gz: 30b9e9207e4b3de05e53564bcf149548811f3d25ca0dcdb340b1f0b741a707de75ed151fa24e7717e1226f24c591d6185e774a6a92f7c29ba0b5a32783699ff9
7
+ data.tar.gz: 42e13d1390fed6a6ad16e89f132899b02e43dcb4c27014ec0f3472c246ad155c6a6f375927fa28c91937e94b028e9ed17e3ef5a9d6434069e176cfaa7dfdce89
data/README.md CHANGED
@@ -1,18 +1,26 @@
1
1
  Implements some `Hash` methods which ruby will undoubtedly add in the future, possibly with different names.
2
2
 
3
+ To install run `gem install hash-polyfill`, and then `require "hash-polyfill"` in your code.
4
+
3
5
  ## Usage
4
6
 
5
7
  ```ruby
6
- a = {a: 1, b: 2, c: 3, d: 4}
8
+ a = {a: 1, b: 2, c: 3, d: 4}
7
9
 
8
- a.select_values(&even?) # => {b: 2, d: 4}
9
- a.reject_values(&even?) # => {a: 1, c: 3}
10
+ a.select_values(&:even?) # => {b: 2, d: 4}
11
+ a.reject_values(&:even?) # => {a: 1, c: 3}
10
12
  a.transform_values{|v| v * 10} # => {a: 10, b: 20, c: 30, d: 40}
13
+ a.slice(:a, :b, :e) # => {a: 1, b: 2}
11
14
 
12
15
  b = {a: 1, b: 2, c: nil, d: false}
13
16
  b.compact # => {a: 1, b: 2, d: false}
14
17
  ```
15
18
 
16
- The gem only adds the methods if they don't already exist. In particular if you're using ruby 2.4, `Hash#transform_values` is already provided.
19
+ The gem only adds the methods if they don't already exist.
20
+
21
+ * In ruby 2.4+, `Hash#transform_values` is already provided.
22
+ * In ruby 2.4+, `Hash#transform_values!` is already provided.
23
+ * In ruby 2.5+, `Hash#transform_keys` is already provided.
24
+ * In ruby 2.5+, `Hash#slice` is already provided.
17
25
 
18
- There are also `!` versions of all these methods.
26
+ There are also `!` versions of some of these methods.
@@ -55,4 +55,21 @@ class Hash
55
55
  end
56
56
  self
57
57
  end unless method_defined? :transform_values!
58
+
59
+ def slice(*values)
60
+ result = {}
61
+ values.each do |key|
62
+ result[key] = self[key] if has_key?(key)
63
+ end
64
+ result
65
+ end unless method_defined? :slice
66
+
67
+ def transform_keys
68
+ return enum_for(:transform_keys) unless block_given?
69
+ result = {}
70
+ each do |key, value|
71
+ result[yield(key)] = value
72
+ end
73
+ result
74
+ end unless method_defined? :transform_keys
58
75
  end
@@ -113,4 +113,28 @@ describe "Hash polyfill" do
113
113
  expect(a.transform_values!.each(&:itself)).to eq(a)
114
114
  expect(a).to eq({a: 3, b: 4, c: 5, d: 6})
115
115
  end
116
+
117
+ # Ruby 2.5 polyfill
118
+ it "slice" do
119
+ a = {a: 2, b: 3, c: 4, d: 5}
120
+ b = a.slice(:a, :b, :e)
121
+ expect(a).to eq({a: 2, b: 3, c: 4, d: 5})
122
+ expect(b).to eq({a: 2, b: 3})
123
+ end
124
+
125
+ # Ruby 2.5 polyfill
126
+ it "transform_keys - with block" do
127
+ a = {a: 2, b: 3, c: 4, d: 5}
128
+ b = a.transform_keys(&:next)
129
+ expect(a).to eq({a: 2, b: 3, c: 4, d: 5})
130
+ expect(b).to eq({b: 2, c: 3, d: 4, e: 5})
131
+ end
132
+
133
+ it "transform_keys - no block yields Enumerator" do
134
+ a = {a: 2, b: 3, c: 4, d: 5}
135
+ expect(a.transform_keys).to be_instance_of(Enumerator)
136
+ b = a.transform_keys.each(&:next)
137
+ expect(a).to eq({a: 2, b: 3, c: 4, d: 5})
138
+ expect(b).to eq({b: 2, c: 3, d: 4, e: 5})
139
+ end
116
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash-polyfill
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20170629
4
+ version: 0.1.20180120
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Wegrzanowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-29 00:00:00.000000000 Z
11
+ date: 2018-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Hash#transform_values from 2.4 and well as Hash convenience methods from
55
+ description: New Hash methods from 2.4/2.5 and well as Hash convenience methods from
56
56
  the future
57
57
  email: Tomasz.Wegrzanowski@gmail.com
58
58
  executables: []
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  requirements: []
87
87
  rubyforge_project:
88
- rubygems_version: 2.5.2
88
+ rubygems_version: 2.7.3
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: Polyfill for Hash methods ruby will get in the future