pasrb 0.0.1

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/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ v0.1. Initial release
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ (c) 2010 Mark Abramov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,10 @@
1
+ CHANGELOG
2
+ LICENSE
3
+ Manifest
4
+ README
5
+ Rakefile
6
+ autotest/discover.rb
7
+ lib/pas.rb
8
+ pasrb.gemspec
9
+ spec/pas_spec.rb
10
+ spec/spec_helper.rb
data/README ADDED
@@ -0,0 +1,25 @@
1
+ PAS.rb -- the ruby window to PAS API
2
+ ------------------------------------
3
+
4
+ This gem is a client library for querying PAS API.
5
+ API docs can be found here: http://www.pokeraffiliatesolutions.com/docs/
6
+
7
+ Installation
8
+ ------------
9
+
10
+ * `gem install pasrb`
11
+ * `require pasrb`
12
+ *
13
+ pas_api = PAS.new('YOUR_API_ACCESS_KEY', 'YOUR_API_ACCESS_TOKEN')
14
+ pas_api.list_all_members # { "SAMPLEUSER" => {:id => 28746, :login => "SAMPLEUSER", ...}, "WTFOMG" => {:id => 28123, :login => "WTFOMG", ...} }
15
+
16
+
17
+ Important notes
18
+ ---------------
19
+
20
+ That is some minimal subset of PAS API functions (I, for one, don't need most of them), if you'd like to modify / add functionality, feel free to fork + pull request.
21
+
22
+ License & Authorship
23
+ --------------------
24
+
25
+ PASrb is written by Mark Markiz Abramov and distributed under terms of MIT license.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'echoe'
2
+ Echoe.new('pasrb', '0.0.1') do |g|
3
+ g.description = "PokerAffiliateSupport api querying via ruby"
4
+ g.url = "http://github.com/markiz/pasrb"
5
+ g.author = "Markiz"
6
+ g.email = "markizko@gmail.com"
7
+ g.ignore_pattern = ['spec/*/public/**/*']
8
+ g.runtime_dependencies = ["mechanize", "xml-simple"]
9
+ g.development_dependencies = []
10
+ g.use_sudo = false
11
+ end
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
data/lib/pas.rb ADDED
@@ -0,0 +1,213 @@
1
+ require 'base64'
2
+ require 'openssl'
3
+ require 'cgi'
4
+
5
+ require 'rubygems'
6
+ require 'mechanize'
7
+ require 'xmlsimple'
8
+
9
+ class PAS
10
+ # Your api key
11
+ attr_accessor :api_key
12
+
13
+ # api token for querying, set it if you know it or let it be auto-requested
14
+ attr_accessor :api_token
15
+
16
+
17
+
18
+
19
+ def initialize(api_key, api_token, api_site = "publisher.pokeraffiliatesolutions.com")
20
+ self.api_site = api_site
21
+ self.api_key = api_key
22
+ self.api_token = api_token
23
+ end
24
+
25
+ # Site that is using the PAS api
26
+ def api_site
27
+ @api_site
28
+ end
29
+
30
+ def api_site=(value)
31
+ @api_site = value =~ /^https:\/\// ? value : "https://#{value}"
32
+ end
33
+
34
+
35
+ def request_signature(uri, method = "GET", timestamp = Time.now.to_i)
36
+ payload = api_token.to_s + method + uri + timestamp.to_s
37
+ signature = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, api_key, payload)
38
+ CGI::escape(Base64.encode64(signature).chomp)
39
+ end
40
+
41
+ ## MEMBER LEVEL
42
+
43
+ # List all members
44
+ # That is a very request-heavy method, be afraid, be very afraid
45
+ def list_all_members
46
+ @all_members ||= list_all_members!
47
+ end
48
+ alias_method :all_members, :list_all_members
49
+
50
+ def list_all_members!
51
+ members = (1..member_page_count).inject([]) {|result, page| result + member_page(page) }
52
+ members.inject({}) do |result, member|
53
+ result[member[:id]] = member
54
+ result[member[:login]] = member
55
+ result
56
+ end
57
+ rescue
58
+ {}
59
+ end
60
+
61
+ # Returns member page count
62
+ # @api private
63
+ def member_page_count
64
+ @member_page_count ||= member_page_count!
65
+ end
66
+
67
+ # @api private
68
+ def member_page_count!
69
+ result = xml_to_hash(make_request("/publisher_members.xml", "GET"))
70
+ result["members"]["total_pages"].to_i
71
+ rescue
72
+ 0
73
+ end
74
+
75
+ # Gets a single members page
76
+ # @api private
77
+ def member_page(page)
78
+ result = xml_to_hash(make_request("/publisher_members.xml", "GET", {:page => page}))
79
+ members = [result["members"]["member"]].flatten
80
+ symbolize_keys(members).map {|m| m[:id] = m[:id].to_i; m}
81
+ rescue
82
+ []
83
+ end
84
+
85
+ # Gets a list of all member trackers
86
+ def get_member_trackers(member_id)
87
+ result = xml_to_hash(make_request("/publisher_members/#{member_id}/stats.xml", "GET"))
88
+ [result["statistics"]["member_trackers"]["member_tracker"]].flatten.map {|t| symbolize_keys(t) }.map {|t| t[:id] = t[:id].to_i; t }
89
+ rescue
90
+ []
91
+ end
92
+
93
+ def get_member_trackers_stats(member_id, start_date, end_date)
94
+ @member_tracker_stats ||= {}
95
+ @member_tracker_stats[member_id] ||= {}
96
+ @member_tracker_stats[member_id][start_date] ||= {}
97
+ @member_tracker_stats[member_id][start_date][end_date] ||= get_member_trackers_stats!(member_id, start_date, end_date)
98
+ end
99
+
100
+ def get_member_trackers_stats!(member_id, start_date, end_date)
101
+ start_date = start_date.strftime("%Y-%m-%d")
102
+ end_date = end_date.strftime("%Y-%m-%d")
103
+ response = xml_to_hash(make_request("/publisher_members/#{member_id}/stats.xml", "GET", {:start_date => start_date, :end_date => end_date}))
104
+ trackers = [response["statistics"]["member_trackers"]["member_tracker"]].flatten
105
+ trackers.inject({}) do |result, tracker|
106
+ id = tracker["id"].to_i
107
+ result[id] = {
108
+ :identifier => tracker["identifier"],
109
+ :poker_room_id => tracker["poker_room_id"],
110
+ :poker_room => tracker["poker_room"],
111
+ :mgr => tracker["mgr"].to_f,
112
+ :rakeback => tracker["rakeback"].to_f
113
+ }
114
+ result[id.to_s] = result[id]
115
+ result[tracker["identifier"]] = result[id]
116
+ result
117
+ end
118
+ rescue
119
+ nil
120
+ end
121
+
122
+ def get_member_tracker_stats(member_id, tracker_id, start_date, end_date)
123
+ trackers = get_member_trackers_stats(member_id, start_date, end_date)
124
+ trackers ? trackers[tracker_id] : nil
125
+ rescue
126
+ nil
127
+ end
128
+
129
+ def create_member_tracker(member_id, identifier, website_offer_id)
130
+ new_member_tracker = {"member_tracker" => {"identifier" => identifier, "website_offer_id" => website_offer_id}}
131
+ response = make_request("/publisher_members/#{member_id}/publisher_member_trackers.xml", "POST", hash_to_xml(new_member_tracker))
132
+ response = xml_to_hash(response)["member_tracker"]
133
+ result = {}
134
+ result[:affiliate_id] = response["affiliate_id"]["content"].to_i
135
+ result[:id] = response["id"]["content"].to_i
136
+ result[:identifier] = response["identifier"]
137
+ result[:member_rakeback_rate] = response["member_rakeback_rate"]
138
+ result[:poker_room_id] = response["poker_room_id"]
139
+ result
140
+ rescue
141
+ nil
142
+ end
143
+ #protected
144
+ def xml_to_hash(xml)
145
+ XmlSimple.xml_in(xml,
146
+ 'forcearray' => false,
147
+ 'forcecontent' => false,
148
+ 'keeproot' => true
149
+ )
150
+ end
151
+
152
+ def hash_to_xml(hash)
153
+ XmlSimple.xml_out(hash,
154
+ 'keeproot' => true
155
+ )
156
+ end
157
+
158
+ def new_request
159
+ Mechanize.new
160
+ end
161
+
162
+ def make_request(uri, method, payload = {}, signed = true)
163
+ request = new_request
164
+
165
+ query_params = if signed
166
+ timestamp = Time.now.to_i
167
+ {
168
+ :timestamp, timestamp,
169
+ :api_token, api_token,
170
+ :signature, request_signature(uri, method, timestamp)
171
+ }
172
+ else
173
+ {}
174
+ end
175
+
176
+ case method
177
+ when "GET"
178
+ request.get(api_site + uri + "?" + build_query_string(query_params.merge(payload))).body
179
+ when "POST"
180
+ request.post(api_site + uri + "?" + build_query_string(query_params), payload, "Content-Type" => "application/xml").body
181
+ else
182
+ nil
183
+ end
184
+ end
185
+
186
+
187
+ #
188
+ # Basically the same as the Mechanize::Util.build_query_string but without urlencode
189
+ # (would have urlencoded it twice otherwise)
190
+ #
191
+ def build_query_string(params)
192
+ params.map { |k,v|
193
+ [k.to_s, v.to_s].join("=") if k
194
+ }.compact.join('&')
195
+ end
196
+
197
+ # recursive key symbolization
198
+ def symbolize_keys(arg)
199
+ case arg
200
+ when Array
201
+ arg.map { |elem| symbolize_keys elem }
202
+ when Hash
203
+ Hash[
204
+ arg.map { |key, value|
205
+ k = key.is_a?(String) ? key.to_sym : key
206
+ v = symbolize_keys value
207
+ [k,v]
208
+ }]
209
+ else
210
+ arg
211
+ end
212
+ end
213
+ end
data/pasrb.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{pasrb}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Markiz"]
9
+ s.date = %q{2010-10-19}
10
+ s.description = %q{PokerAffiliateSupport api querying via ruby}
11
+ s.email = %q{markizko@gmail.com}
12
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/pas.rb"]
13
+ s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "autotest/discover.rb", "lib/pas.rb", "spec/pas_spec.rb", "spec/spec_helper.rb", "pasrb.gemspec"]
14
+ s.homepage = %q{http://github.com/markiz/pasrb}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Pasrb", "--main", "README"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{pasrb}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{PokerAffiliateSupport api querying via ruby}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<mechanize>, [">= 0"])
27
+ s.add_runtime_dependency(%q<xml-simple>, [">= 0"])
28
+ else
29
+ s.add_dependency(%q<mechanize>, [">= 0"])
30
+ s.add_dependency(%q<xml-simple>, [">= 0"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<mechanize>, [">= 0"])
34
+ s.add_dependency(%q<xml-simple>, [">= 0"])
35
+ end
36
+ end
data/spec/pas_spec.rb ADDED
@@ -0,0 +1,380 @@
1
+ require 'spec_helper'
2
+
3
+ describe PAS do
4
+ def stub_request(content)
5
+ subject.stub!(:new_request).and_return(mock("Request", :get => mock("Response", :body => content), :post => mock("Response", :body => content)))
6
+ end
7
+
8
+ subject { PAS.new("API_MEGA_KEY", "API_ZETA_TOKEN", "exampletracker.com") }
9
+
10
+ describe "initialization" do
11
+ it "should set api key from arguments" do
12
+ PAS.new("FGSFDS", "").api_key.should == "FGSFDS"
13
+ end
14
+
15
+ it "should optionally accept api token" do
16
+ PAS.new("", "WTF").api_token.should == "WTF"
17
+ end
18
+
19
+ it "should optionally set api site from arguments" do
20
+ PAS.new("", "", "https://exampletracker.com").api_site.should == "https://exampletracker.com"
21
+ end
22
+
23
+ it "should prepend https:// to url" do
24
+ PAS.new("","","exampletracker.com").api_site.should == "https://exampletracker.com"
25
+ end
26
+
27
+ end
28
+
29
+ describe "#request_signature" do
30
+ subject { PAS.new("BaEc8f13QlXgjQd4fBQ", "143aec8f13dfcc6cb364e6a9c9ff4bb0") }
31
+ let(:method) { "GET" }
32
+ let(:uri) { "/publisher_members/404043.xml" }
33
+ let(:timestamp) { 1276980199 }
34
+ let(:api_token) { "143aec8f13dfcc6cb364e6a9c9ff4bb0" }
35
+
36
+ before(:each) do
37
+ Time.stub!(:now).and_return(Time.at(timestamp))
38
+ subject.api_token = api_token
39
+ end
40
+
41
+ it "should generate valid signature for given params" do
42
+ subject.request_signature(uri, method).should == "3gc17tMRqcXHxFKxBEdheCYfb0Q%3D"
43
+ end
44
+
45
+ it "should accept timestamp as an optional argument" do
46
+ subject.request_signature(uri, method, timestamp).should == "3gc17tMRqcXHxFKxBEdheCYfb0Q%3D"
47
+ end
48
+ end
49
+
50
+ describe "#member_page_count" do
51
+ subject { PAS.new("BaEc8f13QlXgjQd4fBQ", "143aec8f13dfcc6cb364e6a9c9ff4bb0") }
52
+ before(:each) {
53
+ stub_request("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<members current_page=\"1\" next_page=\"\" total_pages=\"98\" total_entries=\"0\">\n</members>\n")
54
+ }
55
+ it "should set itself from member list page" do
56
+ subject.send(:member_page_count).should == 98
57
+ end
58
+
59
+ it "should return 0 on terrible, terrible failures" do
60
+ stub_request("<invalid></xml>")
61
+ subject.send(:member_page_count).should == 0
62
+ end
63
+ end
64
+
65
+ describe "#member_page" do
66
+ before(:each) {
67
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
68
+ <members current_page="2" next_page="3" total_pages="74" total_entries="2943">
69
+ <member>
70
+ <id>26371</id>
71
+ <outside_id></outside_id>
72
+ <website_id>53</website_id>
73
+ <login>aurelius</login>
74
+ <email>aurelius@mail.ru</email>
75
+ <first_name>Marcus</first_name>
76
+ <last_name>Aurelius</last_name>
77
+ <referring_member_id></referring_member_id>
78
+ <address_1></address_1>
79
+ <address_2></address_2>
80
+ <aim></aim>
81
+ <skype></skype>
82
+ <phone></phone>
83
+ <yahoo></yahoo>
84
+ <city></city>
85
+ <state></state>
86
+ <zip_code></zip_code>
87
+ <country></country>
88
+ <created_at>2006-10-11 19:00:00 -0500</created_at>
89
+ <date_of_birth>1964-07-06</date_of_birth>
90
+ <gender></gender>
91
+ </member>
92
+ <member>
93
+ <id>26380</id>
94
+ <outside_id></outside_id>
95
+ <website_id>53</website_id>
96
+ <login>durachok</login>
97
+ <email>durachok@yandex.ru</email>
98
+ <first_name>Dumbo</first_name>
99
+ <last_name>Shmumbo</last_name>
100
+ <referring_member_id></referring_member_id>
101
+ <address_1></address_1>
102
+ <address_2></address_2>
103
+ <aim></aim>
104
+ <skype></skype>
105
+ <phone></phone>
106
+ <yahoo></yahoo>
107
+ <city></city>
108
+ <state></state>
109
+ <zip_code></zip_code>
110
+ <country></country>
111
+ <created_at>2006-10-12 19:00:00 -0500</created_at>
112
+ <date_of_birth></date_of_birth>
113
+ <gender></gender>
114
+ </member>
115
+ </members>
116
+ ')
117
+ }
118
+
119
+ it "should parse members out of a member page" do
120
+ members = subject.member_page(2)
121
+ members[0][:id].should == 26371
122
+ members[0][:login].should == "aurelius"
123
+ members[0][:first_name].should == "Marcus"
124
+ members[0][:last_name].should == "Aurelius"
125
+ end
126
+
127
+ it "should return empty error on failures" do
128
+ stub_request("<invalid></xml>")
129
+ subject.member_page(2).should == []
130
+ end
131
+ end
132
+
133
+
134
+ describe "#all_members" do
135
+ before(:each) {
136
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
137
+ <members current_page="1" next_page="1" total_pages="2" total_entries="2">
138
+ <member>
139
+ <id>26371</id>
140
+ <outside_id></outside_id>
141
+ <website_id>53</website_id>
142
+ <login>aurelius</login>
143
+ <email>aurelius@mail.ru</email>
144
+ <first_name>Marcus</first_name>
145
+ <last_name>Aurelius</last_name>
146
+ <referring_member_id></referring_member_id>
147
+ <address_1></address_1>
148
+ <address_2></address_2>
149
+ <aim></aim>
150
+ <skype></skype>
151
+ <phone></phone>
152
+ <yahoo></yahoo>
153
+ <city></city>
154
+ <state></state>
155
+ <zip_code></zip_code>
156
+ <country></country>
157
+ <created_at>2006-10-11 19:00:00 -0500</created_at>
158
+ <date_of_birth>1964-07-06</date_of_birth>
159
+ <gender></gender>
160
+ </member>
161
+ <member>
162
+ <id>26380</id>
163
+ <outside_id></outside_id>
164
+ <website_id>53</website_id>
165
+ <login>durachok</login>
166
+ <email>durachok@yandex.ru</email>
167
+ <first_name>Dumbo</first_name>
168
+ <last_name>Shmumbo</last_name>
169
+ <referring_member_id></referring_member_id>
170
+ <address_1></address_1>
171
+ <address_2></address_2>
172
+ <aim></aim>
173
+ <skype></skype>
174
+ <phone></phone>
175
+ <yahoo></yahoo>
176
+ <city></city>
177
+ <state></state>
178
+ <zip_code></zip_code>
179
+ <country></country>
180
+ <created_at>2006-10-12 19:00:00 -0500</created_at>
181
+ <date_of_birth></date_of_birth>
182
+ <gender></gender>
183
+ </member>
184
+ </members>
185
+ ')
186
+ }
187
+
188
+ it "should get all pages of members" do
189
+ subject.should_receive(:member_page).with(1).and_return([])
190
+ subject.should_receive(:member_page).with(2).and_return([])
191
+ subject.all_members
192
+ end
193
+
194
+ it "should return a hash accessible by member id" do
195
+ subject.all_members[26380][:first_name].should == "Dumbo"
196
+ end
197
+
198
+ it "should return a hash accessible by member login" do
199
+ subject.all_members["durachok"][:first_name].should == "Dumbo"
200
+ end
201
+
202
+ it "should return empty hash on failures" do
203
+ stub_request("<invalid></xml>")
204
+ subject.all_members.should == {}
205
+ end
206
+ end
207
+
208
+ describe "#get_member_trackers" do
209
+ before(:each) {
210
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
211
+ <statistics start_date="2010-10-01" end_date="2010-10-31">
212
+ <member_id>26857</member_id>
213
+ <mgr>-0.39</mgr>
214
+ <rakeback>-0.13</rakeback>
215
+ <member_trackers type="array">
216
+ <member_tracker>
217
+ <id>9489</id>
218
+ <identifier>kit_the_kid</identifier>
219
+ <poker_room_id>5</poker_room_id>
220
+ <poker_room>UB.com</poker_room>
221
+ <mgr>0.00</mgr>
222
+ <rakeback>0.00</rakeback>
223
+ </member_tracker>
224
+ <member_tracker>
225
+ <id>9706</id>
226
+ <identifier>renevacio</identifier>
227
+ <poker_room_id>12</poker_room_id>
228
+ <poker_room>Sun Poker</poker_room>
229
+ <mgr>0.00</mgr>
230
+ <rakeback>0.00</rakeback>
231
+ </member_tracker>
232
+ <member_tracker>
233
+ <id>24308</id>
234
+ <identifier>KitVetrogon</identifier>
235
+ <poker_room_id>29</poker_room_id>
236
+ <poker_room>Full Tilt Poker</poker_room>
237
+ <mgr>-0.39</mgr>
238
+ <rakeback>-0.13</rakeback>
239
+ </member_tracker>
240
+ <member_tracker>
241
+ <id>25477</id>
242
+ <identifier>Alan_Dzazoev</identifier>
243
+ <poker_room_id>85</poker_room_id>
244
+ <poker_room>Minted Poker</poker_room>
245
+ <mgr>0.00</mgr>
246
+ <rakeback>0.00</rakeback>
247
+ </member_tracker>
248
+ </member_trackers>
249
+ </statistics>
250
+ ')
251
+ }
252
+
253
+ it "should get all the member trackers for given member id" do
254
+ trackers = subject.get_member_trackers(26857)
255
+ trackers[0][:id].should == 9489
256
+ trackers[0][:identifier].should == "kit_the_kid"
257
+ trackers[1][:id].should == 9706
258
+ trackers[1][:identifier].should == "renevacio"
259
+ end
260
+
261
+ it "should return empty array on failure" do
262
+ stub_request("<invalid></xml>")
263
+ subject.get_member_trackers(26857).should == []
264
+ end
265
+ end
266
+
267
+
268
+ describe "#get_member_trackers_stats" do
269
+ before(:each) {
270
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
271
+ <statistics start_date="2010-08-01" end_date="2010-08-18">
272
+ <member_id>12345</member_id>
273
+ <mgr>484.91</mgr>
274
+ <rakeback>218.21</rakeback>
275
+ <member_trackers type="array">
276
+ <member_tracker>
277
+ <id>6</id>
278
+ <identifier>qq124</identifier>
279
+ <poker_room_id>293</poker_room_id>
280
+ <poker_room>Poker Heaven</poker_room>
281
+ <mgr>484.91</mgr>
282
+ <rakeback>218.21</rakeback>
283
+ </member_tracker>
284
+ <member_tracker>
285
+ <id>2195</id>
286
+ <identifier>qq1244343</identifier>
287
+ <poker_room_id>293</poker_room_id>
288
+ <poker_room>Poker Heaven</poker_room>
289
+ <mgr>0</mgr>
290
+ <rakeback>0</rakeback>
291
+ </member_tracker>
292
+ </member_trackers>
293
+ </statistics>')
294
+ }
295
+
296
+ let(:member_id) { 12345 }
297
+
298
+ it "should parse out members" do
299
+ members = subject.get_member_trackers_stats(member_id, Date.parse("2010-08-01"), Date.parse("2010-08-18"))
300
+ members[6][:identifier].should == "qq124"
301
+ members[2195][:identifier].should == "qq1244343"
302
+ members["qq124"].should == members[6]
303
+ end
304
+
305
+ it "should return nil on terrible, terrible failures" do
306
+ stub_request("<invalid></xml>")
307
+ subject.get_member_trackers_stats(member_id, Date.parse("2010-08-01"), Date.parse("2010-08-18")).should == nil
308
+ end
309
+ end
310
+ describe "#get_member_tracker_stats" do
311
+ before(:each) {
312
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
313
+ <statistics start_date="2010-08-01" end_date="2010-08-18">
314
+ <member_id>12345</member_id>
315
+ <mgr>484.91</mgr>
316
+ <rakeback>218.21</rakeback>
317
+ <member_trackers type="array">
318
+ <member_tracker>
319
+ <id>6</id>
320
+ <identifier>qq124</identifier>
321
+ <poker_room_id>293</poker_room_id>
322
+ <poker_room>Poker Heaven</poker_room>
323
+ <mgr>484.91</mgr>
324
+ <rakeback>218.21</rakeback>
325
+ </member_tracker>
326
+ <member_tracker>
327
+ <id>2195</id>
328
+ <identifier>qq1244343</identifier>
329
+ <poker_room_id>293</poker_room_id>
330
+ <poker_room>Poker Heaven</poker_room>
331
+ <mgr>0</mgr>
332
+ <rakeback>0</rakeback>
333
+ </member_tracker>
334
+ </member_trackers>
335
+ </statistics>')
336
+ }
337
+
338
+ let(:member_id) { 12345 }
339
+
340
+ it "should use members stats for specific member" do
341
+ subject.get_member_tracker_stats(member_id, "qq124", Date.parse("2010-08-01"), Date.parse("2010-08-18"))[:rakeback].should == 218.21
342
+ end
343
+
344
+ it "should return nil on terrible, terrible failures" do
345
+ stub_request("<invalid></xml>")
346
+ subject.get_member_tracker_stats(member_id, "qq124", Date.parse("2010-08-01"), Date.parse("2010-08-18")).should == nil
347
+ end
348
+ end
349
+
350
+ describe "#create_member_tracker" do
351
+ before(:each) {
352
+ stub_request('<?xml version="1.0" encoding="UTF-8"?>
353
+ <member_tracker>
354
+ <affiliate_id type="integer">6</affiliate_id>
355
+ <created_at type="datetime">2010-07-09T13:15:47-05:00</created_at>
356
+ <id type="integer">120070</id>
357
+ <identifier>NEWTESTRACKER</identifier>
358
+ <member_id type="integer">222384334</member_id>
359
+ <poker_room_id type="integer">6</poker_room_id>
360
+ <signup_url>http://www.absolutepoker.com/main.asp?host=1751</signup_url>
361
+ <website_id type="integer">4201</website_id>
362
+ <member_rakeback_rate>30%</member_rakeback_rate>
363
+ </member_tracker>')
364
+ }
365
+ let(:identifier) { "NEWTESTRACKER" }
366
+ let(:website_offer_id) { 6 }
367
+ let(:member_id) { 222384334 }
368
+ it "should send a post request creating a member tracker" do
369
+ response = subject.create_member_tracker(member_id, identifier, website_offer_id)
370
+ response[:id].should == 120070
371
+ response[:identifier].should == "NEWTESTRACKER"
372
+ response[:member_rakeback_rate].should == "30%"
373
+ end
374
+
375
+ it "should return nil on terrible, terrible failures" do
376
+ stub_request("<invalid></xml>")
377
+ subject.create_member_tracker(member_id, identifier, website_offer_id).should == nil
378
+ end
379
+ end
380
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+
4
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), ".."))
5
+ require 'lib/pas'
6
+
7
+ Dir["spec/shared/*.rb"].each {|f| require f}
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pasrb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Markiz
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-19 00:00:00 +04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: mechanize
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: xml-simple
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: PokerAffiliateSupport api querying via ruby
50
+ email: markizko@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - CHANGELOG
57
+ - LICENSE
58
+ - README
59
+ - lib/pas.rb
60
+ files:
61
+ - CHANGELOG
62
+ - LICENSE
63
+ - Manifest
64
+ - README
65
+ - Rakefile
66
+ - autotest/discover.rb
67
+ - lib/pas.rb
68
+ - spec/pas_spec.rb
69
+ - spec/spec_helper.rb
70
+ - pasrb.gemspec
71
+ has_rdoc: true
72
+ homepage: http://github.com/markiz/pasrb
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --line-numbers
78
+ - --inline-source
79
+ - --title
80
+ - Pasrb
81
+ - --main
82
+ - README
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 11
100
+ segments:
101
+ - 1
102
+ - 2
103
+ version: "1.2"
104
+ requirements: []
105
+
106
+ rubyforge_project: pasrb
107
+ rubygems_version: 1.3.7
108
+ signing_key:
109
+ specification_version: 3
110
+ summary: PokerAffiliateSupport api querying via ruby
111
+ test_files: []
112
+