mirror of https://github.com/rails/rails
remove Array#sample from core_ext
This commit is contained in:
parent
618cb44291
commit
c52ce1dae2
|
@ -4,5 +4,4 @@ require 'active_support/core_ext/array/uniq_by'
|
|||
require 'active_support/core_ext/array/conversions'
|
||||
require 'active_support/core_ext/array/extract_options'
|
||||
require 'active_support/core_ext/array/grouping'
|
||||
require 'active_support/core_ext/array/random_access'
|
||||
require 'active_support/core_ext/array/prepend_and_append'
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
class Array
|
||||
# Backport of Array#sample based on Marc-Andre Lafortune's https://github.com/marcandre/backports/
|
||||
# Returns a random element or +n+ random elements from the array.
|
||||
# If the array is empty and +n+ is nil, returns <tt>nil</tt>.
|
||||
# If +n+ is passed and its value is less than 0, it raises an +ArgumentError+ exception.
|
||||
# If the value of +n+ is equal or greater than 0 it returns <tt>[]</tt>.
|
||||
#
|
||||
# [1,2,3,4,5,6].sample # => 4
|
||||
# [1,2,3,4,5,6].sample(3) # => [2, 4, 5]
|
||||
# [1,2,3,4,5,6].sample(-3) # => ArgumentError: negative array size
|
||||
# [].sample # => nil
|
||||
# [].sample(3) # => []
|
||||
def sample(n=nil)
|
||||
return self[Kernel.rand(size)] if n.nil?
|
||||
n = n.to_int
|
||||
rescue Exception => e
|
||||
raise TypeError, "Coercion error: #{n.inspect}.to_int => Integer failed:\n(#{e.message})"
|
||||
else
|
||||
raise TypeError, "Coercion error: obj.to_int did NOT return an Integer (was #{n.class})" unless n.kind_of? Integer
|
||||
raise ArgumentError, "negative array size" if n < 0
|
||||
n = size if n > size
|
||||
result = Array.new(self)
|
||||
n.times do |i|
|
||||
r = i + Kernel.rand(size - i)
|
||||
result[i], result[r] = result[r], result[i]
|
||||
end
|
||||
result[n..size] = []
|
||||
result
|
||||
end unless method_defined? :sample
|
||||
end
|
|
@ -363,34 +363,6 @@ class ArrayUniqByTests < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
class ArrayExtRandomTests < ActiveSupport::TestCase
|
||||
def test_sample_from_array
|
||||
assert_nil [].sample
|
||||
assert_equal [], [].sample(5)
|
||||
assert_equal 42, [42].sample
|
||||
assert_equal [42], [42].sample(5)
|
||||
|
||||
a = [:foo, :bar, 42]
|
||||
s = a.sample(2)
|
||||
assert_equal 2, s.size
|
||||
assert_equal 1, (a-s).size
|
||||
assert_equal [], a-(0..20).sum{a.sample(2)}
|
||||
|
||||
o = Object.new
|
||||
def o.to_int; 1; end
|
||||
assert_equal [0], [0].sample(o)
|
||||
|
||||
o = Object.new
|
||||
assert_raises(TypeError) { [0].sample(o) }
|
||||
|
||||
o = Object.new
|
||||
def o.to_int; ''; end
|
||||
assert_raises(TypeError) { [0].sample(o) }
|
||||
|
||||
assert_raises(ArgumentError) { [0].sample(-7) }
|
||||
end
|
||||
end
|
||||
|
||||
class ArrayWrapperTests < Test::Unit::TestCase
|
||||
class FakeCollection
|
||||
def to_ary
|
||||
|
|
Loading…
Reference in New Issue