backports 1.12.3 → 1.13.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.
- data/VERSION.yml +2 -2
- data/backports.gemspec +2 -2
- data/lib/backports.rb +0 -1
- data/lib/backports/1.8.7/array.rb +45 -15
- metadata +2 -2
data/VERSION.yml
CHANGED
data/backports.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{backports}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.13.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marc-Andr\303\251 Lafortune"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-20}
|
13
13
|
s.description = %q{ Essential backports that enable some of the really nice features of ruby 1.8.7, ruby 1.9 and rails from ruby 1.8.6 and earlier.
|
14
14
|
}
|
15
15
|
s.email = %q{github@marc-andre.ca}
|
data/lib/backports.rb
CHANGED
@@ -90,6 +90,31 @@ class Array
|
|
90
90
|
alias_method :find_index, :index
|
91
91
|
end
|
92
92
|
|
93
|
+
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
|
94
|
+
def permutation(num = Backports::Undefined, &block)
|
95
|
+
return to_enum(:permutation, num) unless block_given?
|
96
|
+
num = num.equal?(Backports::Undefined) ?
|
97
|
+
size :
|
98
|
+
Backports.coerce_to(num, Fixnum, :to_int)
|
99
|
+
return self unless (0..size).include? num
|
100
|
+
|
101
|
+
final_lambda = lambda do |partial, remain|
|
102
|
+
yield partial
|
103
|
+
end
|
104
|
+
|
105
|
+
outer_lambda = num.times.inject(final_lambda) do |proc, ignore|
|
106
|
+
lambda do |partial, remain|
|
107
|
+
remain.each_with_index do |val, i|
|
108
|
+
new_remain = remain.dup
|
109
|
+
new_remain.delete_at(i)
|
110
|
+
proc.call(partial.dup << val, new_remain)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
outer_lambda.call([], self)
|
116
|
+
end unless method_defined? :permutation
|
117
|
+
|
93
118
|
# pop. Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
|
94
119
|
unless ([1].pop(1) rescue false)
|
95
120
|
def pop_with_optional_argument(n = Backports::Undefined)
|
@@ -105,22 +130,27 @@ class Array
|
|
105
130
|
|
106
131
|
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
|
107
132
|
def product(*arg)
|
108
|
-
# Implementation notes: We build
|
109
|
-
# by building it up successively using "inject" and starting
|
110
|
-
#
|
111
|
-
# simply returns an array, so you'll find a simple call to "to_a" at the end.
|
133
|
+
# Implementation notes: We build a block that will generate all the combinations
|
134
|
+
# by building it up successively using "inject" and starting with one
|
135
|
+
# responsible to append the values.
|
112
136
|
#
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
137
|
+
result = []
|
138
|
+
|
139
|
+
arg.map!{|x| Type.coerce_to(x, Array, :to_ary)}
|
140
|
+
arg.reverse! # to get the results in the same order as in MRI, vary the last argument first
|
141
|
+
arg.push self
|
142
|
+
|
143
|
+
outer_lambda = arg.inject(result.method(:push)) do |proc, values|
|
144
|
+
lambda do |partial|
|
145
|
+
values.each do |val|
|
146
|
+
proc.call(partial.dup << val)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
outer_lambda.call([])
|
152
|
+
|
153
|
+
result
|
124
154
|
end unless method_defined? :product
|
125
155
|
|
126
156
|
# rindex. Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Marc-Andr\xC3\xA9 Lafortune"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-20 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|