checkoff 0.7.0 → 0.11.1

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +120 -12
  3. data/.envrc +2 -0
  4. data/.git-hooks/pre_commit/circle_ci.rb +21 -0
  5. data/.gitignore +51 -1
  6. data/.overcommit.yml +32 -12
  7. data/.rubocop.yml +64 -168
  8. data/.yamllint.yml +8 -0
  9. data/CODE_OF_CONDUCT.md +120 -36
  10. data/DEVELOPMENT.md +28 -0
  11. data/Gemfile.lock +139 -0
  12. data/{LICENSE.txt → LICENSE} +7 -6
  13. data/Makefile +52 -18
  14. data/README.md +13 -2
  15. data/Rakefile +2 -9
  16. data/bin/bump +29 -0
  17. data/bin/checkoff +29 -0
  18. data/bin/overcommit +29 -0
  19. data/bin/rake +29 -0
  20. data/checkoff.gemspec +14 -6
  21. data/coverage/.last_run.json +2 -1
  22. data/docs/cookiecutter_input.json +13 -0
  23. data/exe/checkoff +1 -2
  24. data/fix.sh +334 -0
  25. data/lib/checkoff/cli.rb +97 -76
  26. data/lib/checkoff/config_loader.rb +22 -16
  27. data/lib/checkoff/projects.rb +35 -31
  28. data/lib/checkoff/sections.rb +98 -50
  29. data/lib/checkoff/subtasks.rb +14 -11
  30. data/lib/checkoff/tasks.rb +25 -16
  31. data/lib/checkoff/version.rb +2 -1
  32. data/lib/checkoff/workspaces.rb +10 -5
  33. data/metrics/bigfiles_high_water_mark +1 -1
  34. data/metrics/rubocop_high_water_mark +1 -1
  35. data/{lib/tasks/ci.rake → rakelib/citest.rake} +1 -1
  36. data/rakelib/clear_metrics.rake +17 -0
  37. data/{lib/tasks → rakelib}/default.rake +0 -0
  38. data/rakelib/gem_tasks.rake +3 -0
  39. data/{lib/tasks → rakelib}/localtest.rake +1 -1
  40. data/rakelib/overcommit.rake +6 -0
  41. data/rakelib/quality.rake +4 -0
  42. data/{lib/tasks → rakelib}/test.rake +0 -0
  43. data/rakelib/undercover.rake +8 -0
  44. data/requirements_dev.txt +2 -0
  45. metadata +110 -29
  46. data/.ruby-version +0 -1
  47. data/.travis.yml +0 -22
  48. data/lib/tasks/clear_metrics.rake +0 -8
  49. data/lib/tasks/feature.rake +0 -9
  50. data/lib/tasks/quality.rake +0 -9
  51. data/lib/tasks/spec.rake +0 -9
@@ -11,17 +11,7 @@ module Checkoff
11
11
 
12
12
  extend Forwardable
13
13
 
14
- def file_task_by_section(current_section, by_section, task)
15
- if task.name =~ /:$/
16
- current_section = task.name
17
- by_section[current_section] = []
18
- else
19
- by_section[current_section] ||= []
20
- by_section[current_section] << task
21
- end
22
- [current_section, by_section]
23
- end
24
-
14
+ # pulls a Hash of subtasks broken out by section
25
15
  def by_section(tasks)
26
16
  current_section = nil
27
17
  by_section = {}
@@ -37,5 +27,18 @@ module Checkoff
37
27
  task.subtasks(projects.task_options)
38
28
  end
39
29
  cache_method :raw_subtasks, LONG_CACHE_TIME
30
+
31
+ private
32
+
33
+ def file_task_by_section(current_section, by_section, task)
34
+ if task.name =~ /:$/
35
+ current_section = task.name
36
+ by_section[current_section] = []
37
+ else
38
+ by_section[current_section] ||= []
39
+ by_section[current_section] << task
40
+ end
41
+ [current_section, by_section]
42
+ end
40
43
  end
41
44
  end
@@ -5,7 +5,7 @@
5
5
  require_relative 'sections'
6
6
 
7
7
  module Checkoff
8
- # Pull things from 'my tasks' in Asana
8
+ # Pull tasks from Asana
9
9
  class Tasks
10
10
  MINUTE = 60
11
11
  HOUR = MINUTE * 60
@@ -22,25 +22,20 @@ module Checkoff
22
22
  @asana_task = asana_task
23
23
  end
24
24
 
25
- def client
26
- @sections.client
27
- end
28
-
29
- def projects
30
- @projects ||= @sections.projects
31
- end
32
-
33
- def task(workspace_name, project_name, task_name, only_uncompleted: true)
25
+ # Pull a specific task by name
26
+ def task(workspace_name, project_name, task_name,
27
+ section_name: :unspecified,
28
+ only_uncompleted: true)
34
29
  project = projects.project(workspace_name, project_name)
35
- tasks = projects.tasks_from_project(project,
36
- only_uncompleted: only_uncompleted)
30
+ tasks = if section_name == :unspecified
31
+ projects.tasks_from_project(project,
32
+ only_uncompleted: only_uncompleted)
33
+ else
34
+ @sections.tasks(workspace_name, project_name, section_name)
35
+ end
37
36
  tasks.find { |task| task.name == task_name }
38
37
  end
39
38
 
40
- def tasks_minus_sections(tasks)
41
- @sections.by_section(tasks).values.flatten
42
- end
43
-
44
39
  def add_task(name,
45
40
  workspace_gid: default_workspace_gid,
46
41
  assignee_gid: default_assignee_gid)
@@ -49,6 +44,20 @@ module Checkoff
49
44
  workspace: workspace_gid, name: name)
50
45
  end
51
46
 
47
+ private
48
+
49
+ def client
50
+ @sections.client
51
+ end
52
+
53
+ def projects
54
+ @projects ||= @sections.projects
55
+ end
56
+
57
+ def tasks_minus_sections(tasks)
58
+ @sections.by_section(tasks).values.flatten
59
+ end
60
+
52
61
  def default_assignee_gid
53
62
  @config.fetch(:default_assignee_gid)
54
63
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Checkoff
4
- VERSION = '0.7.0'
4
+ # Version of library
5
+ VERSION = '0.11.1'
5
6
  end
@@ -9,21 +9,26 @@ module Checkoff
9
9
  @asana_client = asana_client
10
10
  end
11
11
 
12
+ # Returns Asana Ruby API Client object
12
13
  def client
13
14
  @client ||= @asana_client.new do |c|
14
15
  c.authentication :access_token, @config.fetch(:personal_access_token)
15
16
  c.default_headers 'asana-enable' => 'string_ids,new_sections'
17
+ c.default_headers 'asana-disable' => 'new_user_task_lists'
16
18
  end
17
19
  end
18
20
 
19
- def default_workspace_gid
20
- @config.fetch(:default_workspace_gid)
21
- end
22
-
21
+ # Pulls an Asana workspace object
23
22
  def workspace_by_name(workspace_name)
24
23
  client.workspaces.find_all.find do |workspace|
25
24
  workspace.name == workspace_name
26
- end || raise("Could not find workspace #{workspace_name}")
25
+ end || raise("Could not find workspace named [#{workspace_name}]")
26
+ end
27
+
28
+ private
29
+
30
+ def default_workspace_gid
31
+ @config.fetch(:default_workspace_gid)
27
32
  end
28
33
  end
29
34
  end
@@ -1 +1 @@
1
- 416
1
+ 488
@@ -1 +1 @@
1
- 4
1
+ 6
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  desc 'Run tasks to be done during a continuous integration (CI) build'
4
- task ci: :localtest
4
+ task citest: %i[clear_metrics test undercover]
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Ensure that any locally ratcheted coverage metrics are cleared back ' \
4
+ 'to git baseline'
5
+ task :clear_metrics do |_t|
6
+ ret =
7
+ system('git checkout coverage/.last_run.json')
8
+ raise unless ret
9
+
10
+ # Without this old lines which are removed are still counted,
11
+ # leading to inconsistent coverage percentages between runs.
12
+ #
13
+ # need to save coverage/.last_run.json
14
+ ret =
15
+ system('rm -fr coverage/assets coverage/.*.json.lock coverage/lcov/* coverage/index.html coverage/.resultset.json')
16
+ raise unless ret
17
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  desc 'Standard build when running on a workstation'
4
- task localtest: %i[clear_metrics test quality]
4
+ task localtest: %i[clear_metrics test undercover quality]
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Run overcommit on current code'
4
+ task :overcommit do
5
+ sh 'overcommit --run'
6
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Run quality checks'
4
+ task quality: :overcommit
File without changes
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Ensure PR changes are fully covered by tests'
4
+ task :undercover do |_t|
5
+ ret =
6
+ system('undercover --compare origin/main')
7
+ raise unless ret
8
+ end
@@ -0,0 +1,2 @@
1
+ pip==21.0.1
2
+ yamllint==1.26.0
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.7.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-04 00:00:00.000000000 Z
11
+ date: 2021-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -67,7 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: bundler
70
+ name: gli
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bump
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: minitest-profile
98
+ name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: mocha
112
+ name: minitest-profile
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: overcommit
126
+ name: mocha
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -123,19 +137,19 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: quality
140
+ name: overcommit
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - "~>"
143
+ - - ">="
130
144
  - !ruby/object:Gem::Version
131
- version: '38'
145
+ version: 0.58.0
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - "~>"
150
+ - - ">="
137
151
  - !ruby/object:Gem::Version
138
- version: '38'
152
+ version: 0.58.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -151,19 +165,47 @@ dependencies:
151
165
  - !ruby/object:Gem::Version
152
166
  version: '13.0'
153
167
  - !ruby/object:Gem::Dependency
154
- name: rspec
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-minitest
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
158
186
  - !ruby/object:Gem::Version
159
- version: '3.4'
187
+ version: '0'
160
188
  type: :development
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - ">="
165
193
  - !ruby/object:Gem::Version
166
- version: '3.4'
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-rake
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: simplecov
169
211
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +220,34 @@ dependencies:
178
220
  - - ">="
179
221
  - !ruby/object:Gem::Version
180
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: simplecov-lcov
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: undercover
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
181
251
  description:
182
252
  email:
183
253
  - vince@broz.cc
@@ -187,23 +257,32 @@ extensions: []
187
257
  extra_rdoc_files: []
188
258
  files:
189
259
  - ".circleci/config.yml"
260
+ - ".envrc"
261
+ - ".git-hooks/pre_commit/circle_ci.rb"
190
262
  - ".gitignore"
191
263
  - ".overcommit.yml"
192
264
  - ".rubocop.yml"
193
- - ".ruby-version"
194
- - ".travis.yml"
265
+ - ".yamllint.yml"
195
266
  - CODE_OF_CONDUCT.md
267
+ - DEVELOPMENT.md
196
268
  - Gemfile
197
- - LICENSE.txt
269
+ - Gemfile.lock
270
+ - LICENSE
198
271
  - Makefile
199
272
  - README.md
200
273
  - Rakefile
274
+ - bin/bump
275
+ - bin/checkoff
201
276
  - bin/console
277
+ - bin/overcommit
278
+ - bin/rake
202
279
  - bin/setup
203
280
  - checkoff.gemspec
204
281
  - coverage/.last_run.json
282
+ - docs/cookiecutter_input.json
205
283
  - docs/example_project.png
206
284
  - exe/checkoff
285
+ - fix.sh
207
286
  - lib/checkoff.rb
208
287
  - lib/checkoff/cli.rb
209
288
  - lib/checkoff/config_loader.rb
@@ -213,14 +292,6 @@ files:
213
292
  - lib/checkoff/tasks.rb
214
293
  - lib/checkoff/version.rb
215
294
  - lib/checkoff/workspaces.rb
216
- - lib/tasks/ci.rake
217
- - lib/tasks/clear_metrics.rake
218
- - lib/tasks/default.rake
219
- - lib/tasks/feature.rake
220
- - lib/tasks/localtest.rake
221
- - lib/tasks/quality.rake
222
- - lib/tasks/spec.rake
223
- - lib/tasks/test.rake
224
295
  - metrics/bigfiles_high_water_mark
225
296
  - metrics/brakeman_high_water_mark
226
297
  - metrics/bundle-audit_high_water_mark
@@ -238,9 +309,19 @@ files:
238
309
  - metrics/rubocop_high_water_mark
239
310
  - metrics/scalastyle_high_water_mark
240
311
  - metrics/shellcheck_high_water_mark
241
- homepage: http://github.com/apiology/checkoff
312
+ - rakelib/citest.rake
313
+ - rakelib/clear_metrics.rake
314
+ - rakelib/default.rake
315
+ - rakelib/gem_tasks.rake
316
+ - rakelib/localtest.rake
317
+ - rakelib/overcommit.rake
318
+ - rakelib/quality.rake
319
+ - rakelib/test.rake
320
+ - rakelib/undercover.rake
321
+ - requirements_dev.txt
322
+ homepage: https://github.com/apiology/checkoff
242
323
  licenses:
243
- - MIT
324
+ - MIT license
244
325
  metadata: {}
245
326
  post_install_message:
246
327
  rdoc_options: []
@@ -250,14 +331,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
331
  requirements:
251
332
  - - ">="
252
333
  - !ruby/object:Gem::Version
253
- version: '2.5'
334
+ version: '2.6'
254
335
  required_rubygems_version: !ruby/object:Gem::Requirement
255
336
  requirements:
256
337
  - - ">="
257
338
  - !ruby/object:Gem::Version
258
339
  version: '0'
259
340
  requirements: []
260
- rubygems_version: 3.0.3
341
+ rubygems_version: 3.0.3.1
261
342
  signing_key:
262
343
  specification_version: 4
263
344
  summary: Command-line and gem client for Asana (unofficial)