checkoff 0.193.0 → 0.194.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: 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