lib/FixedOdds.rb in rodders-0.1.1 vs lib/FixedOdds.rb in rodders-0.1.2

- old
+ new

@@ -8,31 +8,39 @@ # the fractional odds as a Rational attr_reader :fractional_odds # creates a new FixedOdds from a string which can be in fractional, - # moneyline or decimal format. + # moneyline or decimal format + # @param [String] odds the odds in fractional, moneyline or decimal form + # @return [FixedOdds] def FixedOdds.from_s(odds) case when FixedOdds.fractional_odds?(odds) then FixedOdds.fractional_odds odds when FixedOdds.moneyline_odds?(odds) then FixedOdds.moneyline_odds odds when FixedOdds.decimal_odds?(odds) then FixedOdds.decimal_odds odds else raise ArgumentError, %{could not parse "#{odds}"} end end # tells if the odds are in fractional form + # @param [String] odds the odds representation + # @return [Boolean] to indicate if it matches def FixedOdds.fractional_odds?(odds) odds =~ /\d+\/\d+|\d+-to-\d+|evens|even money/ end # tells if the odds are in moneyline form + # @param (see FixedOdds.fractional_odds?) + # @return (see FixedOdds.fractional_odds?) def FixedOdds.moneyline_odds?(odds) odds =~ /[+-]\d+/ end # tells if the odds are in decimal form + # @param (see FixedOdds.fractional_odds?) + # @return (see FixedOdds.fractional_odds?) def FixedOdds.decimal_odds?(odds) odds =~ /^(\d+|\d+\.\d+|\.\d+)/ end # creates a new FixedOdds from fractional form. These can be in the form @@ -42,26 +50,31 @@ # * 4/1 # * 4/1 against # * 4/1 on # * evens # * even money + # @param [String] fractional odds in fractional form + # @return (see FixedOdds.from_s) def FixedOdds.fractional_odds(fractional) raise %{could not parse "#{fractional}" as fractional odds} unless FixedOdds.fractional_odds?(fractional) return new(Rational('1/1')) if fractional == 'evens' || fractional == 'even money' if /(?<numerator>\d+)(\/|-to-)(?<denominator>\d+)/ =~ fractional then r = Rational("#{numerator}/#{denominator}") end r = r.reciprocal if fractional.end_with? ' on' new(Rational(r)) end # creates a new FixedOdds from a Rational + # @param [Rational] fractional_odds the odds def initialize(fractional_odds) @fractional_odds = fractional_odds end # creates a new FixedOdds from moneyline form. Examples are # * +400 # * -500 + # @param [String] moneyline odds in moneyline form + # @return (see FixedOdds.from_s) def FixedOdds.moneyline_odds(moneyline) raise %{could not parse "#{moneyline}" as moneyline odds} unless FixedOdds.moneyline_odds?(moneyline) sign = moneyline[0] if sign == '+' then new(Rational("#{moneyline}/100")) else new(Rational("100/#{moneyline.to_i.magnitude}")) @@ -69,37 +82,46 @@ end # creates a new FixedOdds from decimal form. Examples are # * 1.25 # * 2 + # @param [String] decimal odds in decimal form + # @return (see FixedOdds.from_s) def FixedOdds.decimal_odds(decimal) raise %{could not parse "#{decimal}" as decimal odds} unless FixedOdds.decimal_odds?(decimal) new(Rational(decimal.to_f - 1)) end - # calculates the profit won on a winning _stake_ + # calculates the profit won on a winning bet + # @param [String] stake the stake + # @return [Money] the profit def profit_on_winning_stake(stake) stake.to_money * @fractional_odds end - # calculates the total return on a winning _stake_ + # calculates the total return on a winning bet # (which is the profit plus the initial stake) + # @param (see #profit_on_winning_stake) + # @return [Money] the total winnings def total_return_on_winning_stake(stake) profit_on_winning_stake(stake) + stake.to_money end - # string representation in fractional form such as '4/1' + # string representation in fractional form like '4/1' + # @return [String] fractional form representation def to_s to_s_fractional end - # string representation in fractional form such as '4/1' + # string representation in fractional form like '4/1' + # @return (see #to_s) def to_s_fractional @fractional_odds.to_s end # string representation in moneyline form + # @return [String] moneyline form representation def to_s_moneyline integral_number_with_sign_regex = "%+d" if @fractional_odds > 1.0 integral_number_with_sign_regex % (fractional_odds * 100).to_i @@ -107,13 +129,15 @@ integral_number_with_sign_regex % (-100.0 / fractional_odds) end end # string representation in decimal form + # @return [String] decimal form representation def to_s_decimal "%g" % (fractional_odds + 1) end + # equality method def ==(other) other.fractional_odds == @fractional_odds end # low odds are those which pay out the most money