Skip to content

Commit 9da264f

Browse files
author
Bill Gathen
committed
Moved report-gathering logic into Report.
Added data gathering logic. Data returned as array of keyword hashes.
1 parent 00b0d8d commit 9da264f

File tree

3 files changed

+64
-41
lines changed

3 files changed

+64
-41
lines changed

lib/yieldmanager/client.rb

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,10 @@ def paginate block_size
9292
end until (block_size * (page-1)) > total
9393
end
9494

95-
def pull_report xml
96-
rpt = Yieldmanager::Report.new
97-
98-
rpt
95+
def pull_report token, xml
96+
report = Yieldmanager::Report.new
97+
report.pull(token, self.report, xml)
98+
report
9999
end
100100

101101
private
@@ -119,28 +119,5 @@ def load_service name
119119
wsdl_path = "#{BASE_URL}#{api_version}/#{name}.php?wsdl"
120120
SOAP::WSDLDriverFactory.new(wsdl_path).create_rpc_driver
121121
end
122-
123-
def request_report_token token, xml
124-
report.requestViaXML(token,xml)
125-
end
126-
127-
def retrieve_report_url token, report_token
128-
report_url = nil
129-
60.times do |secs| # Poll until report ready
130-
report_url = report.status(token,report_token)
131-
break if report_url != nil
132-
sleep(5)
133-
end
134-
report_url
135-
end
136-
137-
def retrieve_data url
138-
rpt = Yieldmanager::Report.new
139-
doc = open(url) { |f| Hpricot(f) }
140-
(doc/"header column").each do |col|
141-
rpt.headers << col.inner_html
142-
end
143-
rpt
144-
end
145122
end
146123
end

lib/yieldmanager/report.rb

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,47 @@
11
module Yieldmanager
22
class Report
3-
attr_accessor :headers
3+
attr_accessor :headers, :data
44

55
def initialize
66
self.headers = []
7+
self.data = []
8+
end
9+
10+
def pull token, report, xml
11+
report_token = request_report_token token, report, xml
12+
report_url = retrieve_report_url token, report, report_token
13+
retrieve_data report_url
14+
end
15+
16+
private
17+
18+
def request_report_token token, report, xml
19+
report.requestViaXML(token,xml)
20+
end
21+
22+
def retrieve_report_url token, report, report_token
23+
report_url = nil
24+
60.times do |secs| # Poll until report ready
25+
report_url = report.status(token,report_token)
26+
break if report_url != nil
27+
sleep(5)
28+
end
29+
report_url
30+
end
31+
32+
def retrieve_data url
33+
doc = open(url) { |f| Hpricot(f) }
34+
(doc/"header column").each do |col|
35+
headers << col.inner_html
36+
end
37+
(doc/"row").each_with_index do |row,idx|
38+
row_hash = {}
39+
(row/"column").each do |col|
40+
row_hash[headers[idx]] = col.inner_html
41+
end
42+
data << row_hash
43+
end
744
end
845
end
46+
947
end

spec/yieldmanager/report_spec.rb

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,46 @@
1616
end
1717

1818
it "returns report object" do
19-
rpt = @ym.pull_report(request_xml)
20-
rpt.should be_instance_of(Yieldmanager::Report)
19+
@ym.session do |token|
20+
rpt = @ym.pull_report(token, request_xml)
21+
rpt.should be_instance_of(Yieldmanager::Report)
22+
end
2123
end
2224

2325
it "makes request and returns report token" do
2426
@ym.session do |token|
25-
@ym.send(:request_report_token, token,request_xml).should_not be_nil
27+
rpt = Yieldmanager::Report.new
28+
rpt.send(:request_report_token, token, @ym.report, request_xml).should_not be_nil
2629
end
2730
end
2831

2932
it "uses report token to pull report url" do
3033
@ym.session do |token|
31-
report_token = @ym.send(:request_report_token, token, request_xml)
32-
report_url = @ym.send(:retrieve_report_url, token, report_token)
34+
rpt = Yieldmanager::Report.new
35+
report_token = rpt.send(:request_report_token, token, @ym.report, request_xml)
36+
report_url = rpt.send(:retrieve_report_url, token, @ym.report, report_token)
3337
report_url.should_not be_nil
3438
end
3539
end
3640

3741
it "uses report url to pull report" do
3842
@ym.session do |token|
39-
report_token = @ym.send(:request_report_token, token, request_xml)
40-
report_url = @ym.send(:retrieve_report_url, token, report_token)
43+
rpt = Yieldmanager::Report.new
44+
report_token = rpt.send(:request_report_token, token, @ym.report, request_xml)
45+
report_url = rpt.send(:retrieve_report_url, token, @ym.report, report_token)
4146

42-
report = @ym.send(:retrieve_data, report_url)
43-
report.should be_instance_of(Yieldmanager::Report)
44-
report.headers[0].should == "advertiser_name"
47+
rpt.send(:retrieve_data, report_url)
48+
rpt.headers[0].should == "advertiser_name"
4549
end
4650
end
4751

48-
it "offers data as name/value pairs"
49-
50-
it "offers data as ordered array"
52+
it "offers data as name/value pairs" do
53+
@ym.session do |token|
54+
report = @ym.pull_report(token, request_xml)
55+
report.data[0]['advertiser_name'].should_not be_nil
56+
# report.data[0][0].should == report.data[0]['advertiser_name']
57+
end
58+
end
5159

5260
it "complains if report token is nil"
5361

0 commit comments

Comments
 (0)