checkoff 0.194.0 → 0.195.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebec494187b376d4803fa45da76cfdb6ca3b958290ec0308caacb4ac895fa092
4
- data.tar.gz: 7d2fd1701ecbae61048495a6eb91587a3cc384f3aa067f01b7b580e9807d02a0
3
+ metadata.gz: c777dc82cc51fd0ec445c1413fc6f33ed37e98b8a41026446cec61f800ec0417
4
+ data.tar.gz: bb7edb3ed4eb31a171cd4204a338ea56b6097a4cee8bf299e451ee7ecf342e59
5
5
  SHA512:
6
- metadata.gz: 9ce29418e9649e852ce60b1a3ac8c166e7da1d06bb52d496356bb01022be067b26846b82b631842ae80a8703824ba84731fd585c621df4b982effebdb3b50452
7
- data.tar.gz: 29997815ab3aa694eb4d67758fb6cdd8f2e06a2467006b54b13f82c00ad3e385773e8ad69da448e7ef563d2b4c938b6e8719e923ddc95abe06d6f79403151444
6
+ metadata.gz: 794bf6eba0270a4cb002421f2e0857b20268d348bec359dc5d1363f345a60f385d1dea1cf26f0530cabd015e1f06b4b037ca54b342174ac5415c1f93eed3afa7
7
+ data.tar.gz: c9263dd810014f080b6d52c6954dd86aca9f837b88e10c711be154c49f7652cdba92303d462bee08a1c25a2f34b3ef3b85a14557410892c052916ea82a7eb098
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.194.0)
15
+ checkoff (0.195.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -18,6 +18,7 @@ module Checkoff
18
18
  # @param tasks [Checkoff::Tasks]
19
19
  # @param sections [Checkoff::Sections]
20
20
  # @param projects [Checkoff::Projects]
21
+ # @param resources [Checkoff::Resources]
21
22
  # @param clients [Checkoff::Clients]
22
23
  # @param client [Asana::Client]
23
24
  # @param asana_event_enrichment [Checkoff::Internal::AsanaEventEnrichment]
@@ -26,12 +27,14 @@ module Checkoff
26
27
  tasks: Checkoff::Tasks.new(config: config),
27
28
  sections: Checkoff::Sections.new(config: config),
28
29
  projects: Checkoff::Projects.new(config: config),
30
+ resources: Checkoff::Resources.new(config: config),
29
31
  clients: Checkoff::Clients.new(config: config),
30
32
  client: clients.client)
31
33
  @workspaces = workspaces
32
34
  @tasks = tasks
33
35
  @sections = sections
34
36
  @projects = projects
37
+ @resources = resources
35
38
  @client = client
36
39
  end
37
40
 
@@ -86,13 +89,9 @@ module Checkoff
86
89
  #
87
90
  # @return [Array<([String, nil], [String,nil])>]
88
91
  def enrich_gid(gid, resource_type: nil)
89
- %w[task section project].each do |resource_type_to_try|
90
- next unless [resource_type_to_try, nil].include?(resource_type)
91
-
92
- name = method(:"enrich_#{resource_type_to_try}_gid").call(gid)
93
- return [name, resource_type_to_try] if name
94
- end
95
- [nil, nil]
92
+ # @sg-ignore
93
+ resource, resource_type = resources.resource_by_gid(gid, resource_type: resource_type)
94
+ [resource&.name, resource_type]
96
95
  end
97
96
 
98
97
  # @param filter [Hash{String => String}]
@@ -108,30 +107,6 @@ module Checkoff
108
107
  filter['checkoff:enriched:parent.resource_type'] = resource_type if resource_type
109
108
  end
110
109
 
111
- # @param gid [String]
112
- #
113
- # @return [String, nil]
114
- def enrich_task_gid(gid)
115
- task = tasks.task_by_gid(gid, only_uncompleted: false)
116
- task&.name
117
- end
118
-
119
- # @param section_gid [String]
120
- #
121
- # @return [String, nil]
122
- def enrich_section_gid(section_gid)
123
- section = sections.section_by_gid(section_gid)
124
- section&.name
125
- end
126
-
127
- # @param project_gid [String]
128
- #
129
- # @return [String, nil]
130
- def enrich_project_gid(project_gid)
131
- project = projects.project_by_gid(project_gid)
132
- project&.name
133
- end
134
-
135
110
  # @param filter [Hash{String => String}]
136
111
  #
137
112
  # @return [void]
@@ -151,7 +126,8 @@ module Checkoff
151
126
  section_gid = filter['checkoff:fetched.section.gid']
152
127
  return unless section_gid
153
128
 
154
- name = enrich_section_gid(section_gid)
129
+ section = sections.section_by_gid(section_gid)
130
+ name = section&.name
155
131
  filter['checkoff:enriched:fetched.section.name'] = name if name
156
132
  end
157
133
 
@@ -208,6 +184,9 @@ module Checkoff
208
184
  # @return [Checkoff::Workspaces]
209
185
  attr_reader :workspaces
210
186
 
187
+ # @return [Checkoff::Resources]
188
+ attr_reader :resources
189
+
211
190
  # @return [Asana::Client]
212
191
  attr_reader :client
213
192
  end
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'forwardable'
6
+ require 'cache_method'
7
+ require_relative 'internal/config_loader'
8
+ require_relative 'workspaces'
9
+ require_relative 'clients'
10
+
11
+ # https://developers.asana.com/reference/resources
12
+
13
+ module Checkoff
14
+ # Deal with Asana resources across different resource types
15
+ class Resources
16
+ # @!parse
17
+ # extend CacheMethod::ClassMethods
18
+
19
+ MINUTE = 60
20
+ private_constant :MINUTE
21
+ HOUR = MINUTE * 60
22
+ private_constant :HOUR
23
+ DAY = 24 * HOUR
24
+ private_constant :DAY
25
+ REALLY_LONG_CACHE_TIME = HOUR * 1
26
+ private_constant :REALLY_LONG_CACHE_TIME
27
+ LONG_CACHE_TIME = MINUTE * 15
28
+ private_constant :LONG_CACHE_TIME
29
+ SHORT_CACHE_TIME = MINUTE
30
+ private_constant :SHORT_CACHE_TIME
31
+
32
+ # @param config [Hash]
33
+ # @param workspaces [Checkoff::Workspaces]
34
+ # @param tasks [Checkoff::Tasks]
35
+ # @param sections [Checkoff::Sections]
36
+ # @param projects [Checkoff::Projects]
37
+ # @param clients [Checkoff::Clients]
38
+ # @param client [Asana::Client]
39
+ def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
40
+ workspaces: Checkoff::Workspaces.new(config: config),
41
+ tasks: Checkoff::Tasks.new(config: config),
42
+ sections: Checkoff::Sections.new(config: config),
43
+ projects: Checkoff::Projects.new(config: config),
44
+ clients: Checkoff::Clients.new(config: config),
45
+ client: clients.client)
46
+ @workspaces = workspaces
47
+ @tasks = tasks
48
+ @sections = sections
49
+ @projects = projects
50
+ @client = client
51
+ end
52
+
53
+ # Attempt to look up a GID, even in situations where we don't
54
+ # have a resource type provided.
55
+ #
56
+ # @param gid [String]
57
+ # @param resource_type [String,nil]
58
+ #
59
+ # @return [Array<([Asana::Resource, nil], [String,nil])>]
60
+ def resource_by_gid(gid, resource_type: nil)
61
+ %w[task section project].each do |resource_type_to_try|
62
+ next unless [resource_type_to_try, nil].include?(resource_type)
63
+
64
+ resource = method(:"fetch_#{resource_type_to_try}_gid").call(gid)
65
+ return [resource, resource_type_to_try] if resource
66
+ end
67
+ [nil, nil]
68
+ end
69
+
70
+ private
71
+
72
+ # @param gid [String]
73
+ #
74
+ # @return [Asana::Resources::Task, nil]
75
+ def fetch_task_gid(gid)
76
+ tasks.task_by_gid(gid, only_uncompleted: false)
77
+ end
78
+
79
+ # @param section_gid [String]
80
+ #
81
+ # @return [Asana::Resources::Section, nil]
82
+ def fetch_section_gid(section_gid)
83
+ sections.section_by_gid(section_gid)
84
+ end
85
+
86
+ # @param project_gid [String]
87
+ #
88
+ # @return [Asana::Resources::Project, nil]
89
+ def fetch_project_gid(project_gid)
90
+ projects.project_by_gid(project_gid)
91
+ end
92
+
93
+ # @return [Checkoff::Workspaces]
94
+ attr_reader :workspaces
95
+
96
+ # @return [Checkoff::Projects]
97
+ attr_reader :projects
98
+
99
+ # @return [Checkoff::Sections]
100
+ attr_reader :sections
101
+
102
+ # @return [Checkoff::Tasks]
103
+ attr_reader :tasks
104
+
105
+ # @return [Asana::Client]
106
+ attr_reader :client
107
+
108
+ # bundle exec ./resources.rb
109
+ # :nocov:
110
+ class << self
111
+ # @return [void]
112
+ def run
113
+ # # @sg-ignore
114
+ # # @type [String]
115
+ # workspace_name = ARGV[0] || raise('Please pass workspace name as first argument')
116
+ # # @sg-ignore
117
+ # # @type [String]
118
+ # resource_name = ARGV[1] || raise('Please pass resource name as second argument')
119
+ # resources = Checkoff::Resources.new
120
+ # resource = resources.resource_or_raise(workspace_name, resource_name)
121
+ # puts "Results: #{resource}"
122
+ end
123
+ end
124
+ # :nocov:
125
+ end
126
+ end
127
+
128
+ # :nocov:
129
+ abs_program_name = File.expand_path($PROGRAM_NAME)
130
+ Checkoff::Resources.run if abs_program_name == File.expand_path(__FILE__)
131
+ # :nocov:
@@ -3,5 +3,5 @@
3
3
  # Command-line and gem client for Asana (unofficial)
4
4
  module Checkoff
5
5
  # Version of library
6
- VERSION = '0.194.0'
6
+ VERSION = '0.195.0'
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.194.0
4
+ version: 0.195.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
@@ -170,6 +170,7 @@ files:
170
170
  - lib/checkoff/portfolios.rb
171
171
  - lib/checkoff/project_selectors.rb
172
172
  - lib/checkoff/projects.rb
173
+ - lib/checkoff/resources.rb
173
174
  - lib/checkoff/section_selectors.rb
174
175
  - lib/checkoff/sections.rb
175
176
  - lib/checkoff/subtasks.rb