Sha256: 1df94be99d49613595599c2cd8e559e19ef1fc07fe9a61c72a536e5302fe815f

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

module Pixela
  class Client
    autoload :GraphMethods, "pixela/client/graph_methods"
    autoload :PixelMethods, "pixela/client/pixel_methods"
    autoload :UserMethods,  "pixela/client/user_methods"

    include GraphMethods
    include PixelMethods
    include UserMethods

    API_ENDPOINT = "https://pixe.la/v1"

    # @!attribute [r] username
    # @return [String]
    attr_reader :username

    # @param username [String]
    # @param token [String] secret token
    def initialize(username:, token:)
      @username = username
      @token    = token
    end

    # @return [String]
    def inspect
      # NOTE: hide @token
      %Q(#<Pixela::Client:0x#{"%016X" % object_id} @username="#{username}">)
    end

    private

    # @!attribute [r] token
    # @return [String]
    attr_reader :token

    def connection
      Faraday.new(API_ENDPOINT) do |conn|
        conn.request :json
        conn.response :mashify
        conn.response :json
        conn.response :raise_error

        if Pixela.config.debug_logger
          conn.request :curl, Pixela.config.debug_logger, :debug
          conn.response :logger, Pixela.config.debug_logger
        end

        conn.adapter Faraday.default_adapter
      end
    end

    def with_error_handling
      yield
    rescue Faraday::ClientError => error
      begin
        body = JSON.parse(error.response[:body])
        raise PixelaError, body["message"]
      rescue JSON::ParserError
        raise error
      end
    end

    def default_headers
      {
        "User-Agent" => "Pixela v#{Pixela::VERSION} (https://github.com/sue445/pixela)",
        "Content-Type" => "application/json",
      }
    end

    def user_token_headers
      { "X-USER-TOKEN" => token }.merge(default_headers)
    end

    def to_boolean_string(flag)
      flag ? "yes" : "no"
    end

    def to_ymd(date)
      date.strftime("%Y%m%d")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pixela-0.1.1 lib/pixela/client.rb