class TogglAPI::ReportsClient

The Toggl API Client

Constants

API_URL

Public Instance Methods

fetch_reports(params) { |results_raw| ... } click to toggle source

@param params [Hash]: Toggl API params

- since
- until
- workspace_id
- ... more params available, see Toggl API documentation for details
# File lib/toggl_api/reports_client.rb, line 17
def fetch_reports(params)
  raise "Must give a block" unless block_given?
  page = 1
  current_total = 0
  loop do
    results_raw = fetch_reports_details_raw(
      params.merge(page: page)
    )
    yield(results_raw["data"])

    current_total += results_raw["data"].count
    break if current_total == results_raw["total_count"]
    page += 1
  end
end
fetch_reports_details_raw(params) click to toggle source
# File lib/toggl_api/reports_client.rb, line 33
def fetch_reports_details_raw(params)
  fetch_reports_raw(api_url(:details), params)
end
fetch_reports_summary_raw(params) click to toggle source
# File lib/toggl_api/reports_client.rb, line 37
def fetch_reports_summary_raw(params)
  fetch_reports_raw(api_url(:summary), params)
end

Private Instance Methods

api_url(resource) click to toggle source
# File lib/toggl_api/reports_client.rb, line 77
def api_url(resource)
  "#{API_URL}/#{resource}"
end
credentials() click to toggle source
# File lib/toggl_api/reports_client.rb, line 62
def credentials
  {
    username: @api_token,
    password: "api_token"
  }
end
fetch_reports_raw(url, params) click to toggle source

@param url [String] @param params [Hash]: Toggl API params

# File lib/toggl_api/reports_client.rb, line 45
def fetch_reports_raw(url, params)
  logger.info "Fetching Toggl reports for params #{params}" if logger
  params = { user_agent: @user_agent }.merge(params)
  response = HTTParty.get(
    url,
    headers: headers,
    query: params,
    basic_auth: credentials
  )

  handle_response(response)
end
handle_response(response) click to toggle source
# File lib/toggl_api/reports_client.rb, line 69
def handle_response(response)
  if response.code == 200 || response.code == 201
    JSON.parse(response.body)
  else
    fail(Error, "Toggl API error #{response.code}: #{response.body}")
  end
end
headers() click to toggle source
# File lib/toggl_api/reports_client.rb, line 58
def headers
  { "Content-Type" => "application/json" }
end