class Xoggl::Client

Public Class Methods

new(api_token) click to toggle source
# File lib/xoggl/client.rb, line 6
def initialize(api_token)
  @toggl = TogglV8::API.new(api_token)
  @zone_offset = Time.now.utc_offset / 3600
end

Public Instance Methods

log_sick_leave(start_isodate, end_isodate) click to toggle source
# File lib/xoggl/client.rb, line 21
def log_sick_leave(start_isodate, end_isodate)
  log_leave(start_isodate, end_isodate, 'Malattia')
end
log_vacation(start_isodate, end_isodate) click to toggle source
# File lib/xoggl/client.rb, line 17
def log_vacation(start_isodate, end_isodate)
  log_leave(start_isodate, end_isodate, 'Ferie')
end
log_work(start_isodate, end_isodate, project_name) click to toggle source
# File lib/xoggl/client.rb, line 11
def log_work(start_isodate, end_isodate, project_name)
  do_between(start_isodate, end_isodate) do |date|
    log_work_day(date, project_name)
  end
end

Private Instance Methods

create_leave_entry(start_time, type) click to toggle source
# File lib/xoggl/client.rb, line 71
def create_leave_entry(start_time, type)
  @toggl.create_time_entry(
    'billable' => false,
    'description' => type,
    'tags' => [type],
    'pid' => leave_project_id,
    'duration' => 14_400,
    'start' => @toggl.iso8601(start_time)
  )
end
create_work_entry(start_time, project_name) click to toggle source
# File lib/xoggl/client.rb, line 60
def create_work_entry(start_time, project_name)
  @toggl.create_time_entry(
    'billable' => true,
    'description' => project_name,
    'tags' => [],
    'pid' => project_id_from(project_name),
    'duration' => 14_400,
    'start' => @toggl.iso8601(start_time)
  )
end
date_time_from(date, hours) click to toggle source
# File lib/xoggl/client.rb, line 82
def date_time_from(date, hours)
  DateTime.new(date.year, date.month, date.day, hours - @zone_offset)
end
do_between(start_isodate, end_isodate) { |date| ... } click to toggle source
# File lib/xoggl/client.rb, line 33
def do_between(start_isodate, end_isodate)
  date = DateTime.iso8601(start_isodate)
  end_date = DateTime.iso8601(end_isodate)

  raise ArgumentError.new('End date must be greater than or equal to start date') if end_date < date

  while date <= end_date
    yield(date)

    date = date.next_day
  end
end
leave_project_id() click to toggle source
# File lib/xoggl/client.rb, line 90
def leave_project_id
  @vacation_project_id ||= @toggl.my_projects.select do |project|
    project['name'] == 'Assenza'
  end.first['id']
end
log_leave(start_isodate, end_isodate, type) click to toggle source
# File lib/xoggl/client.rb, line 27
def log_leave(start_isodate, end_isodate, type)
  do_between(start_isodate, end_isodate) do |date|
    log_leave_day(date, type) unless to_skip?(date)
  end
end
log_leave_day(date, type) click to toggle source
# File lib/xoggl/client.rb, line 55
def log_leave_day(date, type)
  create_leave_entry(date_time_from(date, 9), type)
  create_leave_entry(date_time_from(date, 14), type)
end
log_work_day(date, project_name) click to toggle source
# File lib/xoggl/client.rb, line 50
def log_work_day(date, project_name)
  create_work_entry(date_time_from(date, 9), project_name)
  create_work_entry(date_time_from(date, 14), project_name)
end
project_id_from(project_name) click to toggle source
# File lib/xoggl/client.rb, line 96
def project_id_from(project_name)
  @toggl.my_projects.select do |project|
    project['name'] == project_name
  end.first['id']
end
to_skip?(date) click to toggle source
# File lib/xoggl/client.rb, line 46
def to_skip?(date)
  date.saturday? || date.sunday? || Holidays.on(date, :it, :observed).any?
end
workspace_id() click to toggle source
# File lib/xoggl/client.rb, line 86
def workspace_id
  @workspace_id ||= @toggl.my_workspaces.first['id']
end