checkoff 0.193.0 → 0.194.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: 740a4435d472d0e2034b946c694abd1f40e91bcbf874380ca43de89e82bbdb8e
4
- data.tar.gz: 7e41942a46e0dc7ad297a1ce4379fab954a2d3831c223c4a99801cd9567ecb70
3
+ metadata.gz: ebec494187b376d4803fa45da76cfdb6ca3b958290ec0308caacb4ac895fa092
4
+ data.tar.gz: 7d2fd1701ecbae61048495a6eb91587a3cc384f3aa067f01b7b580e9807d02a0
5
5
  SHA512:
6
- metadata.gz: c96bb1cc1df2d2874eecb23c8328bb48ea7b5401188dd072dfba815d908965316a9c8062879d61ce6a949b1adfd635db54c6d0a6b436678f0202ad1121072562
7
- data.tar.gz: c3b68ef7459b67ccfa436788730b22e01139a12f05d8507b386d3813e0f172e0ff20109ddd2ae2355660c1fe51b9080344e264351a0d79eba1ff6967ece439f7
6
+ metadata.gz: 9ce29418e9649e852ce60b1a3ac8c166e7da1d06bb52d496356bb01022be067b26846b82b631842ae80a8703824ba84731fd585c621df4b982effebdb3b50452
7
+ data.tar.gz: 29997815ab3aa694eb4d67758fb6cdd8f2e06a2467006b54b13f82c00ad3e385773e8ad69da448e7ef563d2b4c938b6e8719e923ddc95abe06d6f79403151444
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.193.0)
15
+ checkoff (0.194.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -130,11 +130,11 @@ GEM
130
130
  multi_xml (0.6.0)
131
131
  multipart-post (2.3.0)
132
132
  mutex_m (0.2.0)
133
- nokogiri (1.15.5-arm64-darwin)
133
+ nokogiri (1.16.2-arm64-darwin)
134
134
  racc (~> 1.4)
135
- nokogiri (1.15.5-x86_64-darwin)
135
+ nokogiri (1.16.2-x86_64-darwin)
136
136
  racc (~> 1.4)
137
- nokogiri (1.15.5-x86_64-linux)
137
+ nokogiri (1.16.2-x86_64-linux)
138
138
  racc (~> 1.4)
139
139
  oauth2 (1.4.11)
140
140
  faraday (>= 0.17.3, < 3.0)
@@ -52,17 +52,46 @@ module Checkoff
52
52
  @timing = timing
53
53
  end
54
54
 
55
+ # @param extra_fields [Array<String>]
56
+ #
57
+ # @return [Array<String>]
58
+ def task_fields(extra_fields: [])
59
+ (%w[name completed_at start_at start_on due_at due_on tags
60
+ memberships.project.gid memberships.project.name
61
+ memberships.section.name dependencies] + extra_fields).sort.uniq
62
+ end
63
+
55
64
  # Default options used in Asana API to pull tasks
65
+ #
66
+ # @param extra_fields [Array<String>]
67
+ # @param [Boolean] only_uncompleted
68
+ #
56
69
  # @return [Hash<Symbol, Object>]
57
- def task_options
58
- {
70
+ def task_options(extra_fields: [], only_uncompleted: false)
71
+ options = {
59
72
  per_page: 100,
60
73
  options: {
61
- fields: %w[name completed_at start_at start_on due_at due_on tags
62
- memberships.project.gid memberships.project.name
63
- memberships.section.name dependencies],
74
+ fields: task_fields(extra_fields: extra_fields),
64
75
  },
65
76
  }
77
+ options[:completed_since] = '9999-12-01' if only_uncompleted
78
+ options
79
+ end
80
+
81
+ # @param extra_project_fields [Array<String>]
82
+ #
83
+ # @return [Array<String>]
84
+ def project_fields(extra_project_fields: [])
85
+ (%w[name custom_fields] + extra_project_fields).sort.uniq
86
+ end
87
+
88
+ # Default options used in Asana API to pull projects
89
+ #
90
+ # @param extra_project_fields [Array<String>]
91
+ #
92
+ # @return [Hash<Symbol, Object>]
93
+ def project_options(extra_project_fields: [])
94
+ { fields: project_fields(extra_project_fields: extra_project_fields) }
66
95
  end
67
96
 
68
97
  # pulls an Asana API project class given a name
@@ -103,7 +132,7 @@ module Checkoff
103
132
  #
104
133
  # @return [Asana::Resources::Project,nil]
105
134
  def project_by_gid(gid, extra_fields: [])
106
- projects.find_by_id(gid, options: { fields: %w[name] + extra_fields })
135
+ projects.find_by_id(gid, options: project_options(extra_project_fields: extra_fields))
107
136
  rescue Asana::Errors::NotFound => e
108
137
  debug e
109
138
  nil
@@ -142,10 +171,8 @@ module Checkoff
142
171
  def tasks_from_project_gid(project_gid,
143
172
  only_uncompleted: true,
144
173
  extra_fields: [])
145
- options = task_options
146
- options[:completed_since] = '9999-12-01' if only_uncompleted
174
+ options = task_options(extra_fields: extra_fields, only_uncompleted: only_uncompleted)
147
175
  options[:project] = project_gid
148
- options[:options][:fields] += extra_fields
149
176
  # Note: 30 minute cache time on a raw Enumerable from SDK gives
150
177
  # 'Your pagination token has expired' errors. So we go ahead
151
178
  # and eagerly evaluate here so we can enjoy the cache.
@@ -158,11 +185,12 @@ module Checkoff
158
185
  # @return [Enumerable<Asana::Resources::Project>]
159
186
  def projects_by_workspace_name(workspace_name, extra_fields: [])
160
187
  workspace = @workspaces.workspace_or_raise(workspace_name)
161
- options = { fields: %w[name] + extra_fields }
162
188
  # 15 minute cache resulted in 'Your pagination token has
163
189
  # expired', so let's cache this a super long time and force
164
190
  # evaluation
165
- projects.find_by_workspace(workspace: workspace.gid, per_page: 100, options: options).to_a
191
+ projects.find_by_workspace(workspace: workspace.gid,
192
+ per_page: 100,
193
+ options: project_options(extra_project_fields: extra_fields)).to_a
166
194
  end
167
195
  cache_method :projects_by_workspace_name, REALLY_LONG_CACHE_TIME
168
196
 
@@ -106,9 +106,8 @@ module Checkoff
106
106
  def tasks_by_section_gid(section_gid,
107
107
  only_uncompleted: true,
108
108
  extra_fields: [])
109
- options = projects.task_options
110
- options[:options][:fields] += extra_fields
111
- options[:completed_since] = '9999-12-01' if only_uncompleted
109
+ options = projects.task_options(extra_fields: extra_fields,
110
+ only_uncompleted: only_uncompleted)
112
111
  client.tasks.get_tasks(section: section_gid, **options)
113
112
  end
114
113
 
@@ -127,9 +126,8 @@ module Checkoff
127
126
  only_uncompleted: true,
128
127
  extra_fields: [])
129
128
  section = section_or_raise(workspace_name, project_name, section_name)
130
- options = projects.task_options
131
- options[:options][:fields] += extra_fields
132
- options[:completed_since] = '9999-12-01' if only_uncompleted
129
+ options = projects.task_options(extra_fields: extra_fields,
130
+ only_uncompleted: only_uncompleted)
133
131
  # Note: 30 minute cache time on a raw Enumerable from SDK gives
134
132
  # 'Your pagination token has expired' errors. So we go ahead
135
133
  # and eagerly evaluate here so we can enjoy the cache.
@@ -73,12 +73,9 @@ module Checkoff
73
73
  extra_fields: [],
74
74
  only_uncompleted: true)
75
75
  # @type [Hash]
76
- options = projects.task_options.fetch(:options, {})
77
- options[:fields] += extra_fields
78
- options[:fields] += %w[is_rendered_as_separator]
79
- options[:fields].uniq!
80
-
81
- options[:completed_since] = '9999-12-01' if only_uncompleted
76
+ all_options = projects.task_options(extra_fields: extra_fields + %w[is_rendered_as_separator],
77
+ only_uncompleted: only_uncompleted)
78
+ options = all_options.fetch(:options, {})
82
79
  client.tasks.get_subtasks_for_task(task_gid: task_gid,
83
80
  # per_page: 100, # stub doesn't have this arg available
84
81
  options: options)
data/lib/checkoff/tags.rb CHANGED
@@ -36,7 +36,8 @@ module Checkoff
36
36
  extra_fields: [])
37
37
  tag = tag_or_raise(workspace_name, tag_name)
38
38
 
39
- options = build_task_options(projects.task_options, extra_fields, only_uncompleted)
39
+ options = projects.task_options(extra_fields: extra_fields,
40
+ only_uncompleted: only_uncompleted)
40
41
 
41
42
  params = build_params(options)
42
43
 
@@ -65,12 +66,6 @@ module Checkoff
65
66
 
66
67
  attr_reader :workspaces, :projects, :client
67
68
 
68
- def build_task_options(task_options, extra_fields, only_uncompleted)
69
- task_options[:options][:fields] += extra_fields
70
- task_options[:completed_since] = '9999-12-01' if only_uncompleted
71
- task_options
72
- end
73
-
74
69
  def build_params(options)
75
70
  { limit: options[:per_page], completed_since: options[:completed_since] }.reject do |_, v|
76
71
  v.nil? || Array(v).empty?
@@ -193,10 +193,8 @@ module Checkoff
193
193
  # @return [Hash<Symbol, Object>]
194
194
  def calculate_api_options(extra_fields)
195
195
  # @type [Hash<Symbol, Object>]
196
- options = projects.task_options[:options]
197
- options[:fields] += ['custom_fields']
198
- options[:fields] += extra_fields
199
- options
196
+ all_options = projects.task_options(extra_fields: ['custom_fields'] + extra_fields)
197
+ all_options[:options]
200
198
  end
201
199
 
202
200
  # bundle exec ./task_searches.rb
@@ -156,10 +156,12 @@ module Checkoff
156
156
  def task_by_gid(task_gid,
157
157
  extra_fields: [],
158
158
  only_uncompleted: true)
159
+ # @type [Hash{Symbol => Object}]
160
+ all_options = projects.task_options(extra_fields: extra_fields,
161
+ only_uncompleted: only_uncompleted)
159
162
  # @type [Hash]
160
- options = projects.task_options.fetch(:options, {})
161
- options[:fields] += extra_fields
162
- options[:completed_since] = '9999-12-01' if only_uncompleted
163
+ options = all_options.fetch(:options, {})
164
+ options[:completed_since] = all_options[:completed_since] unless all_options[:completed_since].nil?
163
165
  client.tasks.find_by_id(task_gid, options: options)
164
166
  rescue Asana::Errors::NotFound => e
165
167
  debug e
@@ -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.193.0'
6
+ VERSION = '0.194.0'
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.193.0
4
+ version: 0.194.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-13 00:00:00.000000000 Z
11
+ date: 2024-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport