polyfill 0.3.0 → 0.4.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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -0
  3. data/CHANGELOG.md +31 -2
  4. data/CONTRIBUTING.md +48 -17
  5. data/README.md +110 -80
  6. data/Rakefile +3 -1
  7. data/bin/console +3 -3
  8. data/lib/polyfill.rb +30 -19
  9. data/lib/polyfill/v2_4.rb +29 -12
  10. data/lib/polyfill/v2_4/array.rb +1 -1
  11. data/lib/polyfill/v2_4/array/instance.rb +3 -1
  12. data/lib/polyfill/v2_4/array/instance/concat.rb +5 -7
  13. data/lib/polyfill/v2_4/array/instance/sum.rb +17 -0
  14. data/lib/polyfill/v2_4/comparable.rb +1 -1
  15. data/lib/polyfill/v2_4/comparable/instance.rb +1 -1
  16. data/lib/polyfill/v2_4/comparable/instance/clamp.rb +11 -13
  17. data/lib/polyfill/v2_4/dir.rb +1 -1
  18. data/lib/polyfill/v2_4/dir/class.rb +1 -1
  19. data/lib/polyfill/v2_4/dir/class/empty_q.rb +5 -7
  20. data/lib/polyfill/v2_4/enumerable.rb +9 -0
  21. data/lib/polyfill/v2_4/enumerable/instance.rb +15 -0
  22. data/lib/polyfill/v2_4/enumerable/instance/chunk.rb +46 -0
  23. data/lib/polyfill/v2_4/enumerable/instance/sum.rb +52 -0
  24. data/lib/polyfill/v2_4/enumerable/instance/uniq.rb +45 -0
  25. data/lib/polyfill/v2_4/enumerator/lazy.rb +11 -0
  26. data/lib/polyfill/v2_4/enumerator/lazy/instance.rb +15 -0
  27. data/lib/polyfill/v2_4/enumerator/lazy/instance/chunk_while.rb +25 -0
  28. data/lib/polyfill/v2_4/enumerator/lazy/instance/uniq.rb +33 -0
  29. data/lib/polyfill/v2_4/file.rb +1 -1
  30. data/lib/polyfill/v2_4/file/class.rb +1 -1
  31. data/lib/polyfill/v2_4/file/class/empty_q.rb +5 -7
  32. data/lib/polyfill/v2_4/float.rb +1 -1
  33. data/lib/polyfill/v2_4/float/instance.rb +3 -3
  34. data/lib/polyfill/v2_4/float/instance/ceil.rb +8 -10
  35. data/lib/polyfill/v2_4/float/instance/floor.rb +7 -9
  36. data/lib/polyfill/v2_4/float/instance/truncate.rb +8 -10
  37. data/lib/polyfill/v2_4/hash.rb +1 -1
  38. data/lib/polyfill/v2_4/hash/instance.rb +4 -4
  39. data/lib/polyfill/v2_4/hash/instance/compact.rb +5 -7
  40. data/lib/polyfill/v2_4/hash/instance/compact_e.rb +5 -7
  41. data/lib/polyfill/v2_4/hash/instance/transform_values.rb +6 -8
  42. data/lib/polyfill/v2_4/hash/instance/transform_values_e.rb +6 -8
  43. data/lib/polyfill/v2_4/i_p_addr.rb +9 -0
  44. data/lib/polyfill/v2_4/i_p_addr/instance.rb +13 -0
  45. data/lib/polyfill/v2_4/i_p_addr/instance/equalequal.rb +27 -0
  46. data/lib/polyfill/v2_4/i_p_addr/instance/lessthanequalgreaterthan.rb +27 -0
  47. data/lib/polyfill/v2_4/integer.rb +1 -1
  48. data/lib/polyfill/v2_4/integer/instance.rb +5 -5
  49. data/lib/polyfill/v2_4/integer/instance/ceil.rb +7 -9
  50. data/lib/polyfill/v2_4/integer/instance/digits.rb +5 -7
  51. data/lib/polyfill/v2_4/integer/instance/floor.rb +7 -9
  52. data/lib/polyfill/v2_4/integer/instance/round.rb +7 -9
  53. data/lib/polyfill/v2_4/integer/instance/truncate.rb +7 -9
  54. data/lib/polyfill/v2_4/io.rb +2 -2
  55. data/lib/polyfill/v2_4/io/class.rb +2 -2
  56. data/lib/polyfill/v2_4/io/class/foreach.rb +21 -33
  57. data/lib/polyfill/v2_4/io/class/readlines.rb +12 -13
  58. data/lib/polyfill/v2_4/io/instance.rb +6 -4
  59. data/lib/polyfill/v2_4/io/instance/each_line.rb +20 -33
  60. data/lib/polyfill/v2_4/io/instance/gets.rb +12 -13
  61. data/lib/polyfill/v2_4/io/instance/lines.rb +54 -0
  62. data/lib/polyfill/v2_4/io/instance/readline.rb +12 -13
  63. data/lib/polyfill/v2_4/io/instance/readlines.rb +12 -13
  64. data/lib/polyfill/v2_4/match_data.rb +1 -1
  65. data/lib/polyfill/v2_4/match_data/instance.rb +2 -2
  66. data/lib/polyfill/v2_4/match_data/instance/named_captures.rb +5 -7
  67. data/lib/polyfill/v2_4/match_data/instance/values_at.rb +5 -7
  68. data/lib/polyfill/v2_4/numeric.rb +1 -1
  69. data/lib/polyfill/v2_4/numeric/instance.rb +6 -2
  70. data/lib/polyfill/v2_4/numeric/instance/clone.rb +23 -0
  71. data/lib/polyfill/v2_4/numeric/instance/dup.rb +23 -0
  72. data/lib/polyfill/v2_4/numeric/instance/finite_q.rb +5 -7
  73. data/lib/polyfill/v2_4/numeric/instance/infinite_q.rb +5 -7
  74. data/lib/polyfill/v2_4/object.rb +9 -0
  75. data/lib/polyfill/v2_4/object/instance.rb +11 -0
  76. data/lib/polyfill/v2_4/object/instance/clone.rb +29 -0
  77. data/lib/polyfill/v2_4/pathname.rb +9 -0
  78. data/lib/polyfill/v2_4/pathname/instance.rb +11 -0
  79. data/lib/polyfill/v2_4/pathname/instance/empty_q.rb +29 -0
  80. data/lib/polyfill/v2_4/regexp.rb +9 -0
  81. data/lib/polyfill/v2_4/regexp/instance.rb +11 -0
  82. data/lib/polyfill/v2_4/regexp/instance/match_q.rb +23 -0
  83. data/lib/polyfill/v2_4/string.rb +3 -1
  84. data/lib/polyfill/v2_4/string/class.rb +11 -0
  85. data/lib/polyfill/v2_4/string/class/new.rb +26 -0
  86. data/lib/polyfill/v2_4/string/instance.rb +12 -2
  87. data/lib/polyfill/v2_4/string/instance/casecmp_q.rb +23 -0
  88. data/lib/polyfill/v2_4/string/instance/concat.rb +5 -7
  89. data/lib/polyfill/v2_4/string/instance/each_line.rb +17 -0
  90. data/lib/polyfill/v2_4/string/instance/lines.rb +55 -0
  91. data/lib/polyfill/v2_4/string/instance/match_q.rb +23 -0
  92. data/lib/polyfill/v2_4/string/instance/prepend.rb +5 -7
  93. data/lib/polyfill/v2_4/string/instance/unpack1.rb +23 -0
  94. data/lib/polyfill/v2_4/string_io.rb +1 -1
  95. data/lib/polyfill/v2_4/string_io/instance.rb +4 -4
  96. data/lib/polyfill/v2_4/string_io/instance/each_line.rb +5 -7
  97. data/lib/polyfill/v2_4/string_io/instance/gets.rb +5 -7
  98. data/lib/polyfill/v2_4/string_io/instance/readline.rb +5 -7
  99. data/lib/polyfill/v2_4/string_io/instance/readlines.rb +5 -7
  100. data/lib/polyfill/v2_4/symbol.rb +9 -0
  101. data/lib/polyfill/v2_4/symbol/instance.rb +15 -0
  102. data/lib/polyfill/v2_4/symbol/instance/casecmp_q.rb +25 -0
  103. data/lib/polyfill/v2_4/symbol/instance/match.rb +27 -0
  104. data/lib/polyfill/v2_4/symbol/instance/match_q.rb +17 -0
  105. data/lib/polyfill/version.rb +1 -1
  106. data/polyfill.gemspec +1 -0
  107. metadata +56 -3
data/lib/polyfill/v2_4.rb CHANGED
@@ -1,29 +1,46 @@
1
- require 'polyfill/v2_4/array'
2
- require 'polyfill/v2_4/comparable'
3
- require 'polyfill/v2_4/dir'
4
- require 'polyfill/v2_4/file'
5
- require 'polyfill/v2_4/float'
6
- require 'polyfill/v2_4/hash'
7
- require 'polyfill/v2_4/integer'
8
- require 'polyfill/v2_4/io'
9
- require 'polyfill/v2_4/match_data'
10
- require 'polyfill/v2_4/numeric'
11
- require 'polyfill/v2_4/string'
12
- require 'polyfill/v2_4/string_io'
1
+ require_relative 'v2_4/enumerable'
2
+ require_relative 'v2_4/array'
3
+ require_relative 'v2_4/comparable'
4
+ require_relative 'v2_4/dir'
5
+ require_relative 'v2_4/enumerator/lazy'
6
+ require_relative 'v2_4/file'
7
+ require_relative 'v2_4/float'
8
+ require_relative 'v2_4/hash'
9
+ require_relative 'v2_4/integer'
10
+ require_relative 'v2_4/io'
11
+ require_relative 'v2_4/match_data'
12
+ require_relative 'v2_4/numeric'
13
+ require_relative 'v2_4/object'
14
+ require_relative 'v2_4/regexp'
15
+ require_relative 'v2_4/string'
16
+ require_relative 'v2_4/string_io'
17
+ require_relative 'v2_4/symbol'
18
+
19
+ require_relative 'v2_4/i_p_addr'
20
+ require_relative 'v2_4/pathname'
13
21
 
14
22
  module Polyfill
15
23
  module V2_4
16
24
  include Array
17
25
  include Comparable
18
26
  include Dir
27
+ include Enumerable
28
+ include Enumerator::Lazy
19
29
  include File
20
30
  include Float
21
31
  include Hash
22
32
  include Integer
23
33
  include IO
34
+ include Kernel
24
35
  include MatchData
25
36
  include Numeric
37
+ include Object
38
+ include Regexp
26
39
  include String
27
40
  include StringIO
41
+ include Symbol
42
+
43
+ include IPAddr
44
+ include Pathname
28
45
  end
29
46
  end
@@ -1,4 +1,4 @@
1
- require 'polyfill/v2_4/array/instance'
1
+ require_relative 'array/instance'
2
2
 
3
3
  module Polyfill
4
4
  module V2_4
@@ -1,10 +1,12 @@
1
- require 'polyfill/v2_4/array/instance/concat'
1
+ require_relative 'instance/concat'
2
+ require_relative 'instance/sum'
2
3
 
3
4
  module Polyfill
4
5
  module V2_4
5
6
  module Array
6
7
  module Instance
7
8
  include Concat
9
+ include Sum
8
10
  end
9
11
  end
10
12
  end
@@ -16,14 +16,12 @@ module Polyfill
16
16
  end
17
17
  end
18
18
 
19
- if RUBY_VERSION < '2.4.0'
20
- refine ::Array do
21
- include Method
22
- end
19
+ refine ::Array do
20
+ include Method
21
+ end
23
22
 
24
- def self.included(base)
25
- base.include Method
26
- end
23
+ def self.included(base)
24
+ base.include Method
27
25
  end
28
26
  end
29
27
  end
@@ -0,0 +1,17 @@
1
+ module Polyfill
2
+ module V2_4
3
+ module Array
4
+ module Instance
5
+ module Sum
6
+ refine ::Array do
7
+ include Enumerable::Instance::Sum::Method
8
+ end
9
+
10
+ def self.included(base)
11
+ base.include Enumerable::Instance::Sum::Method
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
- require 'polyfill/v2_4/comparable/instance'
1
+ require_relative 'comparable/instance'
2
2
 
3
3
  module Polyfill
4
4
  module V2_4
@@ -1,4 +1,4 @@
1
- require 'polyfill/v2_4/comparable/instance/clamp'
1
+ require_relative 'instance/clamp'
2
2
 
3
3
  module Polyfill
4
4
  module V2_4
@@ -15,20 +15,18 @@ module Polyfill
15
15
  end
16
16
  end
17
17
 
18
- if RUBY_VERSION < '2.4.0'
19
- refine ::Numeric do
20
- include Method
21
- end
22
- refine ::String do
23
- include Method
24
- end
25
- refine ::Time do
26
- include Method
27
- end
18
+ refine ::Numeric do
19
+ include Method
20
+ end
21
+ refine ::String do
22
+ include Method
23
+ end
24
+ refine ::Time do
25
+ include Method
26
+ end
28
27
 
29
- def self.included(base)
30
- base.include Method
31
- end
28
+ def self.included(base)
29
+ base.include Method
32
30
  end
33
31
  end
34
32
  end
@@ -1,4 +1,4 @@
1
- require 'polyfill/v2_4/dir/class'
1
+ require_relative 'dir/class'
2
2
 
3
3
  module Polyfill
4
4
  module V2_4
@@ -1,4 +1,4 @@
1
- require 'polyfill/v2_4/dir/class/empty_q'
1
+ require_relative 'class/empty_q'
2
2
 
3
3
  module Polyfill
4
4
  module V2_4
@@ -9,14 +9,12 @@ module Polyfill
9
9
  end
10
10
  end
11
11
 
12
- if RUBY_VERSION < '2.4.0'
13
- refine ::Dir.singleton_class do
14
- include Method
15
- end
12
+ refine ::Dir.singleton_class do
13
+ include Method
14
+ end
16
15
 
17
- def self.included(base)
18
- base.include Method
19
- end
16
+ def self.included(base)
17
+ base.include Method
20
18
  end
21
19
  end
22
20
  end
@@ -0,0 +1,9 @@
1
+ require_relative 'enumerable/instance'
2
+
3
+ module Polyfill
4
+ module V2_4
5
+ module Enumerable
6
+ include Instance
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'instance/chunk'
2
+ require_relative 'instance/sum'
3
+ require_relative 'instance/uniq'
4
+
5
+ module Polyfill
6
+ module V2_4
7
+ module Enumerable
8
+ module Instance
9
+ include Chunk
10
+ include Sum
11
+ include Uniq
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ module Polyfill
2
+ module V2_4
3
+ module Enumerable
4
+ module Instance
5
+ module Chunk
6
+ module Method
7
+ def chunk(*)
8
+ return enum_for(:chunk) unless block_given?
9
+
10
+ super
11
+ end
12
+ end
13
+
14
+ refine ::Array do
15
+ include Method
16
+ end
17
+ refine ::Dir do
18
+ include Method
19
+ end
20
+ refine ::Enumerator do
21
+ include Method
22
+ end
23
+ refine ::Hash do
24
+ include Method
25
+ end
26
+ refine ::IO do
27
+ include Method
28
+ end
29
+ refine ::Range do
30
+ include Method
31
+ end
32
+ refine ::StringIO do
33
+ include Method
34
+ end
35
+ refine ::Struct do
36
+ include Method
37
+ end
38
+
39
+ def self.included(base)
40
+ base.include Method
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ module Polyfill
2
+ module V2_4
3
+ module Enumerable
4
+ module Instance
5
+ module Sum
6
+ module Method
7
+ def sum(init = 0)
8
+ acc =
9
+ begin
10
+ init.dup
11
+ rescue TypeError
12
+ init
13
+ end
14
+
15
+ each do |elem|
16
+ acc += block_given? ? yield(elem) : elem
17
+ end
18
+
19
+ acc
20
+ end
21
+ end
22
+
23
+ refine ::Dir do
24
+ include Method
25
+ end
26
+ refine ::Enumerator do
27
+ include Method
28
+ end
29
+ refine ::Hash do
30
+ include Method
31
+ end
32
+ refine ::IO do
33
+ include Method
34
+ end
35
+ refine ::Range do
36
+ include Method
37
+ end
38
+ refine ::StringIO do
39
+ include Method
40
+ end
41
+ refine ::Struct do
42
+ include Method
43
+ end
44
+
45
+ def self.included(base)
46
+ base.include Method
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,45 @@
1
+ module Polyfill
2
+ module V2_4
3
+ module Enumerable
4
+ module Instance
5
+ module Uniq
6
+ module Method
7
+ def uniq
8
+ if block_given?
9
+ to_a.uniq(&Proc.new)
10
+ else
11
+ to_a.uniq
12
+ end
13
+ end
14
+ end
15
+
16
+ refine ::Dir do
17
+ include Method
18
+ end
19
+ refine ::Enumerator do
20
+ include Method
21
+ end
22
+ refine ::Hash do
23
+ include Method
24
+ end
25
+ refine ::IO do
26
+ include Method
27
+ end
28
+ refine ::Range do
29
+ include Method
30
+ end
31
+ refine ::StringIO do
32
+ include Method
33
+ end
34
+ refine ::Struct do
35
+ include Method
36
+ end
37
+
38
+ def self.included(base)
39
+ base.include Method
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'lazy/instance'
2
+
3
+ module Polyfill
4
+ module V2_4
5
+ module Enumerator
6
+ module Lazy
7
+ include Instance
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'instance/chunk_while'
2
+ require_relative 'instance/uniq'
3
+
4
+ module Polyfill
5
+ module V2_4
6
+ module Enumerator
7
+ module Lazy
8
+ module Instance
9
+ include ChunkWhile
10
+ include Uniq
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module Polyfill
2
+ module V2_4
3
+ module Enumerator
4
+ module Lazy
5
+ module Instance
6
+ module ChunkWhile
7
+ module Method
8
+ def chunk_while
9
+ super.lazy
10
+ end
11
+ end
12
+
13
+ refine ::Enumerator::Lazy do
14
+ include Method
15
+ end
16
+
17
+ def self.included(base)
18
+ base.include Method
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ require 'set'
2
+
3
+ module Polyfill
4
+ module V2_4
5
+ module Enumerator
6
+ module Lazy
7
+ module Instance
8
+ module Uniq
9
+ module Method
10
+ def uniq
11
+ seen = Set.new
12
+
13
+ ::Enumerator::Lazy.new(self) do |yielder, *values|
14
+ result = block_given? ? yield(*values) : values
15
+
16
+ yielder.<<(*values) if seen.add?(result)
17
+ end
18
+ end
19
+ end
20
+
21
+ refine ::Enumerator::Lazy 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
33
+ end