Sha256: ffc6c55ef039282c3be31ce8a43072e37159c48fd1a5db42de5bbff9fc1c0ca2

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

module RubyLokaliseApi
  module Endpoints
    class BaseEndpoint
      using RubyLokaliseApi::Utils::Classes
      include RubyLokaliseApi::Request

      attr_reader :client, :req_params, :uri

      BASE_URL = ''
      PARTIAL_URI_TEMPLATE = '{/segments*}'

      def initialize(client, params = {})
        @query_params = params[:query].to_array
        @client = client
        @req_params = params[:req]
        @uri = nil
      end

      def reinitialize(query_params: nil, req_params: {})
        @query_params = query_params || @query_params
        @req_params = req_params || @req_params
        @uri = partial_uri(base_query(*@query_params))

        self
      end

      def base_url
        self.class.const_get(:BASE_URL)
      end

      def full_uri
        base_url + uri
      end

      private

      HTTP_METHODS_REGEXP = /\Ado_(get|post|put|delete|patch)\z/.freeze

      def respond_to_missing?(method, _include_all)
        return true if HTTP_METHODS_REGEXP.match?(method.to_s)

        super
      end

      def method_missing(method, *_args)
        if method.to_s =~ HTTP_METHODS_REGEXP
          send Regexp.last_match(1), self
        else
          super
        end
      end

      def base_query(*_args); end

      def partial_uri(*_args)
        Addressable::Template.new partial_uri_template
      end

      def partial_uri_template
        self.class.const_get(:PARTIAL_URI_TEMPLATE)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby-lokalise-api-8.0.0 lib/ruby_lokalise_api/endpoints/base_endpoint.rb
ruby-lokalise-api-8.0.0.rc1 lib/ruby_lokalise_api/endpoints/base_endpoint.rb