Sha256: c219ca62a12002a8acd483159bbce8696a95899d957a37fbe751932694eba2f2

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

require "base64"
require "json"

module DerivationEndpoint
  class Attacher
    attr_reader :object, :method, :prefix, :options

    def initialize(object, method, prefix, options)
      Validation.check_object_class(prefix, [String, Symbol, NilClass])
      Validation.check_object_class(options, [Hash, NilClass])

      @object  = object
      @method  = method
      @prefix  = prefix
      @options = options
    end

    def derivation_path
      DerivationEndpoint::Serializer.encode(serialization_params)
    end

    def redirection_url
      DerivationEndpoint.config.decoder.call(derivation_path, options)
    end

    def method_value
      object.public_send(method)
    end

    def derivation_url
      base_url  = DerivationEndpoint.base_url
      final_url = prefix ? "#{base_url}/#{prefix}" : base_url

      "#{final_url}/#{derivation_path}"
    end

    private

    def serialization_params
      {
        path: DerivationEndpoint.config.encoder.call(method_value),
        options: options
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
derivation_endpoint-0.1.0 lib/derivation_endpoint/attacher.rb