checkoff 0.7.0 → 0.11.1

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 +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)