class SimpleAnalyticsApi::Resource

Constants

BASE_URL

Attributes

client[RW]
debug[RW]
domain[RW]
fields[RW]
filters[RW]

Public Class Methods

new(client:, domain: nil, fields: [], filters: {}, debug: false) click to toggle source
# File lib/simple_analytics_api/resource.rb, line 8
def initialize(client:, domain: nil, fields: [], filters: {}, debug: false)
  @client  = client
  @fields  = fields
  @filters = filters
  @domain  = domain || client.domain
  @debug   = debug
  @filters[:version] = 5 unless @filters[:version]
  @filters[:info] = false unless @debug
  @fields = [:pageviews] unless @fields.any?
  
end

Public Instance Methods

fields_and_filters() click to toggle source
# File lib/simple_analytics_api/resource.rb, line 20
def fields_and_filters
  fields_and_filters = filters
  fields_and_filters = filters.merge({ fields: fields.join(',') }) if fields.any?
  
  fields_and_filters.sort_by{|k,v| k}.to_h
end
parse_response(body) click to toggle source
# File lib/simple_analytics_api/resource.rb, line 27
def parse_response(body)
  Object.new JSON.parse(body)
end
run() click to toggle source
# File lib/simple_analytics_api/resource.rb, line 37
def run
  puts "[SimpleAnalyticsAPI] #{url}" if debug
  uri = URI.parse url
  req = Net::HTTP::Get.new(uri.request_uri)
  req.add_field('Content-Type', 'application/json')
  req.add_field('Api-Key', client.api_key) unless client.api_key.empty?  
  req.add_field('User-Id', client.user_id) unless client.user_id.empty?

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true  
  
  response = http.request(req)
  raise SimpleAnalyticsApi::Error.new "Api request failed (#{response.body})" unless response.code == "200"
  raise SimpleAnalyticsApi::Error.new "Api request returned nil (#{response.body})" if response.body.nil?

  parse_response response.body
end
url() click to toggle source
# File lib/simple_analytics_api/resource.rb, line 31
def url
  url = "#{BASE_URL}/#{domain}.json"
  url << "?#{fields_and_filters.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join("&") }" if fields_and_filters.any?
  url
end