polyfill 1.7.0 → 1.8.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
2
  SHA256:
3
- metadata.gz: da8a7a5cae9da8f2896ddbc1c753dbe8251fa5f5f5390f868a7305a7551b3af8
4
- data.tar.gz: 8ed0b4fecb7f5e0dd252c5bc4b09fa691e47845180cd8d1cc694a2c7ddedba40
3
+ metadata.gz: 055be265874af4c56f4902c479982779ac2db965d666553ccf5f22ba6fb31fb7
4
+ data.tar.gz: 139e5bb51a76000559dbb71560e10f32c7eaed37faa8c1dbd7fbc0e8be91dcee
5
5
  SHA512:
6
- metadata.gz: d364680af4e24583da1d5a3e4487878c9785ba0c3c1c2f34022b2c04740416fd825ac2b25937d648aa47539f4896b30a1e09a32a5bdcefeb95da19263d72c1f6
7
- data.tar.gz: 967a450eaa070cbea6b228ef2dc56c527e34a5a8d31f283e48cb8ec440ebf876bef76b6db6186fa9c0822ea877dd26738549f50d63fb28b66cdbb896187da4e2
6
+ metadata.gz: 603bd2a32b554f123d602fc455a5c970c9309530a8f585a51d6feeba8044887f24baecb4d56bbdb9881eaec6f02c7e9babadd406132c5c3d591fb5991b2f458e
7
+ data.tar.gz: 2ab11f404cdc0d19d46fd17560a18fff30fc7e8c94144fd7960e22f9525c00a3159c2297d294be3856e08f1978cdd75b48dbeea685aa1122e4affc9a5652ac05
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.6.0
4
- - 2.5.3
5
- - 2.4.4
6
- - 2.3.7
3
+ - 2.6.2
4
+ - 2.5.5
5
+ - 2.4.5
6
+ - 2.3.8
7
7
  - 2.2.10
8
8
  - 2.1.10
@@ -1,3 +1,17 @@
1
+ # [1.8.0][] (TBD)
2
+
3
+ ## Added
4
+
5
+ - v2.6 Kernel#Complex
6
+ - v2.6 Kernel#Float
7
+ - v2.6 Kernel#Integer
8
+ - v2.6 Kernel#Rational
9
+ - v2.6 Array#to_h
10
+ - v2.6 Hash#to_h
11
+ - v2.6 Enumerable#to_h
12
+ - v2.6 OpenStruct#to_h
13
+ - v2.6 Struct#to_h
14
+
1
15
  # [1.7.0][] (2019-02-17)
2
16
 
3
17
  ## Added
@@ -274,6 +288,7 @@ incorrect type was passed:
274
288
  - v2.4 String#concat?
275
289
  - v2.4 String#prepend?
276
290
 
291
+ [1.8.0]: https://github.com/AaronLasseigne/polyfill/compare/v1.7.0...v1.8.0
277
292
  [1.7.0]: https://github.com/AaronLasseigne/polyfill/compare/v1.6.0...v1.7.0
278
293
  [1.6.0]: https://github.com/AaronLasseigne/polyfill/compare/v1.5.0...v1.6.0
279
294
  [1.5.0]: https://github.com/AaronLasseigne/polyfill/compare/v1.4.0...v1.5.0
data/README.md CHANGED
@@ -28,7 +28,7 @@ monkey patching** that may cause issues outside of your use.
28
28
  Add it to your Gemfile:
29
29
 
30
30
  ```ruby
31
- gem 'polyfill', '~> 1.7'
31
+ gem 'polyfill', '~> 1.8'
32
32
  ```
33
33
 
34
34
  Or install it manually:
@@ -133,7 +133,7 @@ table. The explanation will follow "**Differences:**".
133
133
  | ✓ | Array | #difference | New
134
134
  | ✗ | | #filter | New (alias of `select`)
135
135
  | ✗ | | #filter! | New (alias of `select!`)
136
- | | | #to_h | Accepts a block that maps elements to new key/value pairs.
136
+ | | | #to_h | Accepts a block that maps elements to new key/value pairs.
137
137
  | ✓ | | #union | New
138
138
  | ✗ | Binding | #source_location | New
139
139
  | ✗ | Coverage | .line_stub | New
@@ -144,7 +144,7 @@ table. The explanation will follow "**Differences:**".
144
144
  | ✗ | Enumerable | #+ | New
145
145
  | ✗ | | #chain | New
146
146
  | ✗ | | #filter | New (alias of `select`)
147
- | | | #to_h | Accepts a block that maps elements to new key/value pairs.
147
+ | | | #to_h | Accepts a block that maps elements to new key/value pairs.
148
148
  | ✗ | Enumerator::Lazy | #filter | New (alias of `select`)
149
149
  | ✗ | ENV | #to_h | Accepts a block that maps elements to new key/value pairs.
150
150
  | ✗ | ERB | .new | Accepts new optional keyword arguments, `:eoutvar` and `:trim_mode`.
@@ -160,14 +160,14 @@ table. The explanation will follow "**Differences:**".
160
160
  | ✗ | | #filter! | New (alias of `select!`)
161
161
  | ✓ | | #merge | Accepts multiple arguments.
162
162
  | ✓ | | #merge! | Accepts multiple arguments.
163
- | | | #to_h | Accepts a block that maps elements to new key/value pairs.
163
+ | | | #to_h | Accepts a block that maps elements to new key/value pairs.
164
164
  | ✓ | | #update | Accepts multiple arguments.
165
165
  | ✗ | Kernel | #BigDecimal | Accepts a new optional keyword argument, `:exception`.
166
- | | | #Complex | Accepts a new optional keyword argument, `:exception`.
166
+ | | | #Complex | Accepts a new optional keyword argument, `:exception`.
167
167
  | ✗ | | #exec | Does not close non-standard file descriptors.
168
- | | | #Float | Accepts a new optional keyword argument, `:exception`.
169
- | | | #Integer | Accepts a new optional keyword argument, `:exception`.
170
- | | | #Rational | Accepts a new optional keyword argument, `:exception`.
168
+ | | | #Float | Accepts a new optional keyword argument, `:exception`.
169
+ | | | #Integer | Accepts a new optional keyword argument, `:exception`.
170
+ | | | #Rational | Accepts a new optional keyword argument, `:exception`.
171
171
  | ✓ | | #then | New (alias of `yield_self`)
172
172
  | ✗ | | #system | Accepts a new optional keyword argument, `:exception`. Does not close non-standard file descriptors.
173
173
  | ✗ | KeyError | .new | Accepts new optional keyword arguments, `:receiver` and `:key`.
@@ -178,9 +178,9 @@ table. The explanation will follow "**Differences:**".
178
178
  | ✗ | | #skew_symmetric? | New
179
179
  | ✗ | Method | #<< | New
180
180
  | ✗ | | #>> | New
181
- | ✗ | Module | #method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the acestors.
182
- | ✗ | | #private_method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the acestors.
183
- | ✗ | | #protected_method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the acestors.
181
+ | ✗ | Module | #method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the ancestors.
182
+ | ✗ | | #private_method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the ancestors.
183
+ | ✗ | | #protected_method_defined? | Accepts a second optional argument (default: `true`). If `false`, it only checks the class and not the ancestors.
184
184
  | ✗ | NameError | .new | Accepts new optional keyword arguments, `:receiver` and `:key`.
185
185
  | ✗ | Net::HTTP | .new | Accepts a new optional keyword argument, `:write_timeout`.
186
186
  | ✗ | | #write_timeout | New
@@ -188,7 +188,7 @@ table. The explanation will follow "**Differences:**".
188
188
  | ✗ | NilClass | #=~ | New
189
189
  | ✗ | NoMethodError | .new | Accepts new optional keyword arguments, `:receiver` and `:key`.
190
190
  | ✗ | Numeric | #step | Now returns an instance of the Enumerator::ArithmeticSequence class rather than one of the Enumerator class.
191
- | | OpenStruct | #to_h | Accepts a block that maps keys and values to new keys and values.
191
+ | | OpenStruct | #to_h | Accepts a block that maps keys and values to new keys and values.
192
192
  | ✗ | Proc | #<< | New
193
193
  | ✗ | | #>> | New
194
194
  | ✗ | | .call | No longer changes `$SAFE`.
@@ -201,7 +201,7 @@ table. The explanation will follow "**Differences:**".
201
201
  | ✗ | Set | #filter! | New (alias of `select!`)
202
202
  | ✓ | String | #split | Yields each substring to a block if given.
203
203
  | ✗ | Struct | #filter | New (alias of `select`)
204
- | | | #to_h | Accepts a block that maps keys and values to new keys and values.
204
+ | | | #to_h | Accepts a block that maps keys and values to new keys and values.
205
205
  | ✗ | Time | #+ | Preserves the timezone.
206
206
  | ✗ | | #- | Preserves the timezone.
207
207
  | ✗ | | .new | Accepts a timezone object as well as a UTC offset string.
@@ -203,6 +203,13 @@ def Polyfill(options = {}) # rubocop:disable Naming/MethodName
203
203
  refine Object.const_get(klass, false) do
204
204
  include instance_module
205
205
 
206
+ # Certain Kernel methods are private outside of Kernel
207
+ if klass == 'Object'
208
+ %i[Complex Float Integer Rational].each do |method|
209
+ private method if methods_added.include?(method)
210
+ end
211
+ end
212
+
206
213
  if native
207
214
  Polyfill::InternalUtils.ignore_warnings do
208
215
  define_method :respond_to? do |name, include_all = false|
@@ -1,7 +1,10 @@
1
1
  require_relative 'v2_6/array'
2
+ require_relative 'v2_6/enumerable'
2
3
  require_relative 'v2_6/hash'
3
4
  require_relative 'v2_6/kernel'
5
+ require_relative 'v2_6/open_struct'
4
6
  require_relative 'v2_6/string'
7
+ require_relative 'v2_6/struct'
5
8
 
6
9
  module Polyfill
7
10
  module V2_6
@@ -7,6 +7,30 @@ module Polyfill
7
7
  end
8
8
  end
9
9
 
10
+ def to_h
11
+ return super unless block_given?
12
+
13
+ block = ::Proc.new
14
+
15
+ pairs = map.with_index do |elem, i|
16
+ pair = block.call(elem)
17
+
18
+ unless pair.respond_to?(:to_ary)
19
+ raise TypeError, "wrong element type #{pair.class} at #{i} (expected array)"
20
+ end
21
+
22
+ pair = pair.to_ary
23
+
24
+ unless pair.length == 2
25
+ raise ArgumentError, "wrong array length at #{i} (expected 2, was #{pair.length})"
26
+ end
27
+
28
+ pair
29
+ end
30
+
31
+ pairs.to_h
32
+ end
33
+
10
34
  def union(*arrays)
11
35
  return self | [] if arrays.empty?
12
36
 
@@ -0,0 +1,29 @@
1
+ module Polyfill
2
+ module V2_6
3
+ module Enumerable
4
+ def to_h
5
+ return super unless block_given?
6
+
7
+ block = ::Proc.new
8
+
9
+ pairs = map do |elem|
10
+ pair = block.call(elem)
11
+
12
+ unless pair.respond_to?(:to_ary)
13
+ raise TypeError, "wrong element type #{pair.class} (expected array)"
14
+ end
15
+
16
+ pair = pair.to_ary
17
+
18
+ unless pair.length == 2
19
+ raise ArgumentError, "element has wrong array length (expected 2, was #{pair.length})"
20
+ end
21
+
22
+ pair
23
+ end
24
+
25
+ pairs.to_h
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,12 +1,34 @@
1
1
  module Polyfill
2
2
  module V2_6
3
3
  module Hash
4
+ def to_h
5
+ return super unless block_given?
6
+
7
+ block = ::Proc.new
8
+
9
+ pairs = map do |k, v|
10
+ pair = block.call(k, v)
11
+
12
+ unless pair.respond_to?(:to_ary)
13
+ raise TypeError, "wrong element type #{pair.class} (expected array)"
14
+ end
15
+
16
+ pair = pair.to_ary
17
+
18
+ unless pair.length == 2
19
+ raise ArgumentError, "element has wrong array length (expected 2, was #{pair.length})"
20
+ end
21
+
22
+ pair
23
+ end
24
+
25
+ pairs.to_h
26
+ end
27
+
4
28
  def merge(*args)
5
29
  if block_given?
6
- block = ::Proc.new
7
-
8
30
  args.each_with_object(dup) do |arg, h|
9
- h.merge!(arg, &block)
31
+ h.merge!(arg, &::Proc.new)
10
32
  end
11
33
  else
12
34
  args.each_with_object(dup) do |arg, h|
@@ -17,10 +39,8 @@ module Polyfill
17
39
 
18
40
  def merge!(*args)
19
41
  if block_given?
20
- block = ::Proc.new
21
-
22
42
  args.each_with_object(self) do |arg, h|
23
- h.merge!(arg, &block)
43
+ h.merge!(arg, &::Proc.new)
24
44
  end
25
45
  else
26
46
  args.each_with_object(self) do |arg, h|
@@ -31,10 +51,8 @@ module Polyfill
31
51
 
32
52
  def update(*args)
33
53
  if block_given?
34
- block = ::Proc.new
35
-
36
54
  args.each_with_object(self) do |arg, h|
37
- h.update(arg, &block)
55
+ h.update(arg, &::Proc.new)
38
56
  end
39
57
  else
40
58
  args.each_with_object(self) do |arg, h|
@@ -3,6 +3,51 @@ module Polyfill
3
3
  module Kernel
4
4
  using Polyfill(Kernel: %w[#yield_self], version: '2.5')
5
5
 
6
+ def Complex(*args, exception: true) # rubocop:disable Naming/MethodName
7
+ super(*args) if exception
8
+
9
+ x, y = *args
10
+ if !x.nil? && !x.is_a?(::String) && !x.is_a?(::Numeric) && !y.nil? && y.is_a?(::Numeric)
11
+ raise ::TypeError, 'not a real'
12
+ end
13
+
14
+ begin
15
+ super(*args)
16
+ rescue ::ArgumentError, ::TypeError
17
+ nil
18
+ end
19
+ end
20
+
21
+ def Float(arg, exception: true) # rubocop:disable Naming/MethodName
22
+ super(arg) if exception
23
+
24
+ begin
25
+ super(arg)
26
+ rescue ::ArgumentError, ::TypeError
27
+ nil
28
+ end
29
+ end
30
+
31
+ def Integer(arg, exception: true) # rubocop:disable Naming/MethodName
32
+ super(arg) if exception
33
+
34
+ begin
35
+ super(arg)
36
+ rescue ::ArgumentError, ::TypeError, ::FloatDomainError
37
+ nil
38
+ end
39
+ end
40
+
41
+ def Rational(*args, exception: true) # rubocop:disable Naming/MethodName
42
+ super(*args) if exception
43
+
44
+ begin
45
+ super(*args)
46
+ rescue ::ArgumentError, ::TypeError
47
+ nil
48
+ end
49
+ end
50
+
6
51
  def then
7
52
  return yield_self unless block_given?
8
53
 
@@ -0,0 +1,31 @@
1
+ require 'ostruct'
2
+
3
+ module Polyfill
4
+ module V2_6
5
+ module OpenStruct
6
+ def to_h
7
+ return super unless block_given?
8
+
9
+ block = ::Proc.new
10
+
11
+ pairs = each_pair.map do |k, v|
12
+ pair = block.call(k, v)
13
+
14
+ unless pair.respond_to?(:to_ary)
15
+ raise TypeError, "wrong element type #{pair.class} (expected array)"
16
+ end
17
+
18
+ pair = pair.to_ary
19
+
20
+ unless pair.length == 2
21
+ raise ArgumentError, "element has wrong array length (expected 2, was #{pair.length})"
22
+ end
23
+
24
+ pair
25
+ end
26
+
27
+ pairs.to_h
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module Polyfill
2
+ module V2_6
3
+ module Struct
4
+ def to_h
5
+ return super unless block_given?
6
+
7
+ block = ::Proc.new
8
+
9
+ pairs = each_pair.map do |k, v|
10
+ pair = block.call(k, v)
11
+
12
+ unless pair.respond_to?(:to_ary)
13
+ raise TypeError, "wrong element type #{pair.class} (expected array)"
14
+ end
15
+
16
+ pair = pair.to_ary
17
+
18
+ unless pair.length == 2
19
+ raise ArgumentError, "element has wrong array length (expected 2, was #{pair.length})"
20
+ end
21
+
22
+ pair
23
+ end
24
+
25
+ pairs.to_h
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Polyfill
2
- VERSION = Gem::Version.new('1.7.0'.freeze)
2
+ VERSION = Gem::Version.new('1.8.0'.freeze)
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyfill
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Lasseigne
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-17 00:00:00.000000000 Z
11
+ date: 2019-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -123,9 +123,12 @@ files:
123
123
  - lib/polyfill/v2_5/time.rb
124
124
  - lib/polyfill/v2_6.rb
125
125
  - lib/polyfill/v2_6/array.rb
126
+ - lib/polyfill/v2_6/enumerable.rb
126
127
  - lib/polyfill/v2_6/hash.rb
127
128
  - lib/polyfill/v2_6/kernel.rb
129
+ - lib/polyfill/v2_6/open_struct.rb
128
130
  - lib/polyfill/v2_6/string.rb
131
+ - lib/polyfill/v2_6/struct.rb
129
132
  - lib/polyfill/version.rb
130
133
  - polyfill.gemspec
131
134
  homepage: ''
@@ -147,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
150
  - !ruby/object:Gem::Version
148
151
  version: '0'
149
152
  requirements: []
150
- rubygems_version: 3.0.1
153
+ rubygems_version: 3.0.3
151
154
  signing_key:
152
155
  specification_version: 4
153
156
  summary: Adds newer Ruby methods to older versions.