class SoapyCake::Request
Constants
- DATE_CLASSES
Attributes
api_key[RW]
method[R]
opts[R]
role[R]
service[R]
time_converter[RW]
Public Class Methods
new(role, service, method, opts = {})
click to toggle source
# File lib/soapy_cake/request.rb, line 10 def initialize(role, service, method, opts = {}) @role = role.to_s @service = service.to_s @method = method.to_s @opts = opts end
Public Instance Methods
path()
click to toggle source
# File lib/soapy_cake/request.rb, line 17 def path "#{api_path}/#{service}.asmx" end
read_only?()
click to toggle source
# File lib/soapy_cake/request.rb, line 42 def read_only? (API_CONFIG.dig('read_only', role, service) || []).include?(method) end
short_response?()
click to toggle source
# File lib/soapy_cake/request.rb, line 34 def short_response? %w[addedit track signup].include?(service) end
to_s()
click to toggle source
# File lib/soapy_cake/request.rb, line 38 def to_s "#{role}:#{service}:#{method}:#{version} #{opts.to_json}" end
xml()
click to toggle source
# File lib/soapy_cake/request.rb, line 21 def xml Nokogiri::XML::Builder.new do |xml| xml['env'].Envelope(xml_namespaces) do xml.Header xml.Body do xml['cake'].public_send(method.camelize.to_sym) do xml_params(xml) end end end end.to_xml end
Private Instance Methods
api_path()
click to toggle source
# File lib/soapy_cake/request.rb, line 48 def api_path "#{role == 'admin' ? '' : "/#{role.pluralize}"}/api/#{version}" end
format_param(key, value)
click to toggle source
# File lib/soapy_cake/request.rb, line 66 def format_param(key, value) return time_converter.to_cake(value) if DATE_CLASSES.include?(value.class) if key.to_s.end_with?('_date') raise Error, "You need to use a Time/DateTime/Date object for '#{key}'" end value end
version()
click to toggle source
# File lib/soapy_cake/request.rb, line 76 def version API_CONFIG.dig('versions', role, service, method) || raise(Error, "Unknown API call #{role}::#{service}::#{method}") end
xml_namespaces()
click to toggle source
# File lib/soapy_cake/request.rb, line 59 def xml_namespaces { 'xmlns:env' => 'http://www.w3.org/2003/05/soap-envelope', 'xmlns:cake' => "http://cakemarketing.com#{api_path}/" } end
xml_params(xml)
click to toggle source
# File lib/soapy_cake/request.rb, line 52 def xml_params(xml) xml.api_key(api_key) opts.each do |k, v| xml.public_send(k, format_param(k, v)) end end