Class: Checkoff::Timelines
- Inherits:
-
Object
- Object
- Checkoff::Timelines
- Extended by:
- CacheMethod::ClassMethods
- Defined in:
- lib/checkoff/timelines.rb
Overview
Manages timelines of dependent tasks with dates and milestones
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
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), workspaces: Checkoff::Workspaces.new(config: config), sections: Checkoff::Sections.new(config: config), tasks: Checkoff::Tasks.new(config: config), portfolios: Checkoff::Portfolios.new(config: config), clients: Checkoff::Clients.new(config: config), client: clients.client) ⇒ Timelines
constructor
A new instance of Timelines.
- #last_milestone_in_section(section_gid) ⇒ Asana::Resources::Task?
- #last_task_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil) ⇒ Boolean
- #task_dependent_on_previous_section_last_milestone?(task, limit_to_portfolio_gid: nil) ⇒ Boolean
Constructor Details
#initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), workspaces: Checkoff::Workspaces.new(config: config), sections: Checkoff::Sections.new(config: config), tasks: Checkoff::Tasks.new(config: config), portfolios: Checkoff::Portfolios.new(config: config), clients: Checkoff::Clients.new(config: config), client: clients.client) ⇒ Timelines
Returns a new instance of Timelines.
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/checkoff/timelines.rb', line 33 def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), workspaces: Checkoff::Workspaces.new(config: config), sections: Checkoff::Sections.new(config: config), tasks: Checkoff::Tasks.new(config: config), portfolios: Checkoff::Portfolios.new(config: config), clients: Checkoff::Clients.new(config: config), client: clients.client) @workspaces = workspaces @sections = sections @tasks = tasks @portfolios = portfolios @client = client end |
Class Method Details
.run ⇒ void
This method returns an undefined value.
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/checkoff/timelines.rb', line 137 def run # @sg-ignore # @type [String] # workspace_name = ARGV[0] || raise('Please pass workspace name as first argument') # @sg-ignore # @type [String] # timeline_name = ARGV[1] || raise('Please pass timeline name as second argument') # timelines = Checkoff::Timelines.new # timeline = timelines.timeline_or_raise(workspace_name, timeline_name) # puts "Results: #{timeline}" end |
Instance Method Details
#last_milestone_in_section(section_gid) ⇒ Asana::Resources::Task?
98 99 100 101 102 103 104 |
# File 'lib/checkoff/timelines.rb', line 98 def last_milestone_in_section(section_gid) # @type [Array<Asana::Resources::Task>] task_list = @sections.tasks_by_section_gid(section_gid, extra_fields: ['resource_subtype']).to_a last_task = task_list.last last_task&.resource_subtype == 'milestone' ? last_task : nil end |
#last_task_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil) ⇒ Boolean
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/checkoff/timelines.rb', line 66 def last_task_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil) unless limit_to_portfolio_name.nil? limit_to_projects = @portfolios.projects_in_portfolio(@workspaces.default_workspace.name, limit_to_portfolio_name) end all_dependent_task_gids = nil task.memberships.all? do |membership_data| unless limit_to_portfolio_name.nil? project_gid = membership_data.fetch('project').fetch('gid') next true unless limit_to_projects.map(&:gid).include? project_gid end # @type [Hash{String => String}] section_data = membership_data.fetch('section') # @type [String] section_gid = section_data.fetch('gid') last_milestone = last_milestone_in_section(section_gid) next false if last_milestone.nil? next true if last_milestone.gid == task.gid all_dependent_task_gids ||= @tasks.all_dependent_tasks(task).map(&:gid) all_dependent_task_gids.include? last_milestone.gid end end |
#task_dependent_on_previous_section_last_milestone?(task, limit_to_portfolio_gid: nil) ⇒ Boolean
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/checkoff/timelines.rb', line 50 def task_dependent_on_previous_section_last_milestone?(task, limit_to_portfolio_gid: nil) task_data = @tasks.task_to_h(task) # @sg-ignore # @type [Array<Hash{String => Hash{String => String}}>] memberships_data = task_data.fetch('memberships') memberships_data.all? do |membership_data| # @type [Hash{String => String}] section_data = membership_data.fetch('section') section_gid = section_data.fetch('gid') section = @sections.section_by_gid(section_gid) task_data_dependent_on_previous_section_last_milestone?(task_data, section) end end |