lib/soapy_cake/request.rb in soapy_cake-1.15.0 vs lib/soapy_cake/request.rb in soapy_cake-1.16.0
- old
+ new
@@ -1,8 +1,10 @@
module SoapyCake
class Request
- attr_accessor :api_key, :time_offset
+ DATE_CLASSES = [Date, Time, DateTime].freeze
+
+ attr_accessor :api_key, :time_converter
attr_reader :role, :service, :method, :opts
def initialize(role, service, method, opts = {})
@role = role.to_s
@service = service.to_s
@@ -38,27 +40,28 @@
end
def xml_params(xml)
xml.api_key api_key
opts.each do |k, v|
- xml.public_send(k.to_sym, format_param(v))
+ xml.public_send(k.to_sym, format_param(k, v))
end
end
def xml_namespaces
{
'xmlns:env' => 'http://www.w3.org/2003/05/soap-envelope',
'xmlns:cake' => "http://cakemarketing.com#{api_path}/"
}
end
- def format_param(value)
- case value
- when Time, DateTime, Date
- (value.to_datetime.utc + time_offset.to_i.hours).strftime('%Y-%m-%dT%H:%M:%S')
- else
- value
+ def format_param(key, value)
+ return time_converter.to_cake(value) if DATE_CLASSES.include?(value.class)
+
+ if key.to_s.end_with?('_date')
+ fail Error, "You need to use a Time/DateTime/Date object for '#{key}'"
end
+
+ value
end
def version
API_VERSIONS[role][service][method] || fail
rescue