checkoff 0.6.0 → 0.11.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.
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 +53 -0
  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 +15 -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 -5
  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 +50 -4
  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 +18 -9
  31. data/lib/checkoff/version.rb +2 -1
  32. data/lib/checkoff/workspaces.rb +11 -6
  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 +121 -25
  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,6 +22,22 @@ module Checkoff
22
22
  @asana_task = asana_task
23
23
  end
24
24
 
25
+ # Pull a specific task by name
26
+ def task(workspace_name, project_name, task_name,
27
+ section_name: :unspecified,
28
+ only_uncompleted: true)
29
+ project = projects.project(workspace_name, project_name)
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
36
+ tasks.find { |task| task.name == task_name }
37
+ end
38
+
39
+ private
40
+
25
41
  def client
26
42
  @sections.client
27
43
  end
@@ -30,13 +46,6 @@ module Checkoff
30
46
  @projects ||= @sections.projects
31
47
  end
32
48
 
33
- def task(workspace_name, project_name, task_name, only_uncompleted: true)
34
- project = projects.project(workspace_name, project_name)
35
- tasks = projects.tasks_from_project(project,
36
- only_uncompleted: only_uncompleted)
37
- tasks.find { |task| task.name == task_name }
38
- end
39
-
40
49
  def tasks_minus_sections(tasks)
41
50
  @sections.by_section(tasks).values.flatten
42
51
  end
@@ -50,7 +59,7 @@ module Checkoff
50
59
  end
51
60
 
52
61
  def default_assignee_gid
53
- @config[:default_assignee_gid]
62
+ @config.fetch(:default_assignee_gid)
54
63
  end
55
64
  end
56
65
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Checkoff
4
- VERSION = '0.6.0'
4
+ # Version of library
5
+ VERSION = '0.11.0'
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
- c.authentication :access_token, @config[:personal_access_token]
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[: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
- 414
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.6.0
4
+ version: 0.11.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: 2021-01-22 00:00:00.000000000 Z
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
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
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: bundler
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -109,19 +137,19 @@ dependencies:
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: quality
140
+ name: overcommit
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - "~>"
143
+ - - ">="
116
144
  - !ruby/object:Gem::Version
117
- version: '38'
145
+ version: 0.58.0
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - "~>"
150
+ - - ">="
123
151
  - !ruby/object:Gem::Version
124
- version: '38'
152
+ version: 0.58.0
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: rake
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -137,19 +165,47 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '13.0'
139
167
  - !ruby/object:Gem::Dependency
140
- 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
141
183
  requirement: !ruby/object:Gem::Requirement
142
184
  requirements:
143
185
  - - ">="
144
186
  - !ruby/object:Gem::Version
145
- version: '3.4'
187
+ version: '0'
146
188
  type: :development
147
189
  prerelease: false
148
190
  version_requirements: !ruby/object:Gem::Requirement
149
191
  requirements:
150
192
  - - ">="
151
193
  - !ruby/object:Gem::Version
152
- 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'
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: simplecov
155
211
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +220,34 @@ dependencies:
164
220
  - - ">="
165
221
  - !ruby/object:Gem::Version
166
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'
167
251
  description:
168
252
  email:
169
253
  - vince@broz.cc
@@ -173,22 +257,32 @@ extensions: []
173
257
  extra_rdoc_files: []
174
258
  files:
175
259
  - ".circleci/config.yml"
260
+ - ".envrc"
261
+ - ".git-hooks/pre_commit/circle_ci.rb"
176
262
  - ".gitignore"
263
+ - ".overcommit.yml"
177
264
  - ".rubocop.yml"
178
- - ".ruby-version"
179
- - ".travis.yml"
265
+ - ".yamllint.yml"
180
266
  - CODE_OF_CONDUCT.md
267
+ - DEVELOPMENT.md
181
268
  - Gemfile
182
- - LICENSE.txt
269
+ - Gemfile.lock
270
+ - LICENSE
183
271
  - Makefile
184
272
  - README.md
185
273
  - Rakefile
274
+ - bin/bump
275
+ - bin/checkoff
186
276
  - bin/console
277
+ - bin/overcommit
278
+ - bin/rake
187
279
  - bin/setup
188
280
  - checkoff.gemspec
189
281
  - coverage/.last_run.json
282
+ - docs/cookiecutter_input.json
190
283
  - docs/example_project.png
191
284
  - exe/checkoff
285
+ - fix.sh
192
286
  - lib/checkoff.rb
193
287
  - lib/checkoff/cli.rb
194
288
  - lib/checkoff/config_loader.rb
@@ -198,14 +292,6 @@ files:
198
292
  - lib/checkoff/tasks.rb
199
293
  - lib/checkoff/version.rb
200
294
  - lib/checkoff/workspaces.rb
201
- - lib/tasks/ci.rake
202
- - lib/tasks/clear_metrics.rake
203
- - lib/tasks/default.rake
204
- - lib/tasks/feature.rake
205
- - lib/tasks/localtest.rake
206
- - lib/tasks/quality.rake
207
- - lib/tasks/spec.rake
208
- - lib/tasks/test.rake
209
295
  - metrics/bigfiles_high_water_mark
210
296
  - metrics/brakeman_high_water_mark
211
297
  - metrics/bundle-audit_high_water_mark
@@ -223,9 +309,19 @@ files:
223
309
  - metrics/rubocop_high_water_mark
224
310
  - metrics/scalastyle_high_water_mark
225
311
  - metrics/shellcheck_high_water_mark
226
- 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
227
323
  licenses:
228
- - MIT
324
+ - MIT license
229
325
  metadata: {}
230
326
  post_install_message:
231
327
  rdoc_options: []
@@ -235,14 +331,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
235
331
  requirements:
236
332
  - - ">="
237
333
  - !ruby/object:Gem::Version
238
- version: '2.5'
334
+ version: '2.6'
239
335
  required_rubygems_version: !ruby/object:Gem::Requirement
240
336
  requirements:
241
337
  - - ">="
242
338
  - !ruby/object:Gem::Version
243
339
  version: '0'
244
340
  requirements: []
245
- rubygems_version: 3.0.3
341
+ rubygems_version: 3.0.3.1
246
342
  signing_key:
247
343
  specification_version: 4
248
344
  summary: Command-line and gem client for Asana (unofficial)