Sha256: f27a942ea490896c12f346f4c5e4ce4feab87fe2c74cea2c1df414652ee37a3a

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

# typed: strict

module M2mKeygen
  # Encoder for params hash
  class ParamsEncoder
    extend T::Sig

    sig { params(params: Types::ParamsType).void }
    def initialize(params)
      @params = T.let(params, Types::ParamsType)
    end

    sig { returns(String) }
    def encode
      return "" if @params.nil? || @params.empty?
      @params
        .sort_by { |k, _| k.to_s }
        .reject { |_, v| (v.is_a?(String) && v == "") || v.nil? }
        .map { |k, v| "#{k}=#{jsonify_value(encode_value(T.must(v)))}" }
        .join("&")
    end

    private

    sig do
      params(value: Types::ParamsValueType).returns(
        T.any(String, Symbol, Integer)
      )
    end
    def jsonify_value(value)
      return value unless value.is_a?(Hash) || value.is_a?(Array)
      value.to_json
    end

    sig do
      params(value: Types::ParamsValueType).returns(Types::ParamsValueType)
    end
    def encode_value(value)
      return encode_hash_value(value) if value.is_a?(Hash)
      value
    end

    sig do
      params(value: Types::ParamsHashNotNilType).returns(
        T::Hash[String, Types::ParamsValueType]
      )
    end
    def encode_hash_value(value)
      value
        .sort_by { |k, _| k.to_s }
        .reject { |_, v| (v.is_a?(String) && v == "") || v.nil? }
        .map { |k, v| [k.to_s, encode_value(v)] }
        .to_h
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
m2m_keygen-0.4.2 lib/m2m_keygen/params_encoder.rb
m2m_keygen-0.4.1 lib/m2m_keygen/params_encoder.rb
m2m_keygen-0.4.0 lib/m2m_keygen/params_encoder.rb
m2m_keygen-0.3.0 lib/m2m_keygen/params_encoder.rb