class QingCloud::SDK::Preprocessor

Public Class Methods

compact(object) click to toggle source
# File lib/qingcloud/sdk/request/preprocessor.rb, line 72
def self.compact(object)
  object.each do |k, v|
    object[k] = compact v if v.is_a? Hash
    object.delete k if v.nil? || v == ''
  end
  object
end
decorate_input(input) click to toggle source
# File lib/qingcloud/sdk/request/preprocessor.rb, line 66
def self.decorate_input(input)
  input.deep_symbolize_keys!
  input[:id] = (Random.new.rand * 1_000_000).to_int
  compact input
end
do(input) click to toggle source
# File lib/qingcloud/sdk/request/preprocessor.rb, line 22
def self.do(input)
  input = decorate_input input

  config                   = input[:config]
  input[:request_endpoint] = "#{config[:protocol]}://#{config[:host]}:#{config[:port]}"

  parsed_params = {}
  input[:request_params].each do |param_k, param_v|
    if param_v.is_a? Array
      param_v.each_with_index do |value, index|
        if value.is_a? Hash
          value.each do |value_k, value_v|
            parsed_params["#{param_k}.#{index}.#{value_k}"] = value_v
          end
        else
          parsed_params["#{param_k}.#{index}"] = value
        end
      end
    elsif param_v.is_a? Hash
      param_v.each do |key, value|
        parsed_params["#{param_k}.#{key}"] = value
      end
    else
      parsed_params[param_k] = param_v
    end
  end
  input[:request_params] = parsed_params.deep_symbolize_keys!
  input[:request_params].update(
    action:            input[:api_name],
    time_stamp:        Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ'),
    version:           1,
    signature_method:  'HmacSHA256',
    signature_version: 1,
    access_key_id:     input[:config][:qy_access_key_id],
  )

  if input[:properties][:zone] && !input[:properties][:zone].empty?
    input[:request_params][:zone] = input[:properties][:zone]
  end

  Logger.info "Preprocess QingCloud request: [#{input[:id]}] #{input}"
  input
end