Sha256: 4cf9eaace3fde6367072e188a1f67d93d4f83a29687daf295f0539e39c269d5a

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

require 'soap/header/simplehandler'

class CustomHeader < SOAP::Header::SimpleHandler

  NAMESPACE  = 'http://WS.G4SI.COM/'

#  def initialize(shipment_request)
#    @shipment_request = shipment_request
#    super(XSD::QName.new(NAMESPACE, 'ShipmentRequest'))
#  end
#
#  def on_simple_outbound
#    to_hash(@shipment_request)
#    # {"Username" => @username, "Password" => @password, "AccessKey"=>@accessKey}
#  end

  protected

  def primitive_types
    [ NilClass, TrueClass, FalseClass, Numeric, Time, Date, DateTime, String, Symbol ]
  end

  # Transform a object into a hash of its instance variables
  def to_hash(object)
    return {} unless object
    result = {}
    #puts "to_hash #{object.class}:#{object}"
    #puts "#{y object.instance_variables.sort}"
    object.instance_variables.each do |var|
      value =  object.instance_variable_get(var)
      result[instance_var_name_to_tag(var)] = format_value(value)
      #TODO: NESTING
    end
    result
  end

  def capitalize_first_letter(string)
    return nil unless string.is_a?(String)
    string[0].chr.capitalize + string[1, string.size]
  end

  def instance_var_name_to_tag(var)
    var.gsub!('@','')
    var = capitalize_first_letter(var)
    var
  end

  def format_value(value)
    if primitive_types.any?{|type| value.is_a?(type)}
      if value.is_a?(Time)
        return value.strftime("%Y-%m-%dT%H:%M:%S")  # YYYY-MM-DDTHH:MM:SS
      end
      return value
    else
      #puts "non primitive value found: #{value.class}:#{value}"
      return to_hash(value)  # recurse for non-"primitive" types such as Address.
    end
  end


end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
g4s_client-0.2.1 lib/g4s/headers/custom_header.rb
g4s_client-0.2.0 lib/g4s/headers/custom_header.rb
g4s_client-0.1.7 lib/g4s/headers/custom_header.rb