Class: Yieldmanager::Client

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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(options = nil)
  unless options &&
    (options[:user] || options['user']) &&
    (options[:pass] || options['pass'])
    raise ArgumentError, ":user and :pass are required"
  end
  @user = options[:user] ||= options['user']
  @pass = options[:pass] ||= options['pass']
  @api_version = Yieldmanager::Client.api_version
  if options[:env]
    @env = options[:env]
  elsif options['env']
    @env = options['env']
  else
    @env = "prod"
  end
  @wsdl_dir = "#{WSDL_DIR}/#{@api_version}/#{@env}"
  wrap_services
end

Instance Attribute Details

#api_versionObject (readonly)

Yieldmanager api version (i.e., “1.33”)



80
81
82
# File 'lib/yieldmanager/client.rb', line 80

def api_version
  @api_version
end

#envObject (readonly)

Yieldmanager environment (“prod” or “test”, defaults to “prod”)



82
83
84
# File 'lib/yieldmanager/client.rb', line 82

def env
  @env
end

#passObject (readonly)

Yieldmanager password



78
79
80
# File 'lib/yieldmanager/client.rb', line 78

def pass
  @pass
end

#userObject (readonly)

Yieldmanager user



76
77
78
# File 'lib/yieldmanager/client.rb', line 76

def user
  @user
end

Class Method Details

.api_versionObject



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_servicesObject



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

#sessionObject

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_sessionObject

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.(@user,@pass,{'errors_level' => 'throw_errors','multiple_sessions' => '1'})
end