betfair 1.0.3 → 1.0.6

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/Gemfile CHANGED
@@ -1,11 +1,12 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'savon'
4
+ gem 'savon', '<= 0.8.6'
5
5
  gem 'gemcutter'
6
6
 
7
7
  gem 'rspec'
8
- gem 'savon_spec'
8
+ gem 'savon_spec', '= 0.1.5'
9
+ gem 'mocha', '=0.10.4'
9
10
 
10
11
  gemspec
11
12
 
data/README.md CHANGED
@@ -161,9 +161,9 @@ The API PlaceBets service allows you to place multiple (1 to 60) bets on a singl
161
161
 
162
162
  exchange_id = 1
163
163
  bets = []
164
- bets << { market_id: 12345, runner_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
164
+ bets << { market_id: 12345, selection_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
165
165
  bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
166
- bets << { market_id: 12345, runner_id: 1234, bet_type: 'L', price: 1.5, size: 2.0, asian_line_id: 0,
166
+ bets << { market_id: 12345, selection_id: 1234, bet_type: 'L', price: 1.5, size: 2.0, asian_line_id: 0,
167
167
  bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
168
168
 
169
169
  place_multiple_bets =
@@ -238,7 +238,7 @@ foo[100388290] returns
238
238
 
239
239
  { :market_id=>100388290, :market_name=>"Premiers 2012", :market_type=>"O", :market_status=>"ACTIVE", :event_date=>2012-03-24 16:20:00 +0800,
240
240
  :menu_path=>"\\Australian Rules\\AFL 2012", :event_hierarchy=>"/61420/26759191/100388290", :bet_delay=>"0", :exchange_id=>2,
241
- :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 16:35:21 +0800, :number_of_runners=>18, :number_of_winners=>1,
241
+ :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 16:35:21 +0800, :number_of_selections=>18, :number_of_winners=>1,
242
242
  :total_amount_matched=>193599.58, :bsp_market=>false, :turning_in_play=>false
243
243
  }
244
244
 
@@ -255,7 +255,7 @@ foo.first returns
255
255
 
256
256
  { :market_id=>100388290, :market_name=>"Premiers 2012", :market_type=>"O", :market_status=>"ACTIVE", :event_date=>2012-03-24 08:20:00 UTC,
257
257
  :menu_path=>"\\Australian Rules\\AFL 2012", :event_heirachy=>"/61420/26759191/100388290", :bet_delay=>0, :exchange_id=>2,
258
- :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 09:10:12 UTC, :number_of_runners=>18, :number_of_winners=>1,
258
+ :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 09:10:12 UTC, :number_of_selections=>18, :number_of_winners=>1,
259
259
  :total_amount_matched=>193657.0, :bsp_market=>false, :turning_in_play=>false
260
260
  }
261
261
 
@@ -263,7 +263,7 @@ foo.first returns
263
263
  This helper sorts out a nice hash from the
264
264
 
265
265
  market = bf.get_market(session_token, 2, 100388290)
266
- foo = helpers.market_info(details)
266
+ foo = helpers.market_info(market)
267
267
 
268
268
  Which returns
269
269
 
@@ -276,7 +276,7 @@ This helper cleans up the prices
276
276
  foo = helpers.prices(prices)
277
277
 
278
278
  ## Combine ##
279
- Use this to combine `runner_names` and prices from the #market_info and #prices helpers
279
+ Use this to combine `selection_names` and prices from the #market_info and #prices helpers
280
280
 
281
281
  market = bf.get_market(session_token, 2, 100388290)
282
282
  prices = bf.get_market_prices_compressed(session_token, 2, 100388290)
@@ -284,14 +284,14 @@ Use this to combine `runner_names` and prices from the #market_info and #prices
284
284
 
285
285
  foo.first returns
286
286
 
287
- { :runner_id=>39983, :runner_name=>"Collingwood Magpies", :market_id=>100388290, :market_type_id=>61420,
287
+ { :selection_id=>39983, :selection_name=>"Collingwood Magpies", :market_id=>100388290, :market_type_id=>61420,
288
288
  :prices_string=>"39983~0~89899.79~4.2~~~false~~~~|4.2~430.35~L~1~4.1~311.51~L~2~3.85~4.75~L~3~|4.4~155.46~B~1~4.6~230.69~B~2~5.9~100.3~B~3~",
289
- :runner_matched=>89899.79, :last_back_price=>4.2, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51,
289
+ :selection_matched=>89899.79, :last_back_price=>4.2, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51,
290
290
  :b3=>3.85, :b3_available=>4.75, :l1=>4.4, :l1_available=>155.46, :l2=>4.6, :l2_available=>230.69, :l3=>5.9, :l3_available=>100.3
291
291
  }
292
292
 
293
293
  ## Details ##
294
- Gets the `market_id`/`market_name` and the `runner_id`/`runner_name`
294
+ Gets the `market_id`/`market_name` and the `selection_id`/`selection_name`
295
295
 
296
296
  market = bf.get_market(session_token, 2, 100388290)
297
297
  foo = helpers.details(market)
@@ -299,15 +299,15 @@ Gets the `market_id`/`market_name` and the `runner_id`/`runner_name`
299
299
  Which returns
300
300
 
301
301
  { :market_id=>100388290, :market_type_id=>61420,
302
- :runners=>[{:runner_id=>39983, :runner_name=>"Collingwood Magpies"}, {:runner_id=>244664, :runner_name=>"Hawthorn Hawks"},
303
- {:runner_id=>244663, :runner_name=>"Geelong Cats"}, {:runner_id=>244689, :runner_name=>"Carlton Blues"},
304
- {:runner_id=>210344, :runner_name=>"West Coast Eagles"}, {:runner_id=>244666, :runner_name=>"Fremantle Dockers"},
305
- {:runner_id=>244688, :runner_name=>"St Kilda Saints"}, {:runner_id=>244665, :runner_name=>"Sydney Swans"},
306
- {:runner_id=>173363, :runner_name=>"Adelaide Crows"}, {:runner_id=>210343, :runner_name=>"Essendon Bombers"},
307
- {:runner_id=>39986, :runner_name=>"Western Bulldogs"}, {:runner_id=>244667, :runner_name=>"Richmond Tigers"},
308
- {:runner_id=>2013991, :runner_name=>"North Melbourne Kangaroos"}, {:runner_id=>39987, :runner_name=>"Melbourne Demons"},
309
- {:runner_id=>39984, :runner_name=>"Brisbane Lions"}, {:runner_id=>217710, :runner_name=>"Port Adelaide Power"},
310
- {:runner_id=>4997061, :runner_name=>"Gold Coast Suns"}, {:runner_id=>5149403, :runner_name=>"Greater Western Sydney Giants"}]
302
+ :selections=>[{:selection_id=>39983, :selection_name=>"Collingwood Magpies"}, {:selection_id=>244664, :selection_name=>"Hawthorn Hawks"},
303
+ {:selection_id=>244663, :selection_name=>"Geelong Cats"}, {:selection_id=>244689, :selection_name=>"Carlton Blues"},
304
+ {:selection_id=>210344, :selection_name=>"West Coast Eagles"}, {:selection_id=>244666, :selection_name=>"Fremantle Dockers"},
305
+ {:selection_id=>244688, :selection_name=>"St Kilda Saints"}, {:selection_id=>244665, :selection_name=>"Sydney Swans"},
306
+ {:selection_id=>173363, :selection_name=>"Adelaide Crows"}, {:selection_id=>210343, :selection_name=>"Essendon Bombers"},
307
+ {:selection_id=>39986, :selection_name=>"Western Bulldogs"}, {:selection_id=>244667, :selection_name=>"Richmond Tigers"},
308
+ {:selection_id=>2013991, :selection_name=>"North Melbourne Kangaroos"}, {:selection_id=>39987, :selection_name=>"Melbourne Demons"},
309
+ {:selection_id=>39984, :selection_name=>"Brisbane Lions"}, {:selection_id=>217710, :selection_name=>"Port Adelaide Power"},
310
+ {:selection_id=>4997061, :selection_name=>"Gold Coast Suns"}, {:selection_id=>5149403, :selection_name=>"Greater Western Sydney Giants"}]
311
311
  }
312
312
 
313
313
  ## Prices Complete ##
@@ -320,7 +320,7 @@ foo.first returns
320
320
 
321
321
  [ 39983, {:selection_id=>39983, :order_index=>0, :total_amount_matched=>89899.79, :last_price_matched=>4.2, :handicap=>0.0,
322
322
  :reduction_factor=>0.0, :vacant=>false, :far_sp_price=>0.0, :near_sp_price=>0.0, :actual_sp_price=>0.0, :prices_string=>nil,
323
- :runner_matched=>0, :last_back_price=>0, :wom=>0.5516492637413943, :b1=>4.2, :b1_available=>429.06, :b2=>4.1, :b2_available=>310.58,
323
+ :selection_matched=>0, :last_back_price=>0, :wom=>0.5516492637413943, :b1=>4.2, :b1_available=>429.06, :b2=>4.1, :b2_available=>310.58,
324
324
  :b3=>3.85, :b3_available=>4.75, :l1=>4.3, :l1_available=>20.0, :l2=>4.4, :l2_available=>355.0, :l3=>4.6, :l3_available=>230.0}
325
325
  ]
326
326
 
@@ -329,7 +329,7 @@ foo.first returns
329
329
  prices = bf.get_market_prices_compressed(session_token, 2, 100388290)
330
330
  foo = helpers.price_string(prices, true)
331
331
 
332
- { :prices_string=>nil, :runner_matched=>0, :last_back_price=>0, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51, :b3=>3.85,
332
+ { :prices_string=>nil, :selection_matched=>0, :last_back_price=>0, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51, :b3=>3.85,
333
333
  :b3_available=>4.75, :l1=>4.4, :l1_available=>155.46, :l2=>4.6, :l2_available=>230.69, :l3=>5.9, :l3_available=>100.3
334
334
  }
335
335
 
@@ -375,10 +375,11 @@ trying to set a threshold on when to place a bet.
375
375
  * rake
376
376
 
377
377
  ## To Do ##
378
- * Work out how to implement this https://github.com/jfairbairn/em-net-http, so that the libary uses eventmachine no blocking
378
+ * Add gzip support option
379
+ * Add em-http support as per this once this gets pulled https://github.com/rubiii/httpi/pull/40
379
380
  * The WOM of money in Helpers#price_string returns 0 if either all b1,b2,b3 or l1,l2,l3 are all 0
380
381
  * Add some error checking to the Betfair::Helper methods
381
- * Finish of the mash method, to return a nice hash of all market and runner info
382
+ * Finish of the mash method, to return a nice hash of all market and selection info
382
383
  * Write a spec for the mashed method
383
384
 
384
385
  ## Contribute ##
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency 'savon'
21
+ s.add_runtime_dependency 'savon', '<= 0.8.6'
22
22
 
23
23
  s.add_development_dependency 'rake'
24
24
  s.add_development_dependency 'rspec'
25
- s.add_development_dependency 'savon_spec'
26
- end
25
+ s.add_development_dependency 'savon_spec', '= 0.1.5'
26
+ s.add_development_dependency 'mocha', '= 0.10.4'
27
+ end
@@ -0,0 +1,3 @@
1
+ # Betfair SDK
2
+
3
+ Check it out here [RubyGems](https://github.com/lukebyrne/betfair_sdk)
@@ -4,8 +4,13 @@ module Betfair
4
4
 
5
5
  ## Some handy constants...
6
6
 
7
- EXCHANGE_IDS = { aus: 2, uk: 1 }
7
+ EXCHANGE_IDS = {
8
+ :aus => 2,
9
+ :uk => 1
10
+ }
11
+
8
12
  PRODUCT_ID_FREE = 82
13
+
9
14
  BET_TYPE_LAY = 'L'
10
15
  BET_TYPE_BACK = 'B'
11
16
 
@@ -26,70 +31,70 @@ module Betfair
26
31
  ## Bet Placement API METHODS
27
32
  #
28
33
 
29
- def place_bet(session_token, exchange_id, market_id, selection_id, bet_type, price, size)
30
- bf_bet = {
31
- marketId: market_id,
32
- selectionId: selection_id,
33
- betType: bet_type,
34
- price: price,
35
- size: size,
36
- asianLineId: 0,
37
- betCategoryType: 'E',
38
- betPersistenceType: 'NONE',
39
- bspLiability: 0
34
+ def place_bet(session_token, exchange_id, market_id, selection_id, bet_type, price, size)
35
+ bf_bet = {
36
+ :marketId => market_id,
37
+ :selectionId => selection_id,
38
+ :betType => bet_type,
39
+ :price => price,
40
+ :size => size,
41
+ :asianLineId => 0,
42
+ :betCategoryType => 'E',
43
+ :betPersistenceType => 'NONE',
44
+ :bspLiability => 0
40
45
  }
41
46
 
42
47
  response = exchange(exchange_id).
43
48
  session_request( session_token,
44
- :placeBets,
49
+ :placeBets,
45
50
  :place_bets_response,
46
- bets: { 'PlaceBets' => [bf_bet] } )
51
+ :bets => { 'PlaceBets' => [bf_bet] } )
47
52
 
48
53
  return response.maybe_result( :bet_results, :place_bets_result )
49
54
  end
50
55
 
51
56
 
52
- def place_multiple_bets(session_token, exchange_id, bets)
57
+ def place_multiple_bets(session_token, exchange_id, bets)
53
58
  bf_bets = []
54
59
  bets.each do |bet|
55
- bf_bets << {
56
- marketId: bet[:market_id],
57
- selectionId: bet[:runner_id],
58
- betType: bet[:bet_type],
59
- price: bet[:price],
60
- size: bet[:size],
61
- asianLineId: bet[:asian_line_id],
62
- betCategoryType: bet[:bet_category_type],
63
- betPersistenceType: bet[:bet_peristence_type],
64
- bspLiability: bet[:bsp_liability]
60
+ bf_bets << {
61
+ :marketId => bet[:market_id],
62
+ :selectionId => bet[:selection_id],
63
+ :betType => bet[:bet_type],
64
+ :price => bet[:price],
65
+ :size => bet[:size],
66
+ :asianLineId => bet[:asian_line_id],
67
+ :betCategoryType => bet[:bet_category_type],
68
+ :betPersistenceType => bet[:bet_peristence_type],
69
+ :bspLiability => bet[:bsp_liability]
65
70
  }
66
71
  end
67
72
 
68
73
  response = exchange(exchange_id).
69
74
  session_request( session_token,
70
- :placeBets,
75
+ :placeBets,
71
76
  :place_bets_response,
72
- bets: { 'PlaceBets' => bf_bets } )
77
+ :bets => { 'PlaceBets' => bf_bets } )
73
78
 
74
79
  return response.maybe_result( :bet_results, :place_bets_result )
75
80
  end
76
81
 
77
82
  def update_bet(session_token, exchange_id, bet_id, new_bet_persitence_type, new_price, new_size, old_bet_persitance_type, old_price, old_size)
78
- bf_bet = {
79
- betId: bet_id,
80
- newBetPersistenceType: new_bet_persitence_type,
81
- newPrice: new_price,
82
- newSize: new_size,
83
- oldBetPersistenceType: old_bet_persitance_type,
84
- oldPrice: old_price,
85
- oldSize: old_size
83
+ bf_bet = {
84
+ :betId => bet_id,
85
+ :newBetPersistenceType => new_bet_persitence_type,
86
+ :newPrice => new_price,
87
+ :newSize => new_size,
88
+ :oldBetPersistenceType => old_bet_persitance_type,
89
+ :oldPrice => old_price,
90
+ :oldSize => old_size
86
91
  }
87
92
 
88
93
  response = exchange(exchange_id).
89
94
  session_request( session_token,
90
- :updateBets,
95
+ :updateBets,
91
96
  :update_bets_response,
92
- bets: { 'UpdateBets' => [bf_bet] } )
97
+ :bets => { 'UpdateBets' => [bf_bet] } )
93
98
 
94
99
  return response.maybe_result( :bet_results, :update_bets_result )
95
100
  end
@@ -97,47 +102,47 @@ module Betfair
97
102
  def update_multiple_bets(session_token, exchange_id, bets)
98
103
  bf_bets = []
99
104
  bets.each do |bet|
100
- bf_bets << {
101
- betId: bet[:bet_id],
102
- newBetPersistenceType: bet[:new_bet_persitence_type],
103
- newPrice: bet[:new_price],
104
- newSize: bet[:new_size],
105
- oldBetPersistenceType: bet[:old_bet_persitance_type],
106
- oldPrice: bet[:old_price],
107
- oldSize: bet[:old_size]
105
+ bf_bets << {
106
+ :betId => bet[:bet_id],
107
+ :newBetPersistenceType => bet[:new_bet_persitence_type],
108
+ :newPrice => bet[:new_price],
109
+ :newSize => bet[:new_size],
110
+ :oldBetPersistenceType => bet[:old_bet_persitance_type],
111
+ :oldPrice => bet[:old_price],
112
+ :oldSize => bet[:old_size]
108
113
  }
109
114
  end
110
115
 
111
116
  response = exchange(exchange_id).
112
117
  session_request( session_token,
113
- :updateBets,
118
+ :updateBets,
114
119
  :update_bets_response,
115
- bets: { 'UpdateBets' => bf_bets } )
120
+ :bets => { 'UpdateBets' => bf_bets } )
116
121
 
117
- return response.maybe_result( :bet_results, :update_bets_result )
122
+ return response.maybe_result( :bet_results, :update_bets_result )
118
123
  end
119
124
 
120
125
  def cancel_bet(session_token, exchange_id, bet_id)
121
- bf_bet = { betId: bet_id }
126
+ bf_bet = { :betId => bet_id }
122
127
 
123
128
  response = exchange(exchange_id).
124
129
  session_request( session_token,
125
- :cancelBets,
130
+ :cancelBets,
126
131
  :cancel_bets_response,
127
- bets: { 'CancelBets' => [bf_bet] } ) # "CancelBets" has to be a string, not a symbol!
132
+ :bets => { 'CancelBets' => [bf_bet] } ) # "CancelBets" has to be a string, not a symbol!
128
133
 
129
134
  return response.maybe_result( :bet_results, :cancel_bets_result )
130
135
  end
131
136
 
132
137
  def cancel_multiple_bets(session_token, exchange_id, bets)
133
138
  bf_bets = []
134
- bets.each { |bet_id| bf_bets << { betId: bet_id } }
139
+ bets.each { |bet_id| bf_bets << { :betId => bet_id } }
135
140
 
136
141
  response = exchange(exchange_id).
137
142
  session_request( session_token,
138
- :cancelBets,
143
+ :cancelBets,
139
144
  :cancel_bets_response,
140
- bets: { 'CancelBets' => bf_bets } ) # "CancelBets" has to be a string, not a symbol!
145
+ :bets => { 'CancelBets' => bf_bets } ) # "CancelBets" has to be a string, not a symbol!
141
146
 
142
147
  return response.maybe_result( :bet_results, :cancel_bets_result )
143
148
  end
@@ -151,31 +156,31 @@ module Betfair
151
156
 
152
157
  def get_mu_bets( session_token, exchange_id, market_id = 0, bet_status = 'MU', start_record = 0, record_count = 200, sort_order = 'ASC', order_by = 'PLACED_DATE') #, bet_ids = nil, , exclude_last_second = nil, matched_since = nil
153
158
  response = exchange(exchange_id).
154
- session_request( session_token,
155
- :getMUBets,
159
+ session_request( session_token,
160
+ :getMUBets,
156
161
  :get_mu_bets_response,
157
- #betIds: bet_ids,
158
- betStatus: bet_status,
159
- #excludeLastSecond: exclude_last_second,
160
- marketId: market_id,
161
- #matchedSince: matched_since,
162
- orderBy: order_by,
163
- recordCount: record_count,
164
- sortOrder: sort_order,
165
- startRecord: start_record
162
+ #:betIds => bet_ids,
163
+ :betStatus => bet_status,
164
+ #:excludeLastSecond => exclude_last_second,
165
+ :marketId => market_id,
166
+ #:matchedSince => matched_since,
167
+ :orderBy => order_by,
168
+ :recordCount => record_count,
169
+ :sortOrder => sort_order,
170
+ :startRecord => start_record
166
171
  )
167
172
 
168
173
  return response.maybe_result( :bets, :mu_bet )
169
174
  end
170
175
 
171
176
 
172
- def get_market(session_token, exchange_id, market_id, locale = nil)
177
+ def get_market(session_token, exchange_id, market_id, locale = nil)
173
178
  response = exchange(exchange_id).
174
- session_request( session_token,
175
- :getMarket,
179
+ session_request( session_token,
180
+ :getMarket,
176
181
  :get_market_response,
177
- marketId: market_id,
178
- locale: locale )
182
+ :marketId => market_id,
183
+ :locale => locale )
179
184
 
180
185
  return response.maybe_result( :market )
181
186
  end
@@ -184,10 +189,10 @@ module Betfair
184
189
  def get_market_prices_compressed(session_token, exchange_id, market_id, currency_code = nil)
185
190
  response = exchange(exchange_id).
186
191
  session_request( session_token,
187
- :getMarketPricesCompressed,
192
+ :getMarketPricesCompressed,
188
193
  :get_market_prices_compressed_response,
189
- marketId: market_id,
190
- currencyCode: currency_code )
194
+ :marketId => market_id,
195
+ :currencyCode => currency_code )
191
196
 
192
197
  return response.maybe_result( :market_prices )
193
198
  end
@@ -196,9 +201,9 @@ module Betfair
196
201
  def get_active_event_types(session_token, locale = nil)
197
202
  response = @global_service.
198
203
  session_request( session_token,
199
- :getActiveEventTypes,
204
+ :getActiveEventTypes,
200
205
  :get_active_event_types_response,
201
- locale: locale )
206
+ :locale => locale )
202
207
 
203
208
  return response.maybe_result( :event_type_items, :event_type )
204
209
  end
@@ -206,14 +211,14 @@ module Betfair
206
211
 
207
212
  def get_all_markets(session_token, exchange_id, event_type_ids = nil, locale = nil, countries = nil, from_date = nil, to_date = nil)
208
213
  response = exchange(exchange_id).
209
- session_request( session_token,
210
- :getAllMarkets,
214
+ session_request( session_token,
215
+ :getAllMarkets,
211
216
  :get_all_markets_response,
212
- eventTypeIds: { 'int' => event_type_ids },
213
- locale: locale,
214
- countries: { 'Country' => countries },
215
- fromDate: from_date,
216
- toDate: to_date )
217
+ :eventTypeIds => { 'int' => event_type_ids },
218
+ :locale => locale,
219
+ :countries => { 'country' => countries },
220
+ :fromDate => from_date,
221
+ :toDate => to_date )
217
222
 
218
223
  return response.maybe_result( :market_data )
219
224
  end
@@ -221,22 +226,22 @@ module Betfair
221
226
 
222
227
  def get_account_funds( session_token, exchange_id )
223
228
  response = exchange(exchange_id).
224
- session_request( session_token,
225
- :getAccountFunds,
229
+ session_request( session_token,
230
+ :getAccountFunds,
226
231
  :get_account_funds_response )
227
232
 
228
233
  return response.maybe_result
229
234
  end
230
235
 
231
236
  def login(username, password, product_id, vendor_software_id, location_id, ip_address)
232
- response = @global_service.request( :login,
233
- :login_response,
234
- username: username,
235
- password: password,
236
- productId: product_id,
237
- vendorSoftwareId: vendor_software_id,
238
- locationId: location_id,
239
- ipAddress: ip_address )
237
+ response = @global_service.request( :login,
238
+ :login_response,
239
+ :username => username,
240
+ :password => password,
241
+ :productId => product_id,
242
+ :vendorSoftwareId => vendor_software_id,
243
+ :locationId => location_id,
244
+ :ipAddress => ip_address )
240
245
 
241
246
  return response.maybe_result( :header, :session_token )
242
247
  end
@@ -247,19 +252,21 @@ module Betfair
247
252
  def keep_alive(session_token)
248
253
  response = @global_service.
249
254
  session_request( session_token,
250
- :keep_alive,
255
+ :keep_alive,
251
256
  :keep_alive_response )
252
257
 
253
- # Need to do the old school way of checking as the keep_alive response doesn't return a minorErrorCode, so fails
254
- error_code = response[:header][:error_code]
255
- #return error_code == 'OK' ? response[:header][:session_token] : error_code
256
- return error_code == 'OK' ? response[:header][:session_token].extend( Success ) : error_code.extend( Failure )
258
+ # Need to do the old school way of checking as the keep_alive
259
+ # response doesn't return a minorErrorCode, so fails
260
+ error_code = response[:header][:error_code]
261
+ return error_code == 'OK' ?
262
+ response[:header][:session_token].extend( Success ) :
263
+ error_code.extend( Failure )
257
264
  end
258
265
 
259
266
  def logout(session_token)
260
267
  response = @global_service.
261
268
  session_request( session_token,
262
- :logout,
269
+ :logout,
263
270
  :logout_response )
264
271
  return response.maybe_result( :header, :session_token )
265
272
  end
@@ -268,11 +275,11 @@ module Betfair
268
275
  ## END OF API METHODS
269
276
 
270
277
 
271
- def exchange(exchange_id)
278
+ def exchange(exchange_id)
272
279
  exchange_id == EXCHANGE_IDS[:aus] ? @aus_service : @uk_service
273
280
  end
274
281
 
275
- def session_token(response_header)
282
+ def session_token(response_header)
276
283
  response_header[:error_code] == 'OK' ? response_header[:session_token] : response_header[:error_code]
277
284
  end
278
285
 
@@ -297,13 +304,13 @@ module Betfair
297
304
 
298
305
  # Handy constants
299
306
  NAMESPACES = {
300
- aus: 'http://www.betfair.com/exchange/v3/BFExchangeService/AUS',
301
- global: 'https://www.betfair.com/global/v3/BFGlobalService',
302
- uk: 'http://www.betfair.com/exchange/v3/BFExchangeService/UK' }
307
+ :aus => 'http://www.betfair.com/exchange/v3/BFExchangeService/AUS',
308
+ :global => 'https://www.betfair.com/global/v3/BFGlobalService',
309
+ :uk => 'http://www.betfair.com/exchange/v3/BFExchangeService/UK' }
303
310
  ENDPOINTS = {
304
- aus: 'https://api-au.betfair.com/exchange/v5/BFExchangeService',
305
- global: 'https://api.betfair.com/global/v3/BFGlobalService',
306
- uk: 'https://api.betfair.com/exchange/v5/BFExchangeService' }
311
+ :aus => 'https://api-au.betfair.com/exchange/v5/BFExchangeService',
312
+ :global => 'https://api.betfair.com/global/v3/BFGlobalService',
313
+ :uk => 'https://api.betfair.com/exchange/v5/BFExchangeService' }
307
314
 
308
315
 
309
316
  # Factory methods for building clients to the different endpoints
@@ -345,15 +352,15 @@ module Betfair
345
352
  # For those requests which take place in the context of a session,
346
353
  # this method constructs the correct header and delegates to #request.
347
354
  def session_request( session_token, method, result_field, body = {})
348
- header_body = { header: api_request_header(session_token) }
355
+ header_body = { :header => api_request_header(session_token) }
349
356
  full_body = header_body.merge( body )
350
357
 
351
358
  request method, result_field, full_body
352
359
  end
353
360
 
354
361
 
355
- def api_request_header(session_token)
356
- { client_stamp: 0, session_token: session_token }
362
+ def api_request_header(session_token)
363
+ { :client_stamp => 0, :session_token => session_token }
357
364
  end
358
365
  protected :api_request_header
359
366
 
@@ -366,7 +373,7 @@ module Betfair
366
373
  module ErrorPresenter
367
374
 
368
375
  def success?
369
- self[:error_code] == 'OK'
376
+ self[:error_code] == "OK"
370
377
  end
371
378
 
372
379
 
@@ -403,26 +410,26 @@ module Betfair
403
410
  markets.each do |piece|
404
411
  piece.gsub! "\0", '\:'
405
412
  foo = piece.split('~')
406
- market_hash[foo[0].to_i] = {
407
- market_id: foo[0].to_i,
408
- market_name: foo[1].to_s,
409
- market_type: foo[2].to_s,
410
- market_status: foo[3].to_s,
413
+ market_hash[foo[0].to_i] = {
414
+ :market_id => foo[0].to_i,
415
+ :market_name => foo[1].to_s,
416
+ :market_type => foo[2].to_s,
417
+ :market_status => foo[3].to_s,
411
418
  # bf returns in this case time in Epoch, but in milliseconds
412
- event_date: Time.at(foo[4].to_i/1000),
413
- menu_path: foo[5].to_s,
414
- event_hierarchy: foo[6].to_s,
415
- bet_delay: foo[7].to_s,
416
- exchange_id: foo[8].to_i,
417
- iso3_country_code: foo[9].to_s,
418
- # bf returns in this case time in Epoch, but in milliseconds
419
- last_refresh: Time.at(foo[10].to_i/1000),
420
- number_of_runners: foo[11].to_i,
421
- number_of_winners: foo[12].to_i,
422
- total_amount_matched: foo[13].to_f,
423
- bsp_market: foo[14] == 'Y' ? true : false,
424
- turning_in_play: foo[15] == 'Y' ? true : false
425
- }
419
+ :event_date => Time.at(foo[4].to_i/1000),
420
+ :menu_path => foo[5].to_s,
421
+ :event_hierarchy => foo[6].to_s,
422
+ :bet_delay => foo[7].to_s,
423
+ :exchange_id => foo[8].to_i,
424
+ :iso3_country_code => foo[9].to_s,
425
+ # bf returns in this case time in Epoch, but in milliseconds
426
+ :last_refresh => Time.at(foo[10].to_i/1000),
427
+ :number_of_selections => foo[11].to_i,
428
+ :number_of_winners => foo[12].to_i,
429
+ :total_amount_matched => foo[13].to_f,
430
+ :bsp_market => foo[14] == 'Y' ? true : false,
431
+ :turning_in_play => foo[15] == 'Y' ? true : false
432
+ }
426
433
  end
427
434
  return market_hash
428
435
  end
@@ -441,25 +448,9 @@ module Betfair
441
448
  event_date = Time.at(bar[4].to_i/1000).utc
442
449
  last_refresh = Time.at(bar[10].to_i/1000).utc
443
450
 
444
- doh = {
445
- market_id: bar[0].to_i,
446
- market_name: bar[1],
447
- market_type: bar[2],
448
- market_status: bar[3],
449
- event_date: event_date,
450
- menu_path: bar[5],
451
- event_heirachy: bar[6],
452
- bet_delay: bar[7].to_i,
453
- exchange_id: bar[8].to_i,
454
- iso3_country_code: bar[9],
455
- last_refresh: last_refresh,
456
- number_of_runners: bar[11].to_i,
457
- number_of_winners: bar[12].to_i,
458
- total_amount_matched: bar[13].to_f,
459
- bsp_market: bsp_market,
460
- turning_in_play: turning_in_play
461
- }
462
-
451
+ doh = { market_id: bar[0].to_i, market_name: bar[1], market_type: bar[2], market_status: bar[3], event_date: event_date, menu_path: bar[5], event_heirachy: bar[6],
452
+ bet_delay: bar[7].to_i, exchange_id: bar[8].to_i, iso3_country_code: bar[9], last_refresh: last_refresh, number_of_selections: bar[11].to_i, number_of_winners: bar[12].to_i,
453
+ total_amount_matched: bar[13].to_f, bsp_market: bsp_market, turning_in_play: turning_in_play }
463
454
  foo << doh if !doh[:market_name].nil?
464
455
  end
465
456
  end
@@ -467,24 +458,24 @@ module Betfair
467
458
  end
468
459
 
469
460
  def market_info(details)
470
- { exchange_id: nil,
471
- market_type_id: nil,
472
- market_matched: nil,
473
- menu_path: details[:menu_path],
474
- market_id: details[:market_id],
475
- market_name: details[:name],
476
- market_type_name: details[:menu_path].to_s.split('\\')[1]
461
+ { :exchange_id => nil,
462
+ :market_type_id => nil,
463
+ :market_matched => nil,
464
+ :menu_path => details[:menu_path],
465
+ :market_id => details[:market_id],
466
+ :market_name => details[:name],
467
+ :market_type_name => details[:menu_path].to_s.split('\\')[1]
477
468
  }
478
469
  end
479
470
 
480
471
  def details(market)
481
- runners = []
482
- market[:runners][:runner].each { |runner| runners << { runner_id: runner[:selection_id].to_i, runner_name: runner[:name] } }
483
- return { market_id: market[:market_id].to_i, market_type_id: market[:event_type_id].to_i, runners: runners }
472
+ selections = []
473
+ market[:runners][:runner].each { |selection| selections << { :selection_id => selection[:selection_id].to_i, :selection_name => selection[:name] } }
474
+ return { :market_id => market[:market_id].to_i, :market_type_id => market[:event_type_id].to_i, :selection => selections }
484
475
  end
485
476
 
486
477
  def prices(prices)
487
- price_hash = {}
478
+ price_hash = {}
488
479
  prices.gsub! '\:', "\0"
489
480
  pieces = prices.split ":"
490
481
  pieces.each do |piece|
@@ -495,24 +486,24 @@ module Betfair
495
486
  end
496
487
 
497
488
  def combine(market, prices)
498
- market = details(market)
489
+ market = details(market)
499
490
  prices = prices(prices)
500
- market[:runners].each do |runner|
501
- runner.merge!( { market_id: market[:market_id] } )
502
- runner.merge!( { market_type_id: market[:market_type_id] } )
503
- runner.merge!(price_string(prices[runner[:runner_id]]))
491
+ market[:selection].each do |selection|
492
+ selection.merge!( { :market_id => market[:market_id] } )
493
+ selection.merge!( { :market_type_id => market[:market_type_id] } )
494
+ selection.merge!(price_string(prices[selection[:selection_id]]))
504
495
  end
505
496
  end
506
497
 
507
498
  ##
508
499
  #
509
500
  # Complete representation of market price data response,
510
- # except "removed runners" which is returned as raw string.
501
+ # except "removed selection" which is returned as raw string.
511
502
  #
512
503
  ##
513
504
  def prices_complete(prices)
514
505
  aux_hash = {}
515
- price_hash = {}
506
+ price_hash = {}
516
507
 
517
508
  prices.gsub! '\:', "\0"
518
509
  pieces = prices.split ":"
@@ -521,21 +512,21 @@ module Betfair
521
512
  aux = pieces.first
522
513
  aux.gsub! "\0", '\:'
523
514
  foo = aux.split('~')
524
- aux_hash = {
525
- market_id: foo[0].to_i,
526
- currency: foo[1].to_s,
527
- market_status: foo[2].to_s,
528
- in_play_delay: foo[3].to_i,
529
- number_of_winners: foo[4].to_i,
530
- market_information: foo[5].to_s,
531
- discount_allowed: foo[6] == 'true' ? true : false,
532
- market_base_rate: foo[7].to_s,
533
- refresh_time_in_milliseconds: foo[8].to_i,
534
- removed_runners: foo[9].to_s,
535
- bsp_market: foo[10] == 'Y' ? true : false
515
+ aux_hash = {
516
+ :market_id => foo[0].to_i,
517
+ :currency => foo[1].to_s,
518
+ :market_status => foo[2].to_s,
519
+ :in_play_delay => foo[3].to_i,
520
+ :number_of_winners => foo[4].to_i,
521
+ :market_information => foo[5].to_s,
522
+ :discount_allowed => foo[6] == 'true' ? true : false,
523
+ :market_base_rate => foo[7].to_s,
524
+ :refresh_time_in_milliseconds => foo[8].to_i,
525
+ :removed_selections => foo[9].to_s,
526
+ :bsp_market => foo[10] == 'Y' ? true : false
536
527
  }
537
528
 
538
- # now iterating over the prices excluding the first piece that we already parsed above
529
+ # now iterating over the prices excluding the first piece that we already parsed above
539
530
  pieces[1..-1].each do |piece|
540
531
  piece.gsub! "\0", '\:'
541
532
 
@@ -543,17 +534,17 @@ module Betfair
543
534
  # using the selection_id as hash key
544
535
  price_hash_key = bar[0].to_i
545
536
 
546
- price_hash[price_hash_key] = {
547
- selection_id: bar[0].to_i,
548
- order_index: bar[1].to_i,
549
- total_amount_matched: bar[2].to_f,
550
- last_price_matched: bar[3].to_f,
551
- handicap: bar[4].to_f,
552
- reduction_factor: bar[5].to_f,
553
- vacant: bar[6] == 'true' ? true : false,
554
- far_sp_price: bar[7].to_f,
555
- near_sp_price: bar[8].to_f,
556
- actual_sp_price: bar[9].to_f
537
+ price_hash[price_hash_key] = {
538
+ :selection_id => bar[0].to_i,
539
+ :order_index => bar[1].to_i,
540
+ :total_amount_matched => bar[2].to_f,
541
+ :last_price_matched => bar[3].to_f,
542
+ :handicap => bar[4].to_f,
543
+ :reduction_factor => bar[5].to_f,
544
+ :vacant => bar[6] == 'true' ? true : false,
545
+ :far_sp_price => bar[7].to_f,
546
+ :near_sp_price => bar[8].to_f,
547
+ :actual_sp_price => bar[9].to_f
557
548
  }
558
549
 
559
550
  # merge lay and back prices into price_hash
@@ -569,43 +560,29 @@ module Betfair
569
560
  string_raw = string
570
561
  string = string.split('|')
571
562
 
572
- price = {
573
- prices_string: nil,
574
- runner_matched: 0,
575
- last_back_price: 0,
576
- wom: 0,
577
- b1: 0,
578
- b1_available: 0,
579
- b2: 0,
580
- b2_available: 0,
581
- b3: 0,
582
- b3_available: 0,
583
- l1: 0,
584
- l1_available: 0,
585
- l2: 0,
586
- l2_available: 0,
587
- l3: 0,
588
- l3_available: 0
563
+ price = { :prices_string => nil, :selection_matched => 0, :last_back_price => 0, :wom => 0,
564
+ :b1 => 0, :b1_available => 0, :b2 => 0, :b2_available => 0, :b3 => 0, :b3_available => 0,
565
+ :l1 => 0, :l1_available => 0, :l2 => 0, :l2_available => 0, :l3 => 0, :l3_available => 0
589
566
  }
590
567
 
591
568
  if !string[0].nil? and !prices_only
592
- str = string[0].split('~')
569
+ str = string[0].split('~')
593
570
  price[:prices_string] = string_raw
594
- price[:runner_matched] = str[2].to_f
571
+ price[:selection_matched] = str[2].to_f
595
572
  price[:last_back_price] = str[3].to_f
596
573
  end
597
574
 
598
575
  # Get the b prices (which are actually the l prices)
599
576
  if !string[1].nil?
600
- b = string[1].split('~')
577
+ b = string[1].split('~')
601
578
  price[:b1] = b[0].to_f if !b[0].nil?
602
579
  price[:b1_available] = b[1].to_f if !b[1].nil?
603
580
  price[:b2] = b[4].to_f if !b[5].nil?
604
581
  price[:b2_available] = b[5].to_f if !b[6].nil?
605
582
  price[:b3] = b[8].to_f if !b[8].nil?
606
- price[:b3_available] = b[9].to_f if !b[9].nil?
583
+ price[:b3_available] = b[9].to_f if !b[9].nil?
607
584
  combined_b = price[:b1_available] + price[:b2_available] + price[:b3_available]
608
- end
585
+ end
609
586
 
610
587
  # Get the l prices (which are actually the l prices)
611
588
  if !string[2].nil?
@@ -615,16 +592,16 @@ module Betfair
615
592
  price[:l2] = l[4].to_f if !l[4].nil?
616
593
  price[:l2_available] = l[5].to_f if !l[5].nil?
617
594
  price[:l3] = l[8].to_f if !l[8].nil?
618
- price[:l3_available] = l[9].to_f if !l[9].nil?
595
+ price[:l3_available] = l[9].to_f if !l[9].nil?
619
596
  combined_l = price[:l1_available] + price[:l2_available] + price[:l3_available]
620
597
  end
621
598
 
622
599
  price[:wom] = combined_b / ( combined_b + combined_l ) unless combined_b.nil? or combined_l.nil?
623
600
 
624
- return price
601
+ return price
625
602
  end
626
-
627
- def odds_table
603
+
604
+ def odds_table
628
605
  odds_table = []
629
606
  (1.01..1.99).step(0.01).each { |i| odds_table << i.round(2) }
630
607
  (2..2.98).step(0.02).each { |i| odds_table << i.round(2) }