Class: Checkoff::Portfolios

Inherits:
Object
  • Object
show all
Extended by:
CacheMethod::ClassMethods, T::Sig
Defined in:
lib/checkoff/portfolios.rb

Overview

Pull portfolios from Asana

Constant Summary collapse

MINUTE =
60
HOUR =
T.let(MINUTE * 60, Numeric)
DAY =
T.let(24 * HOUR, Numeric)
REALLY_LONG_CACHE_TIME =
T.let(HOUR * 1, Numeric)
LONG_CACHE_TIME =
T.let(MINUTE * 15, Numeric)
SHORT_CACHE_TIME =
T.let(MINUTE, Numeric)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), clients: Checkoff::Clients.new(config:), client: clients.client, projects: Checkoff::Projects.new(config:, client:), workspaces: Checkoff::Workspaces.new(config:, client:)) ⇒ Portfolios

Returns a new instance of Portfolios.

Parameters:



35
36
37
38
39
40
41
42
43
# File 'lib/checkoff/portfolios.rb', line 35

def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
               clients: Checkoff::Clients.new(config:),
               client: clients.client,
               projects: Checkoff::Projects.new(config:, client:),
               workspaces: Checkoff::Workspaces.new(config:, client:))
  @workspaces = T.let(workspaces, Checkoff::Workspaces)
  @client = T.let(client, Asana::Client)
  @projects = T.let(projects, Checkoff::Projects)
end

Class Method Details

.runvoid

This method returns an undefined value.



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/checkoff/portfolios.rb', line 124

def run
  # @sg-ignore
  # @type [String]
  workspace_name = ARGV[0] || raise('Please pass workspace name as first argument')
  # @sg-ignore
  # @type [String]
  portfolio_name = ARGV[1] || raise('Please pass portfolio name as second argument')
  portfolios = Checkoff::Portfolios.new
  portfolio = portfolios.portfolio_or_raise(workspace_name, portfolio_name)
  puts "Results: #{portfolio}"
end

Instance Method Details

#portfolio(workspace_name, portfolio_name) ⇒ Asana::Resources::Portfolio?

@sg-ignore

Parameters:

  • workspace_name (String)
  • portfolio_name (String)

Returns:

  • (Asana::Resources::Portfolio, nil)


62
63
64
65
66
67
68
69
# File 'lib/checkoff/portfolios.rb', line 62

def portfolio(workspace_name, portfolio_name)
  workspace = workspaces.workspace_or_raise(workspace_name)
  me = client.users.me
  portfolio_objs = client.portfolios.find_all(workspace: workspace.gid,
                                              owner: me.gid)
  # @type [Asana::Resources::Portfolio, nil]
  portfolio_objs.find { |portfolio_obj| portfolio_obj.name == portfolio_name }
end

#portfolio_by_gid(portfolio_gid, extra_fields: []) ⇒ Asana::Resources::Portfolio?

Pull a specific portfolio by gid

Parameters:

  • portfolio_gid (String)
  • extra_fields (Array<String>) (defaults to: [])

Returns:

  • (Asana::Resources::Portfolio, nil)


78
79
80
81
82
83
84
85
# File 'lib/checkoff/portfolios.rb', line 78

def portfolio_by_gid(portfolio_gid,
                     extra_fields: [])
  options = {
    fields: ['name'],
  }
  options[:fields] += extra_fields
  client.portfolios.find_by_id(portfolio_gid, options:)
end

#portfolio_or_raise(workspace_name, portfolio_name) ⇒ Asana::Resources::Portfolio

Parameters:

  • workspace_name (String)
  • portfolio_name (String)

Returns:

  • (Asana::Resources::Portfolio)


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

def portfolio_or_raise(workspace_name, portfolio_name)
  portfolio_obj = portfolio(workspace_name, portfolio_name)
  raise "Could not find portfolio #{portfolio_name} under workspace #{workspace_name}." if portfolio_obj.nil?

  portfolio_obj
end

#projects_in_portfolio(workspace_name, portfolio_name, extra_project_fields: []) ⇒ Enumerable<Asana::Resources::Project>

Parameters:

  • workspace_name (String)
  • portfolio_name (String)
  • extra_project_fields (Array<String>) (defaults to: [])

Returns:

  • (Enumerable<Asana::Resources::Project>)


93
94
95
96
97
# File 'lib/checkoff/portfolios.rb', line 93

def projects_in_portfolio(workspace_name, portfolio_name,
                          extra_project_fields: [])
  portfolio = portfolio_or_raise(workspace_name, portfolio_name)
  projects_in_portfolio_obj(portfolio)
end

#projects_in_portfolio_obj(portfolio, extra_project_fields: []) ⇒ Enumerable<Asana::Resources::Project>

Parameters:

  • portfolio (Asana::Resources::Portfolio)
  • extra_project_fields (Array<String>) (defaults to: [])

Returns:

  • (Enumerable<Asana::Resources::Project>)


104
105
106
107
# File 'lib/checkoff/portfolios.rb', line 104

def projects_in_portfolio_obj(portfolio, extra_project_fields: [])
  options = projects.project_options(extra_project_fields:)
  client.portfolios.get_items_for_portfolio(portfolio_gid: portfolio.gid, options:)
end