Sha256: e4ef0f1719cb25f3ae27e16c5b14e385463dc2c47cdcea65629f7d952b0d400d

Contents?: true

Size: 1.89 KB

Versions: 31

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

require 'forwardable'
require_relative 'projects'
require_relative 'workspaces'
require_relative 'clients'

module Checkoff
  # Query different sections of Asana 'My Tasks' projects
  class MyTasks
    MINUTE = 60
    LONG_CACHE_TIME = MINUTE * 15
    SHORT_CACHE_TIME = MINUTE * 5

    attr_reader :projects

    def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
                   client: Checkoff::Clients.new(config: config).client,
                   projects: Checkoff::Projects.new(config: config,
                                                    client: client))
      @config = config
      @client = client
      @projects = projects
    end

    # Given a 'My Tasks' project object, pull all tasks, then provide
    # a Hash of tasks with section name -> task list of the
    # uncompleted tasks.
    def tasks_by_section_for_my_tasks(project, extra_fields: [])
      raw_tasks = projects.tasks_from_project(project,
                                              extra_fields: extra_fields + ['assignee_section.name'])
      active_tasks = projects.active_tasks(raw_tasks)
      by_my_tasks_section(active_tasks, project.gid)
    end

    def section_key(name)
      return nil if name == 'Recently assigned'

      name
    end

    # Given a list of tasks in 'My Tasks', pull a Hash of tasks with
    # section name -> task list
    def by_my_tasks_section(tasks, project_gid)
      by_section = {}
      sections = client.sections.get_sections_for_project(project_gid: project_gid)
      sections.each { |section| by_section[section_key(section.name)] = [] }
      tasks.each do |task|
        assignee_section = task.assignee_section
        current_section = section_key(assignee_section.name)
        by_section[current_section] ||= []
        by_section[current_section] << task
      end
      by_section
    end

    private

    attr_reader :client
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
checkoff-0.46.0 lib/checkoff/my_tasks.rb
checkoff-0.45.1 lib/checkoff/my_tasks.rb
checkoff-0.45.0 lib/checkoff/my_tasks.rb
checkoff-0.44.6 lib/checkoff/my_tasks.rb
checkoff-0.44.5 lib/checkoff/my_tasks.rb
checkoff-0.44.4 lib/checkoff/my_tasks.rb
checkoff-0.44.3 lib/checkoff/my_tasks.rb
checkoff-0.44.2 lib/checkoff/my_tasks.rb
checkoff-0.44.1 lib/checkoff/my_tasks.rb
checkoff-0.44.0 lib/checkoff/my_tasks.rb
checkoff-0.43.0 lib/checkoff/my_tasks.rb
checkoff-0.42.0 lib/checkoff/my_tasks.rb
checkoff-0.41.0 lib/checkoff/my_tasks.rb
checkoff-0.40.0 lib/checkoff/my_tasks.rb
checkoff-0.39.4 lib/checkoff/my_tasks.rb
checkoff-0.39.3 lib/checkoff/my_tasks.rb
checkoff-0.39.2 lib/checkoff/my_tasks.rb
checkoff-0.39.1 lib/checkoff/my_tasks.rb
checkoff-0.39.0 lib/checkoff/my_tasks.rb
checkoff-0.38.0 lib/checkoff/my_tasks.rb