Skip to content
Browse files

Merge pull request #4101 from nashby/ruby-18-cleaning

remove Array#sample from core_ext
  • Loading branch information...
2 parents 2ba3d13 + c52ce1d commit 2e9eb0a3ca88bf2fe402261ef684fb215edea215 @josevalim josevalim committed Dec 21, 2011
View
1 activesupport/lib/active_support/core_ext/array.rb
@@ -4,5 +4,4 @@
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'
View
30 activesupport/lib/active_support/core_ext/array/random_access.rb
@@ -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
View
28 activesupport/test/core_ext/array_ext_test.rb
@@ -363,34 +363,6 @@ def test_uniq_by!
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

0 comments on commit 2e9eb0a

Please sign in to comment.
Something went wrong with that request. Please try again.