checkoff 0.6.0 → 0.11.0

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