betfair 0.0.16 → 0.0.17

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/.gitignore CHANGED
@@ -5,4 +5,5 @@ pkg/*
5
5
  .rvmrc
6
6
  examples/bar.rb
7
7
  examples/doh.rb
8
+ examples/doh_latest.rb
8
9
  examples/doh.log
data/README CHANGED
@@ -44,9 +44,13 @@ as the UK.
44
44
  At the heart of the Betfair API is the `session_token`. In order to
45
45
  get one of these simply call:
46
46
 
47
- session_token = bf.login('username', 'password', 82, 0, 0, nil)
47
+ session_token = bf.login('username', 'password',
48
+ ::Betfair::API;;PRODUCT_ID_FREE, 0, 0, nil)
48
49
 
49
- Username and Password are fairly obvious.
50
+ Username and Password are fairly obvious. The `session_token` value
51
+ you get back responds to #success? which will tell you whether login
52
+ was successful or not. If `session_token.success?` returns false,
53
+ `session_token.to_s` will give you the error message.
50
54
 
51
55
  82 is the standard Product Id, you may have a different one depending
52
56
  on the level of Betfair API access that you have.
data/lib/betfair/api.rb CHANGED
@@ -15,6 +15,19 @@ module Betfair
15
15
  BET_TYPE_BACK = 'B'
16
16
 
17
17
 
18
+ ## Success and Failure get mixed in to API result values
19
+ # so that you can tell the difference easily - just call
20
+ # #success? on the result to find out if it worked
21
+ module Success
22
+ def success?; true; end
23
+ end # module Success
24
+
25
+
26
+ module Failure
27
+ def success?; false; end
28
+ end # module Failure
29
+
30
+
18
31
  ## API METHODS
19
32
  #
20
33
 
@@ -183,8 +196,8 @@ module Betfair
183
196
  :vendorSoftwareId => vendor_software_id,
184
197
  :locationId => location_id,
185
198
  :ipAddress => ip_address )
186
-
187
- session_token(response[:header])
199
+
200
+ return response.maybe_result( :header, :session_token )
188
201
  end
189
202
 
190
203
  #
@@ -299,7 +312,11 @@ module Betfair
299
312
 
300
313
 
301
314
  def maybe_result( *path )
302
- success? ? path.inject(self){|m,r| m[r]} : format_error()
315
+ if success?
316
+ path.inject(self){|m,r| m[r]}.extend( Success )
317
+ else
318
+ format_error().extend( Failure )
319
+ end
303
320
  end
304
321
 
305
322
 
@@ -483,4 +500,4 @@ module Betfair
483
500
 
484
501
  end
485
502
 
486
- end
503
+ end
@@ -1,3 +1,3 @@
1
1
  module Betfair
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
@@ -239,22 +239,41 @@ module Betfair
239
239
  @bf = Betfair::API.new
240
240
  end
241
241
 
242
- describe "login success" do
243
- it "should return a session token" do
244
- savon.expects(:login).returns(:success)
245
- session_token = @bf.login('username', 'password', 82, 0, 0, nil).to_s
246
- session_token.should be_an_instance_of(String)
242
+
243
+ describe "login" do
244
+ let( :response ) { @bf.login('username', 'password', 82, 0, 0, nil) }
245
+ subject { response }
246
+
247
+ before do savon.expects( api_call ).returns( api_response ) end
248
+
249
+ let( :api_call ) { :login }
250
+
251
+ describe "success" do
252
+ let( :api_response ) { :success }
253
+
254
+ it { should be_a_kind_of(String) }
255
+ it { should be_success }
247
256
  end
248
- end
249
257
 
250
- describe "login fail" do
251
- it "should return an error" do
252
- savon.expects(:login).returns(:fail)
253
- error_code = @bf.login('username', 'password', 82, 0, 0, nil)
254
- error_code.should eq('PRODUCT_REQUIRES_FUNDED_ACCOUNT')
258
+ describe "failure" do
259
+ describe "with a bad product code" do
260
+ let( :api_response ) { :fail }
261
+
262
+ it { should match('PRODUCT_REQUIRES_FUNDED_ACCOUNT') }
263
+ it { should_not be_success }
264
+ end
265
+
266
+ describe "with a bad password" do
267
+ let( :api_response ) { :bad_password }
268
+
269
+ it { should match("INVALID_USERNAME_OR_PASSWORD") }
270
+ it { should_not be_success }
271
+ end
272
+
255
273
  end
256
274
  end
257
275
 
276
+
258
277
  describe "proxy success" do
259
278
  it "should return a session token" do
260
279
  savon.expects(:login).returns(:success)
@@ -269,7 +288,7 @@ module Betfair
269
288
  savon.expects(:login).returns(:fail)
270
289
  proxy = 'http://localhost:8888'
271
290
  error_code = Betfair::API.new(proxy).login('username', 'password', 82, 0, 0, nil)
272
- error_code.should eq('PRODUCT_REQUIRES_FUNDED_ACCOUNT')
291
+ error_code.should match('PRODUCT_REQUIRES_FUNDED_ACCOUNT')
273
292
  end
274
293
  end
275
294
 
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xmlns:n2="http://www.betfair.com/publicapi/types/global/v3/"
5
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
6
+ <soap:Body>
7
+ <n:loginResponse xmlns:n="http://www.betfair.com/publicapi/v3/BFGlobalService/">
8
+ <n:Result xsi:type="n2:LoginResp">
9
+ <header xsi:type="n2:APIResponseHeader">
10
+ <errorCode xsi:type="n2:APIErrorEnum">OK</errorCode>
11
+ <minorErrorCode xsi:nil="1"></minorErrorCode>
12
+ <sessionToken xsi:nil="1"></sessionToken>
13
+ <timestamp xsi:type="xsd:dateTime">2012-03-13T07:44:21.422Z</timestamp>
14
+ </header>
15
+ <currency xsi:nil="1"></currency>
16
+ <errorCode xsi:type="n2:LoginErrorEnum">INVALID_USERNAME_OR_PASSWORD</errorCode>
17
+ <minorErrorCode xsi:nil="1"></minorErrorCode>
18
+ <validUntil xsi:type="xsd:dateTime">0001-01-01T00:00:00.000Z</validUntil>
19
+ </n:Result>
20
+ </n:loginResponse>
21
+ </soap:Body>
22
+ </soap:Envelope>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: betfair
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
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: 2012-03-13 00:00:00.000000000Z
12
+ date: 2012-03-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
16
- requirement: &70157897063020 !ruby/object:Gem::Requirement
16
+ requirement: &70181452429080 !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: *70157897063020
24
+ version_requirements: *70181452429080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70157897062340 !ruby/object:Gem::Requirement
27
+ requirement: &70181452427520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70157897062340
35
+ version_requirements: *70181452427520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70157897061740 !ruby/object:Gem::Requirement
38
+ requirement: &70181452426460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70157897061740
46
+ version_requirements: *70181452426460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: savon_spec
49
- requirement: &70157897061180 !ruby/object:Gem::Requirement
49
+ requirement: &70181452425740 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70157897061180
57
+ version_requirements: *70181452425740
58
58
  description: Gem for accessing the Betfair API.
59
59
  email:
60
60
  - lukeb@lukebyrne.com
@@ -68,7 +68,6 @@ files:
68
68
  - README
69
69
  - Rakefile
70
70
  - betfair.gemspec
71
- - examples/doh.log
72
71
  - examples/foo.rb
73
72
  - lib/betfair.rb
74
73
  - lib/betfair/api.rb
@@ -86,6 +85,7 @@ files:
86
85
  - spec/fixtures/get_market_prices_compressed/success.xml
87
86
  - spec/fixtures/get_mu_bets/fail.xml
88
87
  - spec/fixtures/get_mu_bets/success.xml
88
+ - spec/fixtures/login/bad_password.xml
89
89
  - spec/fixtures/login/fail.xml
90
90
  - spec/fixtures/login/success.xml
91
91
  - spec/fixtures/place_bets/fail.xml
@@ -105,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  segments:
107
107
  - 0
108
- hash: 1829796573211684180
108
+ hash: -4185997546867498005
109
109
  required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  none: false
111
111
  requirements:
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  version: '0'
115
115
  segments:
116
116
  - 0
117
- hash: 1829796573211684180
117
+ hash: -4185997546867498005
118
118
  requirements: []
119
119
  rubyforge_project: betfair
120
120
  rubygems_version: 1.8.10
@@ -135,6 +135,7 @@ test_files:
135
135
  - spec/fixtures/get_market_prices_compressed/success.xml
136
136
  - spec/fixtures/get_mu_bets/fail.xml
137
137
  - spec/fixtures/get_mu_bets/success.xml
138
+ - spec/fixtures/login/bad_password.xml
138
139
  - spec/fixtures/login/fail.xml
139
140
  - spec/fixtures/login/success.xml
140
141
  - spec/fixtures/place_bets/fail.xml