lib/omise/util.rb in omise-0.4.0 vs lib/omise/util.rb in omise-0.5.0

- old
+ new

@@ -1,5 +1,6 @@ +require "cgi" require "json" require "omise/object" require "omise/error" @@ -16,10 +17,52 @@ klass.new(object) end def load_response(response) object = JSON.load(response) - raise Omise::Error.new(object) if object["object"] == "error" + + 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