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

Version Path
shopify_api-9.5.2 lib/shopify_api/hmac_params.rb
ruby_shopify_api-1.2.0 lib/ruby_shopify_api/hmac_params.rb
ruby_shopify_api-1.1.0 lib/shopify_api/hmac_params.rb
ruby_shopify_api-1.0.0 lib/shopify_api/hmac_params.rb
shopify_api-9.5.1 lib/shopify_api/hmac_params.rb