class Dry::Effects::Providers::Random
Constants
- DEFAULT
- DEFAULT_RANDOM
- DEFAULT_RANGE
Public Instance Methods
build_generator(options)
click to toggle source
# File lib/dry/effects/providers/random.rb, line 62 def build_generator(options) case options when Undefined DEFAULT when ::Hash if options.key?(:seed) random = ::Random.new(options[:seed]) else random = DEFAULT_RANDOM end -> _ { random.rand } else generator = options lambda do |prev| prev.nil? ? generator.() : generator.(prev) end end end
call(options = Undefined) { || ... }
click to toggle source
# File lib/dry/effects/providers/random.rb, line 38 def call(options = Undefined) @prev = nil @generator = build_generator(options) yield end
next_float(low, high)
click to toggle source
# File lib/dry/effects/providers/random.rb, line 56 def next_float(low, high) @prev = @generator.(@prev) % 1 low + (@prev * (high - low)) end
next_integer(low, high, exclude_end)
click to toggle source
# File lib/dry/effects/providers/random.rb, line 44 def next_integer(low, high, exclude_end) @prev = @generator.(@prev) % 1 value = low + (@prev * (high - low)).round if value.eql?(high) && exclude_end low else value end end
rand(range_or_limit = nil)
click to toggle source
# File lib/dry/effects/providers/random.rb, line 14 def rand(range_or_limit = nil) range_or_limit ||= DEFAULT_RANGE if range_or_limit.is_a?(::Range) low = range_or_limit.begin high = range_or_limit.end exclude_end = range_or_limit.exclude_end? elsif range_or_limit >= 1 low = 0 high = range_or_limit.floor exclude_end = true else low = 0.0 high = range_or_limit.to_f exclude_end = true end if low.is_a?(::Integer) next_integer(low, high, exclude_end) else next_float(low, high) end end