Sha256: e4ec5aeea9ee781dfbef4b6333d1f8bcb0dba28ab6b38d1e4cd23d2372a01b07

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module NudgeType
  
  class ProportionType
    extend TypeBehaviors
    @default_lowest = 0.0
    @default_highest = 1.0

    def self.default_lowest
      @default_lowest
    end

    def self.default_highest
      @default_highest
    end

    def self.random_value(params = {})
      bottom = params[:proportion_lower_bound] || @default_lowest
      top = params[:proportion_upper_bound] || @default_highest
      raise ArgumentError, "ProportionType#{random_value} bounds must be in range [0.0,1.0]" unless
        (0.0..1.0).include?(bottom) && (0.0..1.0).include?(top)
      raise ArgumentError, "ProportionType#{random_value} bounds are inverted" unless
        bottom <= top
      range = top - bottom
      (rand*range) + bottom
    end
    
    def self.from_s(string_value)
      (string_value.to_f != 1.0) ? (string_value.to_f % 1.0) : 1.0
    end
    
    def self.recognizes?(a_thing)
      !a_thing.kind_of?(String) && !a_thing.nil? && a_thing.respond_to?(:to_f)
    end
    
    def self.any_value(options ={})
      self.random_value(options)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nudge-0.2.9 lib/interpreter/types/proportion_type.rb