Sha256: 68858cfbc228e5c0e587785f42acd4b4929b000e767be82b1bd0dd3427ec2446
Contents?: true
Size: 797 Bytes
Versions: 5
Compression:
Stored size: 797 Bytes
Contents
# frozen_string_literal: true module ShopifyAPI module HmacParams class << self def encode(params) params .except(:signature, :hmac, :action, :controller) .map { |k,v| sprintf("%s=%s", encode_key(k), encode_value(v)) } .sort.join("&") end KEY_REGEXP = /([#{Regexp.escape("&=%")}])/n def encode_key(key) _escape(key.to_s, KEY_REGEXP) end VALUE_REGEXP = /([#{Regexp.escape("&%")}])/n def encode_value(value) _escape(value.to_s, VALUE_REGEXP) end private def _escape(str, regex) str = str.b str.gsub!(regex) {"%%%02X" % $1.ord} # %-escaped string should contain US-ASCII only str.force_encoding(Encoding::US_ASCII) end end end end
Version data entries
5 entries across 5 versions & 2 rubygems