Sha256: f5a841683a66c5f15986041fe1b448f80c3bfc2d4ff7fd5c6d8889339408539a

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

module PirschApi
  class BaseResource
    attr_accessor :client, :filters, :domain

    def initialize(client:, domain: nil, filters: {})
      @client = client
      @filters = filters
      @domain = domain
      @errors = []
    end

    def request_url
      raise NotImplementedError
    end

    def parse_response(body)
      raise NotImplementedError
    end

    def errors
      @errors[:client] = "client is invalid" unless client.valid?
      @errors
    end

    def valid?
      errors.empty?
    end

    def run
      raise PirschApi::Error.new errors unless valid?

      if domain
        filters[:id] = domain.to_s
      end

      url = "#{PirschApi::Client::BASE_URL}/#{request_url}"
      url << "?#{filters.to_a.map { |x| "#{x[0]}=#{CGI.escape(x[1].to_s)}" }.join("&")}" if filters.any?

      puts "[Pirsch API] run #{url}"

      uri = URI.parse url

      req = Net::HTTP::Get.new(uri.request_uri)
      req.add_field("Authorization", "Bearer #{client.token.access_token}")

      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true

      response = http.request(req)
      raise PirschApi::Error.new "Api request failed (#{response.body})" unless response.code == "200"
      raise PirschApi::Error.new "Api request returned nil (#{response.body})" if response.body.nil?

      parse_response response.body
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pirsch_api-0.1.1 lib/pirsch_api/resources/base.rb