Sha256: 47f39bbae207355acad6c3e46afee1470ea67a05e8e64ca7371f2d156cd0f044

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module ExtendWarranties
  class Client
    @namespaces = []
    @connection = nil

    ##
    # Defines a method to access class instance.
    #
    def self.namespace(name)
      converted = name.to_s.split('_').map(&:capitalize).join
      klass = ExtendWarranties::Api.const_get(converted)
      @namespaces << klass
    end

    namespace :products

    namespace :plans

    namespace :contracts

    namespace :offers


    def initialize(args = {})
      @configuration = ExtendWarranties::Configuration.new(args)

      @connection = Faraday.new(url: @configuration.base_url) do |conn|
        conn.request :json
        conn.headers = @configuration.headers

        conn.response :json
        conn.response :logger

        conn.adapter  Faraday.default_adapter
      end

      create_instances
    end

    private

    def create_instances
      namespaces = self.class.instance_variable_get(:@namespaces)
      namespaces.each do |klass|
        reader = klass.to_s.split('::').last.underscore
        self.class.send(:define_method, reader.to_sym) { klass.new @connection }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
extend_warranties-0.1.0 lib/extend_warranties/client.rb