Class: Checkoff::Projects

Inherits:
Object
  • Object
show all
Defined in:
lib/checkoff/projects.rb

Overview

Work with projects in Asana

Constant Summary collapse

MINUTE =
60
HOUR =
MINUTE * 60
DAY =
24 * HOUR
REALLY_LONG_CACHE_TIME =
HOUR * 1
LONG_CACHE_TIME =
MINUTE * 15
SHORT_CACHE_TIME =
MINUTE * 5

Instance Method Summary collapse

Constructor Details

#initialize(config: Checkoff::ConfigLoader.load(:asana), asana_client: Asana::Client, workspaces: Checkoff::Workspaces.new) ⇒ Projects

XXX: Move low-level functions private



26
27
28
29
30
31
32
# File 'lib/checkoff/projects.rb', line 26

def initialize(config: Checkoff::ConfigLoader.load(:asana),
               asana_client: Asana::Client,
               workspaces: Checkoff::Workspaces.new)
  @config = config
  @asana_client = asana_client
  @workspaces = workspaces
end

Instance Method Details

#active_tasks(tasks) ⇒ Object



70
71
72
# File 'lib/checkoff/projects.rb', line 70

def active_tasks(tasks)
  tasks.select { |task| task.completed_at.nil? }
end

#clientObject



34
35
36
# File 'lib/checkoff/projects.rb', line 34

def client
  @workspaces.client
end

#my_tasks(workspace_name) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/checkoff/projects.rb', line 49

def my_tasks(workspace_name)
  my_tasks = @config[:my_tasks]
  id = @config[:my_tasks][workspace_name] unless my_tasks.nil?
  if my_tasks.nil? || id.nil?
    raise "Please define [:my_tasks][#{workspace_name}] in config file"
  end
  projects.find_by_id(id)
end

#project(workspace_name, project_name) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/checkoff/projects.rb', line 58

def project(workspace_name, project_name)
  if project_name.is_a?(Symbol) && project_name.to_s.start_with?('my_tasks')
    my_tasks(workspace_name)
  else
    projects = projects_by_workspace_name(workspace_name)
    projects.find do |project|
      project.name == project_name
    end
  end
end

#projectsObject



38
39
40
# File 'lib/checkoff/projects.rb', line 38

def projects
  client.projects
end

#projects_by_workspace_name(workspace_name) ⇒ Object



43
44
45
46
47
# File 'lib/checkoff/projects.rb', line 43

def projects_by_workspace_name(workspace_name)
  workspace = @workspaces.workspace_by_name(workspace_name)
  raise "Could not find workspace named #{workspace_name}" unless workspace
  projects.find_by_workspace(workspace: workspace.id)
end

#task_optionsObject



74
75
76
77
78
79
80
81
# File 'lib/checkoff/projects.rb', line 74

def task_options
  {
    per_page: 100,
    options: {
      fields: %w[name completed_at due_at due_on assignee_status tags],
    },
  }
end

#tasks_from_project(project, only_uncompleted: true, extra_fields: []) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/checkoff/projects.rb', line 83

def tasks_from_project(project, only_uncompleted: true, extra_fields: [])
  options = task_options
  options[:completed_since] = '9999-12-01' if only_uncompleted
  options[:project] = project.id
  options[:options][:fields] += extra_fields
  client.tasks.find_all(options).to_a
end