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 CHANGED
@@ -1 +1 @@
1
- 0.1.2
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 =~ /\d+\/\d+|\d+-to-\d+|evens|even money/
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 =~ /[+-]\d+/
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.1.2"
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-06"
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 = [
@@ -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.1.2
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-06 00:00:00.000000000Z
12
+ date: 2011-11-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: money
16
- requirement: &70323280330880 !ruby/object:Gem::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: *70323280330880
24
+ version_requirements: *70129203448100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70323280330380 !ruby/object:Gem::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: *70323280330380
35
+ version_requirements: *70129203447620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &70323280329900 !ruby/object:Gem::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: *70323280329900
46
+ version_requirements: *70129203447120
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70323280329400 !ruby/object:Gem::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: *70323280329400
57
+ version_requirements: *70129203446600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70323280328780 !ruby/object:Gem::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: *70323280328780
68
+ version_requirements: *70129203446080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &70323280328260 !ruby/object:Gem::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: *70323280328260
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: 2782545268239026614
120
+ hash: -3008378059454965337
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  none: false
123
123
  requirements: