class FastshopCatalog::BaseService

Constants

AUX_LOG

Attributes

base_url[RW]
crypto_key[RW]
log_level[RW]

Public Class Methods

camelize(val) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 25
def self.camelize(val)
  val.to_s.split('_').map {|w| w.capitalize}.join
end
new(params={}) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 34
def initialize(params={})
  @@log_level ||= :info
  default_params = {:wsdl => "#{service_url}?wsdl", :soap_version => 2, :namespaces =>
    {"xmlns:x" => "http://www.w3.org/2005/08/addressing"}, :soap_header =>
    {"x:To" => service_url, "x:Action" => "http://tempuri.org/#{action}"}, :log_level =>
    @log_level}
  @client = Savon.client(recursive_merge(default_params, params))
  HTTPI.log = false
end

Public Instance Methods

action() click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 21
def action
  @action ||= "#{@interface}/#{BaseService.camelize(@soap_method)}"
end
encrypt(payload) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 29
def encrypt(payload)
  require_relative 'crypto'
  Crypto.new.encrypt(payload.to_s)
end
service_url() click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 13
def service_url
  env = "development"

  env = Rails.env if defined?(Rails)
  url_service = FastshopCatalog::ServiceUrls.new(env)
  @service_url ||= url_service.url_for(@service)
end

Protected Instance Methods

service_invoker(parameters={}) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 46
def service_invoker(parameters={})
  response = @client.call(@soap_method, :message => adapt_output(parameters))
  result = JSON.parse(response.body["#{@soap_method}_response".to_sym]["#{@soap_method}_result".to_sym])
  result_status = result['Retorno']
  if result_status['IdRetorno'] != 0
    raise ServiceException.new(:code => result_status['IdRetorno'], :description => result_status['MsgRetorno'])
  end
  result[@return_key]
end
service_invoker_with_encryption(encrypted_payload_key, parameters={}) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 56
def service_invoker_with_encryption(encrypted_payload_key, parameters={})
  encrypted_payload = encrypt(parameters[encrypted_payload_key])
  FastshopCatalog::BaseService::AUX_LOG.debug('Encrypted payload: ' + encrypted_payload)
  parameters[encrypted_payload_key] = encrypted_payload
  service_invoker(parameters.merge(:salt => ''))
end

Private Instance Methods

adapt_output(params={}, namespace='tns') click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 65
def adapt_output(params={}, namespace='tns')
  Hash[params.map {|k, v| ["#{namespace}:#{k}", v] }]
end
recursive_merge(h1, h2) click to toggle source
# File lib/fastshop_catalog/base_service.rb, line 69
def recursive_merge(h1, h2)
  h1.merge(h2) { |k, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2) : v2 }
end