Sha256: 7df33741ce96f9e7a5a0574c4ca8018d966b30b52bc8cbf291f906d71ac91623

Contents?: true

Size: 1.93 KB

Versions: 7

Compression:

Stored size: 1.93 KB

Contents

require 'digest/md5'

module Sailthru
  module Helpers
    # params:
    #   params, Hash
    # returns:
    #   Array, values of each item in the Hash (and nested hashes)
    #
    # Extracts the values of a set of parameters, recursing into nested assoc arrays.
    def extract_param_values(params)
      values = []
      params.each do |k, v|
        if v.is_a? Hash
          values.concat extract_param_values(v)
       elsif v.is_a? Array
          temp_hash = {}
          v.each_with_index do |v_,i_|
            temp_hash[i_.to_s] = v_
          end
          values.concat extract_param_values(temp_hash)
        else
          values.push v.to_s
        end
      end
      return values
    end

    # params:
    #   params, Hash
    #   secret, String
    # returns:
    #   String
    #
    # Returns the unhashed signature string (secret + sorted list of param values) for an API call.
    def get_signature_string(params, secret)
      return secret + extract_param_values(params).sort.join("")
    end

    # params:
    #   params, Hash
    #   secret, String
    # returns:
    #   String
    #
    # Returns an MD5 hash of the signature string for an API call.
    def get_signature_hash(params, secret)
      Digest::MD5.hexdigest(get_signature_string(params, secret)).to_s
    end

    # Flatten nested hash for GET / POST request.
    def flatten_nested_hash(hash, brackets = true)
      f = {}
      hash.each do |key, value|
        _key = brackets ? "[#{key}]" : key.to_s
        if value.class == Hash
          flatten_nested_hash(value).each do |k, v|
            f["#{_key}#{k}"] = v
          end
        elsif value.class == Array
          temp_hash = {}
          value.each_with_index do |v, i|
             temp_hash[i.to_s] = v
          end
          flatten_nested_hash(temp_hash).each do |k, v|
            f["#{_key}#{k}"] = v
          end

        else
          f[_key] = value
        end
      end
      return f
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sailthru-client-4.3.0 lib/sailthru/helpers.rb
sailthru-client-4.2.0 lib/sailthru/helpers.rb
sailthru-client-4.1.0 lib/sailthru/helpers.rb
sailthru-client-4.0.7 lib/sailthru/helpers.rb
sailthru-client-4.0.6 lib/sailthru/helpers.rb
sailthru-client-4.0.3 lib/sailthru/helpers.rb
sailthru-client-4.0.2 lib/sailthru/helpers.rb