polyfill 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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