Sha256: edf218f28e31ab7545d6dd73c31d4064310f00b50345ce9611b08ff5df906fc9

Contents?: true

Size: 1.73 KB

Versions: 24

Compression:

Stored size: 1.73 KB

Contents

module RemoteResource
  module Util

    FILTERED = '[FILTERED]'.freeze

    def self.filter_params(query_string_or_json_body, filtered_params:)
      filtered = query_string_or_json_body
      filtered_params.each do |filtered_param|
        filtered = filtered.to_s.gsub(/(?<="#{filtered_param}":|#{filtered_param}=)(.*?)(?=,|}|&|$)/, FILTERED)
      end
      filtered
    end

    def self.encode_params_to_query(params)
      if params.is_a?(String)
        pairs = [params]
      else
        pairs = recursively_generate_query(params, nil)
      end

      URI.encode_www_form(pairs)
    end

    # This method is based on the monkey patched method:
    # Ethon::Easy::Queryable#recursively_generate_pairs
    #
    # The monkey patch was needed to pass Array
    # params without an index.
    #
    # The problem is described in typhoeus/typhoeus issue #320:
    # https://github.com/typhoeus/typhoeus/issues/320
    #
    # The fix is described in dylanfareed/ethon commit 548033a:
    # https://github.com/dylanfareed/ethon/commit/548033a8557a48203b7d49f3f98812bd79bc05e4
    #
    def self.recursively_generate_query(component, prefix, pairs = [])
      case component
      when Hash
        component.each do |key, value|
          key = prefix.nil? ? key : "#{prefix}[#{key}]"

          if value.respond_to?(:each)
            recursively_generate_query(value, key, pairs)
          else
            pairs.push([key, value.to_s])
          end
        end
      when Array
        component.each do |value|
          key = "#{prefix}[]"

          if value.respond_to?(:each)
            recursively_generate_query(value, key, pairs)
          else
            pairs.push([key, value.to_s])
          end
        end
      end

      pairs
    end

  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
ddy_remote_resource-1.3.4 lib/remote_resource/util.rb
ddy_remote_resource-1.3.3 lib/remote_resource/util.rb
ddy_remote_resource-1.3.2 lib/remote_resource/util.rb
ddy_remote_resource-1.3.1 lib/remote_resource/util.rb
ddy_remote_resource-1.2.3 lib/remote_resource/util.rb
ddy_remote_resource-1.2.2 lib/remote_resource/util.rb
ddy_remote_resource-1.2.1 lib/remote_resource/util.rb
ddy_remote_resource-1.2.0 lib/remote_resource/util.rb
ddy_remote_resource-1.1.2 lib/remote_resource/util.rb
ddy_remote_resource-1.1.1 lib/remote_resource/util.rb
ddy_remote_resource-1.1.0 lib/remote_resource/util.rb
ddy_remote_resource-1.0.5 lib/remote_resource/util.rb
ddy_remote_resource-1.0.4 lib/remote_resource/util.rb
ddy_remote_resource-1.0.3 lib/remote_resource/util.rb
ddy_remote_resource-1.0.2 lib/remote_resource/util.rb
ddy_remote_resource-1.0.1 lib/remote_resource/util.rb
ddy_remote_resource-1.0.0 lib/remote_resource/util.rb
ddy_remote_resource-1.0.0.rc7 lib/remote_resource/util.rb
ddy_remote_resource-1.0.0.rc6 lib/remote_resource/util.rb
ddy_remote_resource-1.0.0.rc5 lib/remote_resource/util.rb