Sha256: 0868b4a6fa425a91db52ac3fb0239266e0a3de70ca0d16d91c35739010a6a44d

Contents?: true

Size: 1.52 KB

Versions: 11

Compression:

Stored size: 1.52 KB

Contents

require "cgi"
require "json"

require "omise/error"

module Omise
  module Util module_function
    def typecast(object)
      klass = begin
        klass_name = object["object"].split("_").map(&:capitalize).join("")
        Omise.const_get(klass_name)
      rescue NameError
        OmiseObject
      end

      klass.new(object)
    end

    def load_response(response)
      object = JSON.load(response)

      if object["object"] == "error"
        raise Omise::Error, object
      end

      object
    end

    def generate_query(object, namespace = nil)
      if object.is_a?(Hash)
        return object.map do |key, value|
          unless (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
            generate_query(value, namespace ? "#{namespace}[#{key}]" : key)
          end
        end.compact.sort! * "&"
      end

      if object.is_a?(Array)
        prefix = "#{namespace}[]"

        if object.empty?
          return generate_query(nil, prefix)
        else
          return object.map { |value| generate_query(value, prefix) }.join("&")
        end
      end

      "#{CGI.escape(generate_param(namespace))}=#{CGI.escape(generate_param(object).to_s)}"
    end

    def generate_param(object)
      if object.is_a?(Hash)
        return generate_query(object)
      end

      if object.is_a?(Array)
        return object.map { |o| generate_param(o) }.join("/")
      end

      if object.is_a?(NilClass) || object.is_a?(TrueClass) || object.is_a?(FalseClass)
        return object
      end

      object.to_s
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
omise-0.11.0 lib/omise/util.rb
omise-0.10.1 lib/omise/util.rb
omise-0.10.0 lib/omise/util.rb
omise-0.9.1 lib/omise/util.rb
omise-0.9.0 lib/omise/util.rb
omise-0.7.2 lib/omise/util.rb
omise-0.8.0 lib/omise/util.rb
omise-0.7.1 lib/omise/util.rb
omise-0.7.0 lib/omise/util.rb
omise-0.6.0 lib/omise/util.rb
omise-0.5.1 lib/omise/util.rb