class Wakatime::Client

Public Class Methods

new(session) click to toggle source
# File lib/wakatime/client.rb, line 13
def initialize(session)
  @session = session
end

Public Instance Methods

current_user(params = {}) click to toggle source
# File lib/wakatime/client.rb, line 37
def current_user(params = {})
  params[:show] ||= 'email,timeout,last_plugin,timezone'
  request_builder('users/current', params)
end
durations(date = Date.today) click to toggle source
# File lib/wakatime/client.rb, line 21
def durations(date = Date.today)
  request_builder('users/current/durations', date: date)
end
heartbeats(params = {}) click to toggle source
# File lib/wakatime/client.rb, line 25
def heartbeats(params = {})
  params[:date] ||= Date.today
  params[:show] ||= 'file,branch,project,time'

  request_builder('users/current/heartbeats', params)
end
plugins(params = {}) click to toggle source
# File lib/wakatime/client.rb, line 32
def plugins(params = {})
  params[:show] ||= 'name,version'
  request_builder('users/current/plugins', params)
end
summaries(start_at = Time.now - 86_400, end_at = Time.now) click to toggle source
# File lib/wakatime/client.rb, line 17
def summaries(start_at = Time.now - 86_400, end_at = Time.now)
  request_builder('users/current/summaries', start: start_at, end: end_at)
end

Private Instance Methods

cast_param(param) click to toggle source
# File lib/wakatime/client.rb, line 48
def cast_param(param)
  case param.class.to_s
  when 'Time'
    param.to_i
  else
    param
  end
end
cast_params(params) click to toggle source
# File lib/wakatime/client.rb, line 44
def cast_params(params)
  params.reduce({}) { |h, (k, v)| h[k] = cast_param(v); h }
end
request_builder(action, params = {}, raw = false) click to toggle source
# File lib/wakatime/client.rb, line 57
def request_builder(action, params = {}, raw = false)
  uri  = Addressable::Template.new("#{Wakatime::API_URL}/#{action}{?query*}")
  uri  = uri.expand(
    'query' => cast_params(params)
  )

  response = @session.get(uri.to_s)

  if raw
    response
  else
    response_factory(action, response)
  end
end
response_factory(action, response) click to toggle source
# File lib/wakatime/client.rb, line 72
def response_factory(action, response)
  klass = Object.const_get("Wakatime::Models::#{action.split('/').first.singularize.classify}")

  if response['data'].is_a? Hash
    klass.new(response['data'])
  else
    response['data'].map do |attributes|
      klass.new(attributes)
    end
  end
end