Sha256: 9344647281bbbedb31eeab7244eda880039fa144abf9cc462fc4ecc73084ff42

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module Cogitate
  module Client
    # Responsible for decoding a Cogitate token into an object (or objects)
    #
    # @see Cogitate::Services::Tokenizer for how the tokens get encoded and decoded
    class TokenToObjectCoercer
      # @api public
      def self.call(token:, **keywords)
        new(token: token, **keywords).call
      end

      def initialize(token:, token_to_data_coercer: default_token_to_data_coercer, data_to_object_coercer: default_data_to_object_coercer)
        self.token = token
        self.token_to_data_coercer = token_to_data_coercer
        self.data_to_object_coercer = data_to_object_coercer
      end

      def call
        data = token_to_data_coercer.call(token: token)
        data_to_object_coercer.call(data)
      end

      private

      attr_accessor :token, :token_to_data_coercer, :data_to_object_coercer

      def default_token_to_data_coercer
        require 'cogitate/services/tokenizer' unless defined?(Cogitate::Services::Tokenizer)
        Cogitate::Services::Tokenizer.method(:from_token)
      end

      def default_data_to_object_coercer
        require 'cogitate/client/data_to_object_coercer' unless defined?(Cogitate::Client::DataToObjectCoercer)
        Cogitate::Client::DataToObjectCoercer
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cogitate-0.0.2 lib/cogitate/client/token_to_object_coercer.rb