Sha256: 69d98ba239ac0c2239d1aa2fa6ad85ccc7e69e4ff8503e9d8ed090bd5441d68a

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

require 'plausible_api/stats/base'
require 'plausible_api/stats/realtime/visitors'
require 'plausible_api/stats/aggregate'
require 'plausible_api/stats/timeseries'
require 'plausible_api/stats/breakdown'

require 'json'
require "net/http"
require "uri"
require "cgi"

module PlausibleApi
  class Client
    
    BASE_URL = 'https://plausible.io'

    def initialize(site_id, token)
      @site_id = site_id.to_s
      @token   = token.to_s
    end

    def aggregate(options = {})
      call PlausibleApi::Stats::Aggregate.new(options)
    end

    def timeseries(options = {})
      call PlausibleApi::Stats::Timeseries.new(options)
    end

    def breakdown(options = {})
      call PlausibleApi::Stats::Breakdown.new(options)
    end

    def realtime_visitors
      call PlausibleApi::Stats::Realtime::Visitors.new
    end

    def valid?
      realtime_visitors.is_a? Integer
    end

    private
    def call(api)      
      raise StandardError.new "There is some invalid parameters." unless api.valid?
      
      url = "#{BASE_URL}#{api.request_url.gsub('$SITE_ID', @site_id)}"
      uri = URI.parse(url)

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

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

      api.parse_response http.request(req).body
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
plausible_api-0.1.6 lib/plausible_api/client.rb
plausible_api-0.1.5 lib/plausible_api/client.rb