Sha256: 92cfe5bce9512a2d57e9988a492ff95635ba7ab5805c454fbe239fafc2d8b4ff

Contents?: true

Size: 517 Bytes

Versions: 1

Compression:

Stored size: 517 Bytes

Contents

require "active_sample/version"
require "active_record"

module ActiveSample
  class NegativeSampleError < ArgumentError
  end

  def sample(n = 1)
    if n < 0
      raise NegativeSampleError.new("negative sample number".freeze)
    end

    max_id = maximum(:id)

    return nil if max_id == nil

    if n == 1
      while !(found = find_by(id: 1 + rand(max_id))); end

      found
    elsif n == 0
      none
    else
      where(id: ids.sample(n))
    end
  end
end

ActiveRecord::Base.send :extend, ActiveSample

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_sample-1.0.1 lib/active_sample.rb