rodders 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/FixedOdds.rb +11 -3
- data/rodders.gemspec +2 -2
- data/spec/FixedOdds_spec.rb +48 -2
- metadata +15 -15
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/FixedOdds.rb
CHANGED
@@ -26,21 +26,21 @@ class FixedOdds
|
|
26
26
|
# @param [String] odds the odds representation
|
27
27
|
# @return [Boolean] to indicate if it matches
|
28
28
|
def FixedOdds.fractional_odds?(odds)
|
29
|
-
odds =~
|
29
|
+
odds =~ /^(\d+(\/|-to-)\d+( (against|on))?|evens|even money)$/
|
30
30
|
end
|
31
31
|
|
32
32
|
# tells if the odds are in moneyline form
|
33
33
|
# @param (see FixedOdds.fractional_odds?)
|
34
34
|
# @return (see FixedOdds.fractional_odds?)
|
35
35
|
def FixedOdds.moneyline_odds?(odds)
|
36
|
-
odds =~
|
36
|
+
odds =~ /^[+-]\d+$/
|
37
37
|
end
|
38
38
|
|
39
39
|
# tells if the odds are in decimal form
|
40
40
|
# @param (see FixedOdds.fractional_odds?)
|
41
41
|
# @return (see FixedOdds.fractional_odds?)
|
42
42
|
def FixedOdds.decimal_odds?(odds)
|
43
|
-
odds =~ /^(\d+|\d+\.\d+|\.\d+)
|
43
|
+
odds =~ /^(\d+|\d+\.\d+|\.\d+)$/
|
44
44
|
end
|
45
45
|
|
46
46
|
# creates a new FixedOdds from fractional form. These can be in the form
|
@@ -106,6 +106,14 @@ class FixedOdds
|
|
106
106
|
profit_on_winning_stake(stake) + stake.to_money
|
107
107
|
end
|
108
108
|
|
109
|
+
# calculates the magnitude of the stake needed to
|
110
|
+
# win the specified amount in profit
|
111
|
+
# @param [String] win the desired profit
|
112
|
+
# @return [Money] the stake required to realise that profit on a winning bet
|
113
|
+
def stake_needed_to_win win
|
114
|
+
win.to_money / @fractional_odds
|
115
|
+
end
|
116
|
+
|
109
117
|
# string representation in fractional form like '4/1'
|
110
118
|
# @return [String] fractional form representation
|
111
119
|
def to_s
|
data/rodders.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rodders"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nigel Lowry"]
|
12
|
-
s.date = "2011-11-
|
12
|
+
s.date = "2011-11-10"
|
13
13
|
s.description = "Converts between fractional, decimal and moneyline odds for betting and gambling. Calculates how much can be won on a given stake."
|
14
14
|
s.email = "nigel-lowry@ultra.eclipse.co.uk"
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/FixedOdds_spec.rb
CHANGED
@@ -51,6 +51,33 @@ describe "FixedOdds" do
|
|
51
51
|
it "should recognise '4-to-1 on' as '1/4'" do
|
52
52
|
FixedOdds.fractional_odds('4-to-1 on').should == FixedOdds.fractional_odds('1/4')
|
53
53
|
end
|
54
|
+
|
55
|
+
it "should raise error if numerator has decimal point" do
|
56
|
+
expect {
|
57
|
+
FixedOdds.fractional_odds '1.1/4'
|
58
|
+
}.to raise_error(
|
59
|
+
RuntimeError,
|
60
|
+
/could not parse "1.1\/4" as fractional odds/
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should raise error if denominator has decimal point" do
|
65
|
+
expect {
|
66
|
+
FixedOdds.fractional_odds '1/4.1'
|
67
|
+
}.to raise_error(
|
68
|
+
RuntimeError,
|
69
|
+
/could not parse "1\/4.1" as fractional odds/
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should raise error if both numerator and denominator have decimal points" do
|
74
|
+
expect {
|
75
|
+
FixedOdds.fractional_odds '1.1/4.1'
|
76
|
+
}.to raise_error(
|
77
|
+
RuntimeError,
|
78
|
+
/could not parse "1.1\/4.1" as fractional odds/
|
79
|
+
)
|
80
|
+
end
|
54
81
|
end
|
55
82
|
|
56
83
|
describe "moneyline_odds factory" do
|
@@ -63,6 +90,15 @@ describe "FixedOdds" do
|
|
63
90
|
)
|
64
91
|
end
|
65
92
|
|
93
|
+
it "should raise error if moneyline odds has decimal point" do
|
94
|
+
expect {
|
95
|
+
FixedOdds.moneyline_odds '-100.1'
|
96
|
+
}.to raise_error(
|
97
|
+
RuntimeError,
|
98
|
+
/could not parse "-100.1" as moneyline odds/
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
66
102
|
describe "positive figures" do
|
67
103
|
it "should treat '+400' as meaning winning $400 on a $100 bet" do
|
68
104
|
plus400 = FixedOdds.moneyline_odds('+400')
|
@@ -284,8 +320,6 @@ describe "FixedOdds" do
|
|
284
320
|
it "should display '1.25' as '-400'" do
|
285
321
|
FixedOdds.decimal_odds('1.25').to_s_moneyline.should == '-400'
|
286
322
|
end
|
287
|
-
|
288
|
-
it "should display a floating point moneyline"
|
289
323
|
end
|
290
324
|
|
291
325
|
describe "#to_s_decimal" do
|
@@ -334,6 +368,18 @@ describe "FixedOdds" do
|
|
334
368
|
end
|
335
369
|
end
|
336
370
|
|
371
|
+
describe "#stake_needed_to_win" do
|
372
|
+
it "should be $1 on a 1/1 to win $1" do
|
373
|
+
oneToOne = FixedOdds.fractional_odds '1/1'
|
374
|
+
oneToOne.stake_needed_to_win('$1').should == '$1'
|
375
|
+
end
|
376
|
+
|
377
|
+
it "should be $100 on 4/1 to win $400" do
|
378
|
+
fourToOne = FixedOdds.fractional_odds '4/1'
|
379
|
+
fourToOne.stake_needed_to_win('$400').should == '$100'
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
337
383
|
describe "object comparison" do
|
338
384
|
it "'+915' is less likely than '-275'" do
|
339
385
|
FixedOdds.from_s('+915').should be < FixedOdds.from_s('-275')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-10 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: money
|
16
|
-
requirement: &
|
16
|
+
requirement: &70129203448100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70129203448100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70129203447620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.3.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70129203447620
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &70129203447120 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.6.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70129203447120
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70129203446600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70129203446600
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70129203446080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70129203446080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &70129203445560 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70129203445560
|
80
80
|
description: Converts between fractional, decimal and moneyline odds for betting and
|
81
81
|
gambling. Calculates how much can be won on a given stake.
|
82
82
|
email: nigel-lowry@ultra.eclipse.co.uk
|
@@ -117,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
117
|
version: '0'
|
118
118
|
segments:
|
119
119
|
- 0
|
120
|
-
hash:
|
120
|
+
hash: -3008378059454965337
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
122
|
none: false
|
123
123
|
requirements:
|