Sha256: 3bbb6d1201a25e95e62b54bd492cce1b19043c138b9a1fda88e5199fecd3318e

Contents?: true

Size: 1.24 KB

Versions: 6

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

module NovaposhtaApi
  class Client
    attr_reader :api_key

    def initialize(api_key: nil)
      @api_key = api_key

      yield(http.connection) if block_given?
    end

    def self.resources
      {
        cities: Resources::CityResource,
        counterparties: Resources::CounterpartyResource,
        internet_documents: Resources::InternetDocumentResource,
        tracking_documents: Resources::TrackingDocumentResource,
        settlements: Resources::SettlementResource,
        warehouses: Resources::WarehouseResource
      }
    end

    def method_missing(name, *args, &block)
      if with_resource?(name)
        resources[name] ||= self.class.resources[name].new(http: http)
        resources[name]
      else
        super
      end
    end

    def respond_to_missing?(method_name, include_private = false)
      with_resource?(method_name) || super
    end

    def with_resource?(resource_name)
      self.class.resources.keys.include?(resource_name)
    end

    def resources
      @resources ||= {}
    end

    def http
      @http ||= NovaposhtaApi::HttpClient.new(
        uri: NovaposhtaApi.configuration.api_url,
        api_key: api_key || NovaposhtaApi.configuration.api_key
      )
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
novaposhta_api-0.2.1 lib/novaposhta_api/client.rb
novaposhta_api-0.2.0 lib/novaposhta_api/client.rb
novaposhta_api-0.1.9 lib/novaposhta_api/client.rb
novaposhta_api-0.1.8 lib/novaposhta_api/client.rb
novaposhta_api-0.1.7 lib/novaposhta_api/client.rb
novaposhta_api-0.1.5 lib/novaposhta_api/client.rb