Class: Yieldmanager::Client
- Inherits:
-
Object
- Object
- Yieldmanager::Client
- Defined in:
- lib/yieldmanager/client.rb
Overview
This is the frontend for using Yieldmanager programmatically. It can be directly used by the user by creating a new instance and calling service_name to access YM services. For example:
ym = Yieldmanager::Client(
:user => "bob",
:pass => "secret"
)
ym.session do |token|
currencies = @ym.dictionary.getCurrencies(token)
end
It also offers simple access to the ReportWare reporting engine via the #pull_report method.
Constant Summary collapse
- BASE_URL =
"https://api.yieldmanager.com/api-"- BASE_URL_TEST =
"https://api-test.yieldmanager.com/api-"- WSDL_DIR =
File.join(File.dirname(__FILE__), '..', '..', 'wsdls')
Instance Attribute Summary collapse
-
#api_version ⇒ Object
readonly
Yieldmanager api version (i.e., “1.33”).
-
#env ⇒ Object
readonly
Yieldmanager environment (“prod” or “test”, defaults to “prod”).
-
#pass ⇒ Object
readonly
Yieldmanager password.
-
#user ⇒ Object
readonly
Yieldmanager user.
Class Method Summary collapse
Instance Method Summary collapse
- #available_services ⇒ Object
- #camel_to_under(s) ⇒ Object
-
#end_session(token) ⇒ Object
Closes Yieldmanager session.
-
#initialize(options = nil) ⇒ Client
constructor
Creates interface object.
-
#paginate(block_size) ⇒ Object
Allows looping over datasets too large to pull back in one call.
-
#pull_report(token, xml) ⇒ Object
Pulls report from RightMedia, returned as Yieldmanager::Report.
-
#session ⇒ Object
Manages Yieldmanager session.
-
#start_session ⇒ Object
Opens Yieldmanager session.
Constructor Details
#initialize(options = nil) ⇒ Client
Creates interface object.
Options:
-
:user (required) - Yieldmanager user
-
:pass (required) - Yieldmanager pass
-
:env (optional) - Yieldmanager environment “prod” or “test” (defaults to prod)
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/yieldmanager/client.rb', line 93 def initialize( = nil) unless && ([:user] || ['user']) && ([:pass] || ['pass']) raise ArgumentError, ":user and :pass are required" end @user = [:user] ||= ['user'] @pass = [:pass] ||= ['pass'] @api_version = Yieldmanager::Client.api_version if [:env] @env = [:env] elsif ['env'] @env = ['env'] else @env = "prod" end @wsdl_dir = "#{WSDL_DIR}/#{@api_version}/#{@env}" wrap_services end |
Instance Attribute Details
#api_version ⇒ Object (readonly)
Yieldmanager api version (i.e., “1.33”)
80 81 82 |
# File 'lib/yieldmanager/client.rb', line 80 def api_version @api_version end |
#env ⇒ Object (readonly)
Yieldmanager environment (“prod” or “test”, defaults to “prod”)
82 83 84 |
# File 'lib/yieldmanager/client.rb', line 82 def env @env end |
#pass ⇒ Object (readonly)
Yieldmanager password
78 79 80 |
# File 'lib/yieldmanager/client.rb', line 78 def pass @pass end |
#user ⇒ Object (readonly)
Yieldmanager user
76 77 78 |
# File 'lib/yieldmanager/client.rb', line 76 def user @user end |
Class Method Details
.api_version ⇒ Object
180 181 182 183 184 185 186 187 |
# File 'lib/yieldmanager/client.rb', line 180 def self.api_version version_file = "API_VERSION" path = File.join(File.dirname(__FILE__), '..', '..', version_file) unless File.exists?(path) fail "Put the API version in a file called #{version_file}" end File.open(path){ |f| f.readline.chomp } end |
Instance Method Details
#available_services ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/yieldmanager/client.rb', line 113 def available_services available_services = [] available_services_file = "AVAILABLE_SERVICES" path = File.join(File.dirname(__FILE__), '..', '..', available_services_file) unless File.exists?(path) fail "Put available services in a file called #{available_services_file}" end IO.readlines(path).each do |line| available_services << camel_to_under(line.chomp.sub(/Service$/,'')) end available_services end |
#camel_to_under(s) ⇒ Object
126 127 128 |
# File 'lib/yieldmanager/client.rb', line 126 def camel_to_under s s.gsub(/(.)([A-Z])/,'\1_\2').downcase end |
#end_session(token) ⇒ Object
Closes Yieldmanager session
Use #session if possible: it guarantees no hanging sessions
154 155 156 |
# File 'lib/yieldmanager/client.rb', line 154 def end_session token contact.logout(token) end |
#paginate(block_size) ⇒ Object
Allows looping over datasets too large to pull back in one call
Block must return total rows in dataset to know when to stop!
161 162 163 164 165 166 167 168 169 |
# File 'lib/yieldmanager/client.rb', line 161 def paginate block_size page = 1 total = block_size + 1 begin total = yield page # Need total back from block to know when to stop! page += 1 end until (block_size * (page-1)) > total end |
#pull_report(token, xml) ⇒ Object
Pulls report from RightMedia, returned as Yieldmanager::Report
Must be called within the context of a session
174 175 176 177 178 |
# File 'lib/yieldmanager/client.rb', line 174 def pull_report token, xml report = Yieldmanager::Report.new report.pull(token, self.report, xml) report end |
#session ⇒ Object
Manages Yieldmanager session
Returns block with token string to be used in API/report calls
Guarantees no hanging sessions except during system crashes
135 136 137 138 139 140 141 142 |
# File 'lib/yieldmanager/client.rb', line 135 def session token = start_session begin yield token ensure end_session token end end |
#start_session ⇒ Object
Opens Yieldmanager session
Use #session if possible: it guarantees no hanging sessions
147 148 149 |
# File 'lib/yieldmanager/client.rb', line 147 def start_session contact.login(@user,@pass,{'errors_level' => 'throw_errors','multiple_sessions' => '1'}) end |