Sha256: 51a0ef521450cbfbd3d091af0ea4cd480d1b5bf5d47a8bd41bb6e9cec5b600f5

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 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]}=#{x[1]}" }.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

3 entries across 3 versions & 1 rubygems

Version Path
pirsch_api-0.0.5 lib/pirsch_api/resources/base.rb
pirsch_api-0.0.4 lib/pirsch_api/resources/base.rb
pirsch_api-0.0.3 lib/pirsch_api/resources/base.rb