checkoff 0.194.0 → 0.195.0

Sign up to get free protection for your applications and to get access to all the features.
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