polyfill 0.5.0 → 0.6.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/CONTRIBUTING.md +11 -0
  4. data/README.md +73 -33
  5. data/lib/polyfill.rb +74 -61
  6. data/lib/polyfill/v2_3.rb +8 -0
  7. data/lib/polyfill/v2_3/array.rb +9 -0
  8. data/lib/polyfill/v2_3/array/instance.rb +11 -0
  9. data/lib/polyfill/v2_3/array/instance/dig.rb +42 -0
  10. data/lib/polyfill/v2_3/enumerable/instance.rb +4 -0
  11. data/lib/polyfill/v2_3/enumerable/instance/chunk_while.rb +2 -2
  12. data/lib/polyfill/v2_3/enumerable/instance/grep_v.rb +48 -0
  13. data/lib/polyfill/v2_3/enumerable/instance/slice_before.rb +48 -0
  14. data/lib/polyfill/v2_3/enumerator/lazy.rb +11 -0
  15. data/lib/polyfill/v2_3/enumerator/lazy/instance.rb +13 -0
  16. data/lib/polyfill/v2_3/enumerator/lazy/instance/grep_v.rb +31 -0
  17. data/lib/polyfill/v2_3/hash.rb +9 -0
  18. data/lib/polyfill/v2_3/hash/instance.rb +15 -0
  19. data/lib/polyfill/v2_3/hash/instance/dig.rb +17 -0
  20. data/lib/polyfill/v2_3/hash/instance/fetch_values.rb +32 -0
  21. data/lib/polyfill/v2_3/hash/instance/to_proc.rb +23 -0
  22. data/lib/polyfill/v2_3/string.rb +2 -0
  23. data/lib/polyfill/v2_3/string/instance.rb +13 -0
  24. data/lib/polyfill/v2_3/string/instance/minus_unary.rb +23 -0
  25. data/lib/polyfill/v2_3/string/instance/plus_unary.rb +23 -0
  26. data/lib/polyfill/v2_3/struct.rb +9 -0
  27. data/lib/polyfill/v2_3/struct/instance.rb +11 -0
  28. data/lib/polyfill/v2_3/struct/instance/dig.rb +17 -0
  29. data/lib/polyfill/v2_4/enumerable/instance/uniq.rb +1 -1
  30. data/lib/polyfill/v2_4/io/class/foreach.rb +1 -1
  31. data/lib/polyfill/v2_4/io/instance/each_line.rb +1 -1
  32. data/lib/polyfill/v2_4/io/instance/lines.rb +1 -1
  33. data/lib/polyfill/v2_4/string/instance/lines.rb +1 -1
  34. data/lib/polyfill/v2_4/symbol/instance/match.rb +1 -1
  35. data/lib/polyfill/version.rb +1 -1
  36. metadata +21 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 237acd76888542aca87f442fd066883269ddaee0
4
- data.tar.gz: ee1bc441b77b3a6277bbcc4385703d945cc79828
3
+ metadata.gz: 378610a792ea5873a656859b5e1bd5d46402dd70
4
+ data.tar.gz: d0d81f15485b7bc5de7f0480071aa32d90f583f2
5
5
  SHA512:
6
- metadata.gz: ccfcb0140e7d2d14da8678133dc7544984deedacac903699cbb71dbba6be6408b3560d9ee7424045a681887b409fd6da6245e53bd80becd74ae23cdf21d544ff
7
- data.tar.gz: bc0626751a50adb7470bcd992a27b09aceb594f72b28f43833a06370e15b00b7811a5c000245b518fd11fe361e37c5527cd30f804cf276f360475089d64ad2c8
6
+ metadata.gz: c9a61e5c76de85f31c9ee24ec75e125102b78acd7ed235e1227c55e3792bacb6bf991eadc90f2695141e3978abdd8ce4720d00e137bf0a7e20197ae213e7ea7b
7
+ data.tar.gz: f3b1f7bfd59f1fd341c061a05ce48804db9e933db5b8bad4e664473bcaf586a37cb1bb84e63c4f55dd60fde0271f2d57aa64362723263539327f3c9adac5ea51
data/CHANGELOG.md CHANGED
@@ -1,8 +1,28 @@
1
+ # [0.6.0][] (2017-04-06)
2
+
3
+ ## Fix
4
+
5
+ - You can now use the `:version` option with no other specification
6
+
7
+ ## Added
8
+
9
+ - v2.3 Array#dig
10
+ - v2.3 Enumerable#grep_v
11
+ - v2.3 Enumerable#slice_before
12
+ - v2.3 Enumerator::Lazy#grep_v
13
+ - v2.3 Hash#dig
14
+ - v2.3 Hash#fetch_values
15
+ - v2.3 Hash#to_proc
16
+ - v2.3 String#+@
17
+ - v2.3 String#-@
18
+ - v2.3 Struct#dig
19
+
1
20
  # [0.5.0][] (2017-03-26)
2
21
 
3
22
  ## Added
23
+
4
24
  - Support for Ruby 2.2
5
- - :version option to limit the max acceptable version for changes
25
+ - `:version` option to limit the max acceptable version for changes
6
26
  - v2.3 String.new
7
27
  - v2.3 Enumerable#chunk_while
8
28
 
data/CONTRIBUTING.md CHANGED
@@ -7,6 +7,16 @@ please add it to the documentation.
7
7
 
8
8
  ### Code
9
9
 
10
+ A list of changes can be found at:
11
+
12
+ * https://raw.githubusercontent.com/ruby/ruby/v2_4_1/NEWS
13
+ * https://raw.githubusercontent.com/ruby/ruby/v2_3_4/NEWS
14
+ * https://raw.githubusercontent.com/ruby/ruby/v2_2_7/NEWS
15
+ * https://raw.githubusercontent.com/ruby/ruby/v2_1_10/NEWS
16
+ * https://raw.githubusercontent.com/ruby/ruby/v2_0_0_648/NEWS
17
+
18
+ Specific changes can be found by going to the [Ruby bug/feature tracker].
19
+
10
20
  These are the steps that you'll need to follow for submitting code:
11
21
 
12
22
  1. [Fork](#fork)
@@ -88,3 +98,4 @@ eyes catch more issues. After everything is fixed: VICTORY!
88
98
  [documentation]: README.md
89
99
  [Fork]: https://github.com/AaronLasseigne/polyfill/fork
90
100
  [Ruby Spec Suite]: https://github.com/ruby/spec
101
+ [Ruby bug/feature tracker]: https://bugs.ruby-lang.org
data/README.md CHANGED
@@ -34,7 +34,7 @@ See the [implementation table](#implementation-table) for specifics about what h
34
34
  Add it to your Gemfile:
35
35
 
36
36
  ```ruby
37
- gem 'polyfill', '0.5.0'
37
+ gem 'polyfill', '0.6.0'
38
38
  ```
39
39
 
40
40
  Or install it manually:
@@ -206,38 +206,78 @@ end
206
206
 
207
207
  ### 2.2 to 2.3
208
208
 
209
- | Object | Method | Implemented | Notes |
210
- | ---------------- | ------------------------ | ----------- | ----- |
211
- | ARGF | #read_nonblock | No |
212
- | Array | #bsearch_index | No |
213
- | | #dig | No |
214
- | Comparable | #== | No |
215
- | Enumerable | #chunk | No |
216
- | | #chunk_while | Yes |
217
- | | #grep_v | No |
218
- | | #slice_before | No |
219
- | Enumerator::Lazy | #grep_v | No |
220
- | File | .mkfifo | No |
221
- | Hash | #< | No |
222
- | | #<= | No |
223
- | | #> | No |
224
- | | #>= | No |
225
- | | #dig | No |
226
- | | #fetch_values | No |
227
- | | #to_proc | No |
228
- | IO | #advise | No |
229
- | Kernel | #loop | No |
230
- | Module | #deprecate_constant | No |
231
- | NameError | #receiver | No |
232
- | Numeric | #negative? | No |
233
- | | #positive? | No |
234
- | Queue | #close | No |
235
- | String | #+@ | No |
236
- | | #-@ | No |
237
- | | .new | Yes |
238
- | Struct | #dig | No |
239
- | Thread | #name | No |
240
- | | #name= | No |
209
+ | Object | Method | Implemented | Notes |
210
+ | ----------------------- | ------------------------ | ----------- | ----- |
211
+ | ARGF | #read_nonblock | No |
212
+ | Array | #bsearch_index | No |
213
+ | | #dig | Yes |
214
+ | | #flatten | No |
215
+ | | #flatten! | No |
216
+ | | #inspect | No |
217
+ | | #pack | No |
218
+ | Base64 | .urlsafe_encode64 | No |
219
+ | | .urlsafe_decode64 | No |
220
+ | BasicSocket | #recv | No |
221
+ | | #recv_nonblock | No |
222
+ | | #recvmsg_nonblock | No |
223
+ | | #sendmsg_nonblock | No |
224
+ | Comparable | #== | No |
225
+ | Coverage | .peek_result | No |
226
+ | Enumerable | #chunk | No |
227
+ | | #chunk_while | Yes |
228
+ | | #grep_v | Yes |
229
+ | | #slice_before | Yes |
230
+ | Enumerator::Lazy | #grep_v | Yes |
231
+ | File | .mkfifo | No |
232
+ | File::Stat | #ino | No |
233
+ | Hash | #< | No |
234
+ | | #<= | No |
235
+ | | #> | No |
236
+ | | #>= | No |
237
+ | | #dig | Yes |
238
+ | | #fetch_values | Yes |
239
+ | | #inspect | No |
240
+ | | #to_proc | Partial | Works in every respect but returns a `lambda` instead of a `proc`. Returning a `proc` may be an error in MRI's implementation. See: https://bugs.ruby-lang.org/issues/12671
241
+ | IO | #advise | No |
242
+ | | #close | No |
243
+ | | #each_codepoint | No |
244
+ | | #wait_readable | No |
245
+ | Kernel | #loop | No |
246
+ | Logger | #level= | No |
247
+ | | #reopen | No |
248
+ | Module | #define_method | No |
249
+ | | #deprecate_constant | No |
250
+ | NameError | #receiver | No |
251
+ | Net::FTP | .default_passive= | No |
252
+ | | #mlst | No |
253
+ | | #mlsd | No |
254
+ | Net::HTTP | #open_timeout | No |
255
+ | Numeric | #negative? | No |
256
+ | | #positive? | No |
257
+ | Object | #define_singleton_method | No |
258
+ | | #timeout | No |
259
+ | ObjectSpace | .count_symbols | No |
260
+ | | .count_imemo_objects | No |
261
+ | | .internal_class_of | No |
262
+ | | .internal_super_of | No |
263
+ | OpenSSL::SSL::SSLSocket | #accept_nonblock | No |
264
+ | | #connect_nonblock | No |
265
+ | Pathname | #ascend | No |
266
+ | | #descend | No |
267
+ | Queue | #close | No |
268
+ | Socket | #accept_nonblock | No |
269
+ | | #connect_nonblock | No |
270
+ | String | #+@ | Yes |
271
+ | | #-@ | Yes |
272
+ | | .new | Yes |
273
+ | | #unpack | No |
274
+ | StringIO | #set_encoding | No |
275
+ | Struct | #dig | Yes |
276
+ | TCPServer | #accept_nonblock | No |
277
+ | Thread | #name | No |
278
+ | | #name= | No |
279
+ | UNIXServer | #accept_nonblock | No |
280
+ | Vector | #round | No |
241
281
 
242
282
  ## Contributing
243
283
 
data/lib/polyfill.rb CHANGED
@@ -6,6 +6,8 @@ require 'polyfill/v2_4'
6
6
  module Polyfill
7
7
  include V2_3
8
8
  include V2_4
9
+
10
+ module Parcel; end
9
11
  end
10
12
 
11
13
  def Polyfill(options) # rubocop:disable Style/MethodName
@@ -32,80 +34,91 @@ def Polyfill(options) # rubocop:disable Style/MethodName
32
34
 
33
35
  current_ruby_version = RUBY_VERSION[/\A(\d+\.\d+)/, 1]
34
36
 
35
- objects.each do |full_name, methods|
36
- object_module_names = full_name.to_s.split('::')
37
-
38
- object_modules = versions
39
- .map do |version_number, version_module|
40
- begin
41
- final_module = object_module_names
42
- .reduce(version_module) do |current_mod, name|
43
- current_mod.const_get(name, false)
44
- end
45
-
46
- [version_number, final_module]
47
- rescue NameError
48
- nil
49
- end
37
+ if objects.empty?
38
+ mod.module_eval do
39
+ versions.each do |_, object_module|
40
+ include object_module
50
41
  end
51
- .compact
52
-
53
- if object_modules.empty?
54
- raise ArgumentError, %Q("#{full_name}" is not a valid class or has no updates)
55
42
  end
56
-
57
- if methods == :all
58
- mod.module_eval do
59
- object_modules.each do |(version_number, object_module)|
60
- include object_module if version_number > current_ruby_version
43
+ else
44
+ objects.each do |full_name, methods|
45
+ object_module_names = full_name.to_s.split('::')
46
+
47
+ object_modules = versions
48
+ .map do |version_number, version_module|
49
+ begin
50
+ final_module = object_module_names
51
+ .reduce(version_module) do |current_mod, name|
52
+ current_mod.const_get(name, false)
53
+ end
54
+
55
+ [version_number, final_module]
56
+ rescue NameError
57
+ nil
58
+ end
61
59
  end
60
+ .compact
61
+
62
+ if object_modules.empty?
63
+ raise ArgumentError, %Q("#{full_name}" is not a valid class or has no updates)
62
64
  end
63
- else
64
- methods.each do |method|
65
- type =
66
- case method[0]
67
- when '.'
68
- :Class
69
- when '#'
70
- :Instance
71
- else
72
- raise ArgumentError, %Q("#{method}" must start with a "." if it's a class method or "#" if it's an instance method)
65
+
66
+ if methods == :all
67
+ mod.module_eval do
68
+ object_modules.each do |version_number, object_module|
69
+ include object_module if version_number > current_ruby_version
73
70
  end
71
+ end
72
+ else
73
+ methods.each do |method|
74
+ type =
75
+ case method[0]
76
+ when '.'
77
+ :Class
78
+ when '#'
79
+ :Instance
80
+ else
81
+ raise ArgumentError, %Q("#{method}" must start with a "." if it's a class method or "#" if it's an instance method)
82
+ end
74
83
 
75
- method_name = method[1..-1]
76
- symbol_conversions = {
77
- '=' => 'equal',
78
- '<' => 'lessthan',
79
- '>' => 'greaterthan',
80
- '?' => '_q',
81
- '!' => '_e'
82
- }
83
- method_name.gsub!(/[#{symbol_conversions.keys.join}]/o, symbol_conversions)
84
- method_name.capitalize!
85
- method_name.gsub!(/_(.)/) { |match| match[1].capitalize }
86
-
87
- method_modules = object_modules
88
- .map do |(version_number, object_module)|
89
- begin
90
- [version_number, object_module.const_get(type, false).const_get(method_name, false)]
91
- rescue NameError
92
- nil
84
+ method_name = method[1..-1]
85
+ symbol_conversions = {
86
+ '-' => 'minus', # must come first otherwise it creates a range in the regexp
87
+ '+' => 'plus',
88
+ '@' => '_unary',
89
+ '=' => 'equal',
90
+ '<' => 'lessthan',
91
+ '>' => 'greaterthan',
92
+ '?' => '_q',
93
+ '!' => '_e'
94
+ }
95
+ method_name.gsub!(/[#{symbol_conversions.keys.join}]/o, symbol_conversions)
96
+ method_name.capitalize!
97
+ method_name.gsub!(/_(.)/) { |match| match[1].capitalize }
98
+
99
+ method_modules = object_modules
100
+ .map do |version_number, object_module|
101
+ begin
102
+ [version_number, object_module.const_get(type, false).const_get(method_name, false)]
103
+ rescue NameError
104
+ nil
105
+ end
93
106
  end
94
- end
95
- .compact
107
+ .compact
96
108
 
97
- if method_modules.empty?
98
- raise ArgumentError, %Q("#{method}" is not a valid method on #{full_name} or has no updates)
99
- end
109
+ if method_modules.empty?
110
+ raise ArgumentError, %Q("#{method}" is not a valid method on #{full_name} or has no updates)
111
+ end
100
112
 
101
- mod.module_eval do
102
- method_modules.each do |(version_number, method_module)|
103
- include method_module if version_number > current_ruby_version
113
+ mod.module_eval do
114
+ method_modules.each do |version_number, method_module|
115
+ include method_module if version_number > current_ruby_version
116
+ end
104
117
  end
105
118
  end
106
119
  end
107
120
  end
108
121
  end
109
122
 
110
- mod
123
+ Polyfill::Parcel.const_set("O#{mod.object_id}", mod)
111
124
  end
data/lib/polyfill/v2_3.rb CHANGED
@@ -1,9 +1,17 @@
1
+ require_relative 'v2_3/array'
2
+ require_relative 'v2_3/hash'
1
3
  require_relative 'v2_3/enumerable'
4
+ require_relative 'v2_3/enumerator/lazy'
2
5
  require_relative 'v2_3/string'
6
+ require_relative 'v2_3/struct'
3
7
 
4
8
  module Polyfill
5
9
  module V2_3
10
+ include Array
11
+ include Hash
6
12
  include Enumerable
13
+ include Enumerator::Lazy
7
14
  include String
15
+ include Struct
8
16
  end
9
17
  end
@@ -0,0 +1,9 @@
1
+ require_relative 'array/instance'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Array
6
+ include Instance
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'instance/dig'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Array
6
+ module Instance
7
+ include Dig
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,42 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Array
4
+ module Instance
5
+ module Dig
6
+ module Method
7
+ def dig(head, *rest)
8
+ [head, *rest].reduce(self) do |value, accessor|
9
+ next_value =
10
+ case value
11
+ when ::Array
12
+ value.at(accessor)
13
+ when ::Hash
14
+ value[accessor]
15
+ when ::Struct
16
+ value[accessor] if value.members.include?(accessor)
17
+ else
18
+ begin
19
+ break value.dig(*rest)
20
+ rescue NoMethodError
21
+ raise TypeError, "#{value.class} does not have a #dig method"
22
+ end
23
+ end
24
+
25
+ break nil if next_value.nil?
26
+ next_value
27
+ end
28
+ end
29
+ end
30
+
31
+ refine ::Array do
32
+ include Method
33
+ end
34
+
35
+ def self.included(base)
36
+ base.include Method
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,10 +1,14 @@
1
1
  require_relative 'instance/chunk_while'
2
+ require_relative 'instance/grep_v'
3
+ require_relative 'instance/slice_before'
2
4
 
3
5
  module Polyfill
4
6
  module V2_3
5
7
  module Enumerable
6
8
  module Instance
7
9
  include ChunkWhile
10
+ include GrepV
11
+ include SliceBefore
8
12
  end
9
13
  end
10
14
  end
@@ -7,11 +7,11 @@ module Polyfill
7
7
  module ChunkWhile
8
8
  module Method
9
9
  def chunk_while
10
- block = Proc.new
10
+ block = ::Proc.new
11
11
 
12
12
  return [self] if size == 1
13
13
 
14
- Enumerator.new do |yielder|
14
+ ::Enumerator.new do |yielder|
15
15
  output = []
16
16
  each_cons(2).with_index(1) do |(a, b), run|
17
17
  if run == size - 1
@@ -0,0 +1,48 @@
1
+ require 'stringio'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Enumerable
6
+ module Instance
7
+ module GrepV
8
+ module Method
9
+ def grep_v(pattern)
10
+ output = to_a - grep(pattern)
11
+ output.map!(&::Proc.new) if block_given?
12
+ output
13
+ end
14
+ end
15
+
16
+ refine ::Array do
17
+ include Method
18
+ end
19
+ refine ::Dir do
20
+ include Method
21
+ end
22
+ refine ::Enumerator do
23
+ include Method
24
+ end
25
+ refine ::Hash do
26
+ include Method
27
+ end
28
+ refine ::IO do
29
+ include Method
30
+ end
31
+ refine ::Range do
32
+ include Method
33
+ end
34
+ refine ::StringIO do
35
+ include Method
36
+ end
37
+ refine ::Struct do
38
+ include Method
39
+ end
40
+
41
+ def self.included(base)
42
+ base.include Method
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Enumerable
4
+ module Instance
5
+ module SliceBefore
6
+ module Method
7
+ def slice_before(*args)
8
+ if !args.empty? && block_given?
9
+ raise ArgumentError, 'wrong number of arguments (given 1, expected 0)'
10
+ end
11
+
12
+ super
13
+ end
14
+ end
15
+
16
+ refine ::Array do
17
+ include Method
18
+ end
19
+ refine ::Dir do
20
+ include Method
21
+ end
22
+ refine ::Enumerator do
23
+ include Method
24
+ end
25
+ refine ::Hash do
26
+ include Method
27
+ end
28
+ refine ::IO do
29
+ include Method
30
+ end
31
+ refine ::Range do
32
+ include Method
33
+ end
34
+ refine ::StringIO do
35
+ include Method
36
+ end
37
+ refine ::Struct do
38
+ include Method
39
+ end
40
+
41
+ def self.included(base)
42
+ base.include Method
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'lazy/instance'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Enumerator
6
+ module Lazy
7
+ include Instance
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'instance/grep_v'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Enumerator
6
+ module Lazy
7
+ module Instance
8
+ include GrepV
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Enumerator
4
+ module Lazy
5
+ module Instance
6
+ module GrepV
7
+ module Method
8
+ using V2_3::Enumerable::Instance::GrepV
9
+
10
+ def grep_v(pattern)
11
+ ::Enumerator::Lazy.new(self) do |yielder, element|
12
+ next if pattern === element # rubocop:disable Style/CaseEquality
13
+
14
+ yielder << (block_given? ? yield(element) : element)
15
+ end
16
+ end
17
+ end
18
+
19
+ refine ::Enumerator::Lazy do
20
+ include Method
21
+ end
22
+
23
+ def self.included(base)
24
+ base.include Method
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'hash/instance'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Hash
6
+ include Instance
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'instance/dig'
2
+ require_relative 'instance/fetch_values'
3
+ require_relative 'instance/to_proc'
4
+
5
+ module Polyfill
6
+ module V2_3
7
+ module Hash
8
+ module Instance
9
+ include Dig
10
+ include FetchValues
11
+ include ToProc
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Hash
4
+ module Instance
5
+ module Dig
6
+ refine ::Hash do
7
+ include Array::Instance::Dig::Method
8
+ end
9
+
10
+ def self.included(base)
11
+ base.include Array::Instance::Dig::Method
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Hash
4
+ module Instance
5
+ module FetchValues
6
+ module Method
7
+ def fetch_values(*keys)
8
+ keys.each_with_object([]) do |key, values|
9
+ value =
10
+ if block_given?
11
+ fetch(key, &::Proc.new)
12
+ else
13
+ fetch(key)
14
+ end
15
+
16
+ values << value
17
+ end
18
+ end
19
+ end
20
+
21
+ refine ::Hash do
22
+ include Method
23
+ end
24
+
25
+ def self.included(base)
26
+ base.include Method
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Hash
4
+ module Instance
5
+ module ToProc
6
+ module Method
7
+ def to_proc
8
+ method(:[]).to_proc
9
+ end
10
+ end
11
+
12
+ refine ::Hash do
13
+ include Method
14
+ end
15
+
16
+ def self.included(base)
17
+ base.include Method
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,9 +1,11 @@
1
1
  require_relative 'string/class'
2
+ require_relative 'string/instance'
2
3
 
3
4
  module Polyfill
4
5
  module V2_3
5
6
  module String
6
7
  include Class
8
+ include Instance
7
9
  end
8
10
  end
9
11
  end
@@ -0,0 +1,13 @@
1
+ require_relative 'instance/plus_unary'
2
+ require_relative 'instance/minus_unary'
3
+
4
+ module Polyfill
5
+ module V2_3
6
+ module String
7
+ module Instance
8
+ include PlusUnary
9
+ include MinusUnary
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module String
4
+ module Instance
5
+ module MinusUnary
6
+ module Method
7
+ def -@
8
+ frozen? ? self : dup.freeze
9
+ end
10
+ end
11
+
12
+ refine ::String do
13
+ include Method
14
+ end
15
+
16
+ def self.included(base)
17
+ base.include Method
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module String
4
+ module Instance
5
+ module PlusUnary
6
+ module Method
7
+ def +@
8
+ frozen? ? dup : self
9
+ end
10
+ end
11
+
12
+ refine ::String do
13
+ include Method
14
+ end
15
+
16
+ def self.included(base)
17
+ base.include Method
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'struct/instance'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Struct
6
+ include Instance
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'instance/dig'
2
+
3
+ module Polyfill
4
+ module V2_3
5
+ module Struct
6
+ module Instance
7
+ include Dig
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module Polyfill
2
+ module V2_3
3
+ module Struct
4
+ module Instance
5
+ module Dig
6
+ refine ::Struct do
7
+ include Array::Instance::Dig::Method
8
+ end
9
+
10
+ def self.included(base)
11
+ base.include Array::Instance::Dig::Method
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,7 +6,7 @@ module Polyfill
6
6
  module Method
7
7
  def uniq
8
8
  if block_given?
9
- to_a.uniq(&Proc.new)
9
+ to_a.uniq(&::Proc.new)
10
10
  else
11
11
  to_a.uniq
12
12
  end
@@ -34,7 +34,7 @@ module Polyfill
34
34
  yield(line.chomp(separator))
35
35
  end
36
36
  else
37
- Proc.new
37
+ ::Proc.new
38
38
  end
39
39
 
40
40
  super(name, *others, &block)
@@ -33,7 +33,7 @@ module Polyfill
33
33
  yield(line.chomp(separator))
34
34
  end
35
35
  else
36
- Proc.new
36
+ ::Proc.new
37
37
  end
38
38
 
39
39
  super(*others, &block)
@@ -33,7 +33,7 @@ module Polyfill
33
33
  yield(line.chomp(separator))
34
34
  end
35
35
  else
36
- Proc.new
36
+ ::Proc.new
37
37
  end
38
38
 
39
39
  super(*others, &block)
@@ -34,7 +34,7 @@ module Polyfill
34
34
  yield(line.chomp(separator))
35
35
  end
36
36
  else
37
- Proc.new
37
+ ::Proc.new
38
38
  end
39
39
 
40
40
  super(*others, &block)
@@ -6,7 +6,7 @@ module Polyfill
6
6
  module Method
7
7
  def match(*args)
8
8
  if block_given?
9
- to_s.match(*args, &Proc.new)
9
+ to_s.match(*args, &::Proc.new)
10
10
  else
11
11
  to_s.match(*args)
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module Polyfill
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.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: 0.5.0
4
+ version: 0.6.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: 2017-03-26 00:00:00.000000000 Z
11
+ date: 2017-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -88,12 +88,31 @@ files:
88
88
  - lib/polyfill.rb
89
89
  - lib/polyfill/utils.rb
90
90
  - lib/polyfill/v2_3.rb
91
+ - lib/polyfill/v2_3/array.rb
92
+ - lib/polyfill/v2_3/array/instance.rb
93
+ - lib/polyfill/v2_3/array/instance/dig.rb
91
94
  - lib/polyfill/v2_3/enumerable.rb
92
95
  - lib/polyfill/v2_3/enumerable/instance.rb
93
96
  - lib/polyfill/v2_3/enumerable/instance/chunk_while.rb
97
+ - lib/polyfill/v2_3/enumerable/instance/grep_v.rb
98
+ - lib/polyfill/v2_3/enumerable/instance/slice_before.rb
99
+ - lib/polyfill/v2_3/enumerator/lazy.rb
100
+ - lib/polyfill/v2_3/enumerator/lazy/instance.rb
101
+ - lib/polyfill/v2_3/enumerator/lazy/instance/grep_v.rb
102
+ - lib/polyfill/v2_3/hash.rb
103
+ - lib/polyfill/v2_3/hash/instance.rb
104
+ - lib/polyfill/v2_3/hash/instance/dig.rb
105
+ - lib/polyfill/v2_3/hash/instance/fetch_values.rb
106
+ - lib/polyfill/v2_3/hash/instance/to_proc.rb
94
107
  - lib/polyfill/v2_3/string.rb
95
108
  - lib/polyfill/v2_3/string/class.rb
96
109
  - lib/polyfill/v2_3/string/class/new.rb
110
+ - lib/polyfill/v2_3/string/instance.rb
111
+ - lib/polyfill/v2_3/string/instance/minus_unary.rb
112
+ - lib/polyfill/v2_3/string/instance/plus_unary.rb
113
+ - lib/polyfill/v2_3/struct.rb
114
+ - lib/polyfill/v2_3/struct/instance.rb
115
+ - lib/polyfill/v2_3/struct/instance/dig.rb
97
116
  - lib/polyfill/v2_4.rb
98
117
  - lib/polyfill/v2_4/array.rb
99
118
  - lib/polyfill/v2_4/array/instance.rb