yieldmanager 0.8.4 → 0.8.5
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/{README.rdoc → README.md} +46 -39
- data/VERSION +1 -1
- data/lib/soap4r_19_patch/soap/property.rb +12 -12
- data/yieldmanager.gemspec +4 -4
- metadata +4 -4
data/{README.rdoc → README.md}
RENAMED
@@ -1,29 +1,33 @@
|
|
1
|
-
|
1
|
+
# yieldmanager
|
2
2
|
|
3
|
-
This gem offers read/write access to YieldManager's API tools and
|
3
|
+
This gem offers read/write access to [YieldManager's API tools](https://api.yieldmanager.com/doc/) and
|
4
4
|
ad-hoc reporting through the Reportware tool.
|
5
5
|
|
6
6
|
Currently it generates a fresh wsdl from the api.yieldmanager.com site the
|
7
7
|
first time you use a service (in the future it will use locally-cached
|
8
8
|
copies) and re-uses that wsdl for the life of the Yieldmanager::Client object.
|
9
9
|
|
10
|
-
This version implements API version 1.33
|
10
|
+
This version implements API version 1.33.
|
11
11
|
|
12
|
-
|
12
|
+
### Installation
|
13
13
|
|
14
|
-
Yieldmanager is available as a gem
|
14
|
+
Yieldmanager is available as a gem for easy installation.
|
15
15
|
|
16
16
|
sudo gem install yieldmanager
|
17
17
|
|
18
|
-
|
18
|
+
or if you're using [RVM](https://rvm.beginrescueend.com/) (and why on earth wouldn't you?)
|
19
19
|
|
20
|
+
gem install yieldmanager
|
21
|
+
|
22
|
+
The project is available for review/forking on github.com
|
23
|
+
|
20
24
|
git clone git://github.com/billgathen/yieldmanager.git
|
21
25
|
|
22
26
|
To use in a Rails project, add this to config/environment.rb:
|
23
27
|
|
24
28
|
config.gem 'yieldmanager'
|
25
29
|
|
26
|
-
|
30
|
+
### Creating a Yieldmanager::Client
|
27
31
|
|
28
32
|
require 'yieldmanager'
|
29
33
|
|
@@ -41,36 +45,38 @@ To access the test environment, use this:
|
|
41
45
|
:env => "test"
|
42
46
|
)
|
43
47
|
|
44
|
-
The keys can also be passed as
|
48
|
+
The keys can also be passed as strings: 'user', 'pass' and 'env'.
|
45
49
|
|
46
|
-
|
50
|
+
**NOTE** Changing the environment after creation has no effect!
|
47
51
|
|
48
|
-
|
52
|
+
### What API version am I using?
|
49
53
|
|
50
54
|
To check (or log) the current API version, execute the following:
|
51
55
|
|
52
|
-
|
56
|
+
Yieldmanager::Client.api_version
|
53
57
|
|
54
|
-
|
58
|
+
### Finding available services
|
55
59
|
|
56
60
|
@ym.available_services
|
57
61
|
|
58
|
-
|
62
|
+
### Using a service
|
59
63
|
|
60
64
|
@ym.session do |token|
|
61
65
|
@currencies = @ym.dictionary.getCurrencies(token)
|
62
66
|
end
|
63
67
|
|
64
|
-
|
68
|
+
**GOTCHA** In projects with ActiveRecord enabled (i.e., Rails projects)
|
65
69
|
SOAP will identify returned data as AR objects if there's a
|
66
70
|
naming collision. For example, if you're running
|
71
|
+
|
67
72
|
@ym.creative.get(token,123)
|
68
|
-
|
73
|
+
|
74
|
+
and you have an AR objects for a **creatives** table in the db, the
|
69
75
|
SOAP parser will interpret the returned SOAP object as
|
70
76
|
an AR Creative object, resulting in bizarre errors. Uniquely
|
71
77
|
re-name your AR object to eliminate the conflict.
|
72
78
|
|
73
|
-
|
79
|
+
### Pagination
|
74
80
|
|
75
81
|
Some calls return datasets too large to retrieve all at once.
|
76
82
|
Pagination allows you to pull them back incrementally, handling
|
@@ -87,12 +93,12 @@ the partial dataset on-the-fly or accumulating it for later use.
|
|
87
93
|
end
|
88
94
|
|
89
95
|
|
90
|
-
|
96
|
+
### Pulling reports
|
91
97
|
|
92
98
|
Accessing reportware assumes you've used the "Get request XML"
|
93
99
|
functionality in the UI to get your request XML, or have
|
94
100
|
crafted one from scratch. Assuming it's in a variable called
|
95
|
-
|
101
|
+
**request_xml**, you'd access the data this way:
|
96
102
|
|
97
103
|
@ym.session do |token|
|
98
104
|
report = @ym.pull_report(token, request_xml)
|
@@ -109,59 +115,60 @@ Column data can be accessed either by index or column name:
|
|
109
115
|
report.data[0].by_name('advertiser_name') # => "Bob's Ads"
|
110
116
|
report.data[0].by_name(:advertiser_name) # => "Bob's Ads"
|
111
117
|
|
112
|
-
If you call
|
113
|
-
|
118
|
+
If you call **by_name** with a non-existent column, it will throw an
|
119
|
+
**ArgumentError** telling you so.
|
114
120
|
|
115
121
|
Or you can extract the report to an array of named hashes, removing
|
116
122
|
dependencies on the gem for consumers of the data (say, across an API):
|
117
123
|
|
118
|
-
|
119
|
-
|
124
|
+
hashes = report.to_hashes
|
125
|
+
hashes[0]['advertiser_name'] # => "Bob's Ads"
|
120
126
|
|
121
|
-
|
127
|
+
**NOTE** Any totals columns your xml requests will be interpreted
|
122
128
|
as ordinary data.
|
123
129
|
|
124
|
-
|
130
|
+
### Mocking reports
|
125
131
|
|
126
132
|
When simulating report calls without actually hitting Yieldmanager, you can
|
127
133
|
create your own reports.
|
128
134
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
135
|
+
rpt = Yieldmanager::Report.new
|
136
|
+
rpt.headers = ["first","second"]
|
137
|
+
rpt.add_row([1,2])
|
138
|
+
rpt.data.first.by_name("first").should == 1
|
139
|
+
rpt.data.first.by_name("second").should == 2
|
134
140
|
|
135
|
-
|
141
|
+
### session vs. start_session/end_session
|
136
142
|
|
137
|
-
The
|
143
|
+
The **session** method opens a session, gives you a token to use in your service
|
138
144
|
calls, then closes the session when the block ends, even if an exception is
|
139
145
|
raised during processing. It's the recommended method to ensure you don't
|
140
146
|
hang connections when things go wrong. If you use start/end, make sure you
|
141
147
|
wrap your logic in a begin/ensure clause and call end_session from the ensure.
|
142
148
|
|
143
|
-
|
149
|
+
## RE: Ruby 1.9
|
144
150
|
|
145
151
|
In an effort to be a good ruby citizen, KarateCode and I have made the gem
|
146
|
-
1.9 compatible, but it is based on soap4r 1.5.8, which
|
147
|
-
|
148
|
-
|
152
|
+
1.9 compatible, but it is based on soap4r 1.5.8, which requires a pile of monkey-patches
|
153
|
+
to get working and not **every** combination of calls and args have been tested
|
154
|
+
in 1.9. If you're interested in what's been done, check out **lib/soap4r_19_patch**
|
155
|
+
and [Tomor Doron's blog post](http://tomerdoron.blogspot.com/2009/10/fixing-soap4r-for-ruby-19.html).
|
149
156
|
|
150
|
-
|
157
|
+
## Note on Patches/Pull Requests
|
151
158
|
|
152
159
|
* Fork the project.
|
153
160
|
* Make your feature addition or bug fix.
|
154
|
-
* Add
|
161
|
+
* Add specs for it. This is important so I don't break it in a
|
155
162
|
future version unintentionally.
|
156
163
|
* Commit, do not mess with rakefile, version, or history.
|
157
164
|
(if you want to have your own version, that is fine but
|
158
165
|
bump version in a commit by itself I can ignore when I pull)
|
159
166
|
* Send me a pull request. Bonus points for topic branches.
|
160
167
|
|
161
|
-
|
168
|
+
## Thanks for contributing!
|
162
169
|
* manlycode[https://github.com/manlycode] (Chris Rittersdorf)
|
163
170
|
* KarateCode[https://github.com/KarateCode] (Michael Schneider)
|
164
171
|
|
165
|
-
|
172
|
+
## Copyright
|
166
173
|
|
167
174
|
Copyright (c) 2009-2011 Bill Gathen. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.5
|
@@ -325,16 +325,16 @@ end
|
|
325
325
|
end
|
326
326
|
|
327
327
|
|
328
|
-
|
329
|
-
unless Enumerable.instance_methods.include?('inject')
|
330
|
-
module Enumerable
|
331
|
-
def inject(init)
|
332
|
-
result = init
|
333
|
-
each do |item|
|
334
|
-
result = yield(result, item)
|
335
|
-
end
|
336
|
-
result
|
337
|
-
end
|
338
|
-
end
|
339
|
-
end
|
328
|
+
## for ruby/1.6.
|
329
|
+
#unless Enumerable.instance_methods.include?('inject')
|
330
|
+
# module Enumerable
|
331
|
+
# def inject(init)
|
332
|
+
# result = init
|
333
|
+
# each do |item|
|
334
|
+
# result = yield(result, item)
|
335
|
+
# end
|
336
|
+
# result
|
337
|
+
# end
|
338
|
+
# end
|
339
|
+
#end
|
340
340
|
|
data/yieldmanager.gemspec
CHANGED
@@ -5,16 +5,16 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{yieldmanager}
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bill Gathen"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-08-03}
|
13
13
|
s.description = %q{This gem offers full access to YieldManager's API tools (read/write) as well as ad-hoc reporting through the Reportware tool}
|
14
14
|
s.email = %q{bill@billgathen.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README.
|
17
|
+
"README.md",
|
18
18
|
"TODO"
|
19
19
|
]
|
20
20
|
s.files = [
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
".rspec",
|
24
24
|
"API_VERSION",
|
25
25
|
"LICENSE",
|
26
|
-
"README.
|
26
|
+
"README.md",
|
27
27
|
"Rakefile",
|
28
28
|
"TODO",
|
29
29
|
"VERSION",
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: yieldmanager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.8.
|
5
|
+
version: 0.8.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Bill Gathen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-03 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -42,7 +42,7 @@ extensions: []
|
|
42
42
|
|
43
43
|
extra_rdoc_files:
|
44
44
|
- LICENSE
|
45
|
-
- README.
|
45
|
+
- README.md
|
46
46
|
- TODO
|
47
47
|
files:
|
48
48
|
- .document
|
@@ -50,7 +50,7 @@ files:
|
|
50
50
|
- .rspec
|
51
51
|
- API_VERSION
|
52
52
|
- LICENSE
|
53
|
-
- README.
|
53
|
+
- README.md
|
54
54
|
- Rakefile
|
55
55
|
- TODO
|
56
56
|
- VERSION
|