Class: Checkoff::Portfolios
- Inherits:
-
Object
- Object
- Checkoff::Portfolios
- 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
-
#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
constructor
A new instance of Portfolios.
-
#portfolio(workspace_name, portfolio_name) ⇒ Asana::Resources::Portfolio?
@sg-ignore.
-
#portfolio_by_gid(portfolio_gid, extra_fields: []) ⇒ Asana::Resources::Portfolio?
Pull a specific portfolio by gid.
- #portfolio_or_raise(workspace_name, portfolio_name) ⇒ Asana::Resources::Portfolio
- #projects_in_portfolio(workspace_name, portfolio_name, extra_project_fields: []) ⇒ Enumerable<Asana::Resources::Project>
- #projects_in_portfolio_obj(portfolio, extra_project_fields: []) ⇒ Enumerable<Asana::Resources::Project>
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.
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
.run ⇒ void
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
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
78 79 80 81 82 83 84 85 |
# File 'lib/checkoff/portfolios.rb', line 78 def portfolio_by_gid(portfolio_gid, extra_fields: []) = { fields: ['name'], } [:fields] += extra_fields client.portfolios.find_by_id(portfolio_gid, options:) end |
#portfolio_or_raise(workspace_name, portfolio_name) ⇒ 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>
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>
104 105 106 107 |
# File 'lib/checkoff/portfolios.rb', line 104 def projects_in_portfolio_obj(portfolio, extra_project_fields: []) = projects.(extra_project_fields:) client.portfolios.get_items_for_portfolio(portfolio_gid: portfolio.gid, options:) end |