checkoff 0.223.0 → 0.225.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 (227) hide show
  1. checksums.yaml +4 -4
  2. data/checkoff.gemspec +10 -5
  3. data/lib/checkoff/cli.rb +1 -1
  4. data/lib/checkoff/clients.rb +1 -1
  5. data/lib/checkoff/custom_fields.rb +1 -1
  6. data/lib/checkoff/events.rb +1 -1
  7. data/lib/checkoff/internal/config_loader.rb +2 -3
  8. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +3 -2
  9. data/lib/checkoff/my_tasks.rb +1 -1
  10. data/lib/checkoff/portfolios.rb +11 -9
  11. data/lib/checkoff/projects.rb +1 -1
  12. data/lib/checkoff/sections.rb +3 -4
  13. data/lib/checkoff/tags.rb +66 -17
  14. data/lib/checkoff/tasks.rb +1 -1
  15. data/lib/checkoff/version.rb +1 -1
  16. data/lib/checkoff/workspaces.rb +1 -1
  17. data/rbi/checkoff.rbi +4529 -0
  18. data/sig/checkoff.rbs +3749 -0
  19. metadata +4 -210
  20. data/.circleci/config.yml +0 -291
  21. data/.envrc +0 -9
  22. data/.git-hooks/pre_commit/circle_ci.rb +0 -26
  23. data/.git-hooks/pre_commit/punchlist.rb +0 -52
  24. data/.git-hooks/pre_commit/solargraph_typecheck.rb +0 -77
  25. data/.gitattributes +0 -6
  26. data/.gitignore +0 -65
  27. data/.markdownlint_style.rb +0 -4
  28. data/.mdlrc +0 -1
  29. data/.overcommit.yml +0 -115
  30. data/.rubocop.yml +0 -143
  31. data/.rubocop_todo.yml +0 -90
  32. data/.solargraph.yml +0 -35
  33. data/.yamllint.yml +0 -8
  34. data/.yardopts +0 -2
  35. data/CODE_OF_CONDUCT.md +0 -133
  36. data/CONTRIBUTING.rst +0 -75
  37. data/DEVELOPMENT.md +0 -69
  38. data/GLOSSARY.md +0 -16
  39. data/Gemfile +0 -67
  40. data/Gemfile.lock +0 -351
  41. data/LICENSE +0 -21
  42. data/Makefile +0 -139
  43. data/bin/brakeman +0 -27
  44. data/bin/bump +0 -29
  45. data/bin/checkoff +0 -29
  46. data/bin/console +0 -15
  47. data/bin/overcommit +0 -29
  48. data/bin/overcommit_branch +0 -114
  49. data/bin/rake +0 -29
  50. data/bin/rubocop +0 -27
  51. data/bin/setup +0 -8
  52. data/bin/solargraph +0 -27
  53. data/bin/sord +0 -27
  54. data/bin/spoom +0 -27
  55. data/bin/srb +0 -27
  56. data/bin/srb-rbi +0 -27
  57. data/bin/tapioca +0 -27
  58. data/bin/yard +0 -27
  59. data/config/annotations_asana.rb +0 -253
  60. data/config/annotations_misc.rb +0 -68
  61. data/config/env.1p +0 -2
  62. data/docs/.gitignore +0 -3
  63. data/docs/cookiecutter_input.json +0 -17
  64. data/docs/example_project.png +0 -0
  65. data/fix.sh +0 -534
  66. data/metrics/bigfiles_high_water_mark +0 -1
  67. data/metrics/brakeman_high_water_mark +0 -1
  68. data/metrics/bundle-audit_high_water_mark +0 -1
  69. data/metrics/cane_high_water_mark +0 -1
  70. data/metrics/eslint_high_water_mark +0 -1
  71. data/metrics/flake8_high_water_mark +0 -1
  72. data/metrics/flay_high_water_mark +0 -1
  73. data/metrics/flog_high_water_mark +0 -1
  74. data/metrics/jscs_high_water_mark +0 -1
  75. data/metrics/mdl_high_water_mark +0 -1
  76. data/metrics/pep8_high_water_mark +0 -1
  77. data/metrics/punchlist_high_water_mark +0 -1
  78. data/metrics/pycodestyle_high_water_mark +0 -1
  79. data/metrics/rails_best_practices_high_water_mark +0 -1
  80. data/metrics/rubocop_high_water_mark +0 -1
  81. data/metrics/scalastyle_high_water_mark +0 -1
  82. data/metrics/shellcheck_high_water_mark +0 -1
  83. data/package.json +0 -9
  84. data/rakelib/citest.rake +0 -4
  85. data/rakelib/clear_metrics.rake +0 -9
  86. data/rakelib/console.rake +0 -15
  87. data/rakelib/default.rake +0 -4
  88. data/rakelib/doc.rake +0 -6
  89. data/rakelib/gem_tasks.rake +0 -3
  90. data/rakelib/localtest.rake +0 -4
  91. data/rakelib/overcommit.rake +0 -6
  92. data/rakelib/quality.rake +0 -4
  93. data/rakelib/repl.rake +0 -4
  94. data/rakelib/test.rake +0 -10
  95. data/rakelib/trigger_next_builds.rake +0 -7
  96. data/rakelib/undercover.rake +0 -8
  97. data/requirements_dev.txt +0 -2
  98. data/sorbet/config +0 -4
  99. data/sorbet/rbi/annotations/.gitattributes +0 -1
  100. data/sorbet/rbi/annotations/activesupport.rbi +0 -453
  101. data/sorbet/rbi/annotations/faraday.rbi +0 -17
  102. data/sorbet/rbi/annotations/minitest.rbi +0 -119
  103. data/sorbet/rbi/annotations/mocha.rbi +0 -34
  104. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  105. data/sorbet/rbi/annotations/webmock.rbi +0 -9
  106. data/sorbet/rbi/dsl/.gitattributes +0 -1
  107. data/sorbet/rbi/dsl/active_support/callbacks.rbi +0 -23
  108. data/sorbet/rbi/gems/.gitattributes +0 -1
  109. data/sorbet/rbi/gems/activesupport@7.1.5.rbi +0 -18746
  110. data/sorbet/rbi/gems/addressable@2.8.6.rbi +0 -1994
  111. data/sorbet/rbi/gems/ansi@1.5.0.rbi +0 -688
  112. data/sorbet/rbi/gems/asana@0.10.6-ab9393136d9ca59b75e42a661fdddc1c65c8f7c3.rbi +0 -6142
  113. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -585
  114. data/sorbet/rbi/gems/backport@1.2.0.rbi +0 -523
  115. data/sorbet/rbi/gems/base64@0.2.0.rbi +0 -509
  116. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +0 -618
  117. data/sorbet/rbi/gems/bigdecimal@3.1.5.rbi +0 -78
  118. data/sorbet/rbi/gems/brakeman@6.2.2.rbi +0 -222
  119. data/sorbet/rbi/gems/builder@3.2.4.rbi +0 -505
  120. data/sorbet/rbi/gems/bump@0.10.0.rbi +0 -169
  121. data/sorbet/rbi/gems/cache@0.4.1.rbi +0 -211
  122. data/sorbet/rbi/gems/cache_method@0.2.7.rbi +0 -293
  123. data/sorbet/rbi/gems/chef-utils@18.3.0.rbi +0 -9
  124. data/sorbet/rbi/gems/childprocess@5.1.0.rbi +0 -383
  125. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3427
  126. data/sorbet/rbi/gems/commander@4.6.0.rbi +0 -9
  127. data/sorbet/rbi/gems/concurrent-ruby@1.2.3.rbi +0 -11591
  128. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +0 -9
  129. data/sorbet/rbi/gems/crack@0.4.5.rbi +0 -145
  130. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +0 -969
  131. data/sorbet/rbi/gems/docile@1.4.0.rbi +0 -377
  132. data/sorbet/rbi/gems/drb@2.2.1.rbi +0 -1347
  133. data/sorbet/rbi/gems/e2mmap@0.1.0.rbi +0 -9
  134. data/sorbet/rbi/gems/erubi@1.13.0.rbi +0 -152
  135. data/sorbet/rbi/gems/faraday-em_http@1.0.0.rbi +0 -222
  136. data/sorbet/rbi/gems/faraday-em_synchrony@1.0.0.rbi +0 -126
  137. data/sorbet/rbi/gems/faraday-excon@1.1.0.rbi +0 -136
  138. data/sorbet/rbi/gems/faraday-httpclient@1.0.1.rbi +0 -145
  139. data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +0 -259
  140. data/sorbet/rbi/gems/faraday-net_http@1.0.1.rbi +0 -142
  141. data/sorbet/rbi/gems/faraday-net_http_persistent@1.2.0.rbi +0 -118
  142. data/sorbet/rbi/gems/faraday-patron@1.0.0.rbi +0 -125
  143. data/sorbet/rbi/gems/faraday-rack@1.0.0.rbi +0 -133
  144. data/sorbet/rbi/gems/faraday-retry@1.0.3.rbi +0 -198
  145. data/sorbet/rbi/gems/faraday@1.10.3.rbi +0 -2729
  146. data/sorbet/rbi/gems/faraday_middleware-multi_json@0.0.6.rbi +0 -29
  147. data/sorbet/rbi/gems/faraday_middleware@1.2.0.rbi +0 -1004
  148. data/sorbet/rbi/gems/gli@2.22.0.rbi +0 -9
  149. data/sorbet/rbi/gems/hashdiff@1.0.1.rbi +0 -351
  150. data/sorbet/rbi/gems/highline@2.0.3.rbi +0 -9
  151. data/sorbet/rbi/gems/i18n@1.14.6.rbi +0 -2359
  152. data/sorbet/rbi/gems/imagen@0.1.8.rbi +0 -340
  153. data/sorbet/rbi/gems/iniparse@1.5.0.rbi +0 -899
  154. data/sorbet/rbi/gems/jaro_winkler@1.6.0.rbi +0 -22
  155. data/sorbet/rbi/gems/json@2.7.1.rbi +0 -1562
  156. data/sorbet/rbi/gems/jwt@2.7.1.rbi +0 -1405
  157. data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +0 -128
  158. data/sorbet/rbi/gems/kramdown@2.4.0.rbi +0 -3272
  159. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14238
  160. data/sorbet/rbi/gems/logger@1.6.2.rbi +0 -923
  161. data/sorbet/rbi/gems/mdl@0.13.0.rbi +0 -445
  162. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -273
  163. data/sorbet/rbi/gems/mime-types-data@3.2023.1205.rbi +0 -127
  164. data/sorbet/rbi/gems/mime-types@3.5.1.rbi +0 -1252
  165. data/sorbet/rbi/gems/minitest-profile@0.0.2.rbi +0 -136
  166. data/sorbet/rbi/gems/minitest-reporters@1.6.1.rbi +0 -1014
  167. data/sorbet/rbi/gems/minitest@5.21.1.rbi +0 -1539
  168. data/sorbet/rbi/gems/mixlib-cli@2.1.8.rbi +0 -314
  169. data/sorbet/rbi/gems/mixlib-config@3.0.27.rbi +0 -581
  170. data/sorbet/rbi/gems/mixlib-shellout@3.2.7.rbi +0 -629
  171. data/sorbet/rbi/gems/mocha@2.1.0.rbi +0 -12
  172. data/sorbet/rbi/gems/multi_json@1.15.0.rbi +0 -268
  173. data/sorbet/rbi/gems/multi_xml@0.6.0.rbi +0 -102
  174. data/sorbet/rbi/gems/multipart-post@2.3.0.rbi +0 -234
  175. data/sorbet/rbi/gems/mutex_m@0.3.0.rbi +0 -97
  176. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -159
  177. data/sorbet/rbi/gems/nokogiri@1.17.0.rbi +0 -8201
  178. data/sorbet/rbi/gems/oauth2@1.4.11.rbi +0 -833
  179. data/sorbet/rbi/gems/overcommit@0.64.1.rbi +0 -2400
  180. data/sorbet/rbi/gems/parallel@1.23.0.rbi +0 -274
  181. data/sorbet/rbi/gems/parlour@5.0.0.rbi +0 -3007
  182. data/sorbet/rbi/gems/parser@3.2.2.4.rbi +0 -7253
  183. data/sorbet/rbi/gems/prism@1.2.0.rbi +0 -39085
  184. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10070
  185. data/sorbet/rbi/gems/public_suffix@5.0.4.rbi +0 -936
  186. data/sorbet/rbi/gems/punchlist@1.3.2.rbi +0 -173
  187. data/sorbet/rbi/gems/racc@1.8.1.rbi +0 -162
  188. data/sorbet/rbi/gems/rack@3.1.8.rbi +0 -4896
  189. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -403
  190. data/sorbet/rbi/gems/rake@13.1.0.rbi +0 -3022
  191. data/sorbet/rbi/gems/rbi@0.2.1.rbi +0 -4535
  192. data/sorbet/rbi/gems/rbs@2.8.4.rbi +0 -5613
  193. data/sorbet/rbi/gems/regexp_parser@2.8.3.rbi +0 -3750
  194. data/sorbet/rbi/gems/reverse_markdown@2.1.1.rbi +0 -390
  195. data/sorbet/rbi/gems/rexml@3.3.9.rbi +0 -4964
  196. data/sorbet/rbi/gems/rubocop-ast@1.30.0.rbi +0 -7127
  197. data/sorbet/rbi/gems/rubocop-minitest@0.34.5.rbi +0 -2577
  198. data/sorbet/rbi/gems/rubocop-performance@1.20.2.rbi +0 -3262
  199. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +0 -329
  200. data/sorbet/rbi/gems/rubocop-rspec@3.0.0.rbi +0 -7546
  201. data/sorbet/rbi/gems/rubocop@1.59.0.rbi +0 -57238
  202. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1318
  203. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +0 -9
  204. data/sorbet/rbi/gems/rugged@1.6.3.rbi +0 -1577
  205. data/sorbet/rbi/gems/securerandom@0.4.0.rbi +0 -75
  206. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +0 -217
  207. data/sorbet/rbi/gems/simplecov-lcov@0.8.0.rbi +0 -256
  208. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +0 -2149
  209. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +0 -9
  210. data/sorbet/rbi/gems/solargraph-rails@1.1.0-9dc37915bd4f3b169046e34db6fb32193ab347d8.rbi +0 -320
  211. data/sorbet/rbi/gems/solargraph@0.50.1-904b9304770a59fac393c5cc3cad481e5bdf0fd8.rbi +0 -9396
  212. data/sorbet/rbi/gems/sord@5.1.0.rbi +0 -820
  213. data/sorbet/rbi/gems/source_finder@3.2.1.rbi +0 -317
  214. data/sorbet/rbi/gems/spoom@1.5.0.rbi +0 -4932
  215. data/sorbet/rbi/gems/tapioca@0.16.5.rbi +0 -3617
  216. data/sorbet/rbi/gems/thor@1.3.2.rbi +0 -4378
  217. data/sorbet/rbi/gems/tilt@2.4.0.rbi +0 -933
  218. data/sorbet/rbi/gems/tomlrb@2.0.3.rbi +0 -9
  219. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +0 -5918
  220. data/sorbet/rbi/gems/undercover@0.5.0.rbi +0 -433
  221. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +0 -66
  222. data/sorbet/rbi/gems/webmock@3.19.1.rbi +0 -1769
  223. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +0 -435
  224. data/sorbet/rbi/gems/yard@0.9.37.rbi +0 -18406
  225. data/sorbet/rbi/todo.rbi +0 -11
  226. data/sorbet/tapioca/config.yml +0 -13
  227. data/sorbet/tapioca/require.rb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 925f4d51063a064573aba674442739e5a5fbd0e1b117c4a8480b53a7ba494104
4
- data.tar.gz: 6ed947f526bd44c5ed8f8c0eb417dadd3c8c213d557931e294355fbdf1f858e9
3
+ metadata.gz: 2e7ecdc301e24da8bcdf4893c5eac31520410584cce13060481563caabf7deba
4
+ data.tar.gz: ef3ebc23874cc8bfdcac13b8e7ea58ead9c105fac7f9dc7293978488a6a8b432
5
5
  SHA512:
6
- metadata.gz: d3093484531af641d774b6fd8e18f33f960d3cc21616a362be4d460d188ddfbc72300aa1befe41e92845d4a2a34153a6d18dd25e83e5b54f36718ba1192a4f0a
7
- data.tar.gz: e235b3bf48f544514a95a711b4d07e4ded2b529343d507e65bbab01cbcfd6c4e9b46df6b3ee6e39373d523df330b1adebbdd1389386dcd04ae253fce2e5e5e5c
6
+ metadata.gz: 0c66ab40b991cda60fee2d3ca1badd2bee3b363a09cbffa346248ee32886c84c659f49b67badbba61749a003d7a7e5abf9a5263cd09f42fe5a4d9a962a80b252
7
+ data.tar.gz: 50b8cee8d14a8515222cd285041780eb2bcdab8a8835ca22ce9ab3ef9d608c89c942fb1416df851658f95e8c7dc47242ce637334023c9e2c59f5fd33a18f9bd4
data/checkoff.gemspec CHANGED
@@ -15,11 +15,16 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT license'
16
16
  spec.required_ruby_version = '>= 3.0'
17
17
 
18
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
- `git ls-files -z`.split("\x0").reject do |f|
20
- f.match(%r{^(test|spec|features)/})
21
- end
22
- end
18
+ spec.files = Dir['README.md',
19
+ 'Rakefile',
20
+ 'lib/checkoff.rb',
21
+ '{lib}/**/*',
22
+ 'sig/**/*.rbs',
23
+ 'sig/*.rbs',
24
+ 'rbi/**/*.rbi',
25
+ 'rbi/*.rbi',
26
+ '{exe}/*',
27
+ 'checkoff.gemspec']
23
28
  spec.bindir = 'exe'
24
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
30
  spec.require_paths = ['lib']
data/lib/checkoff/cli.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # typed: false
2
+ # typed: true
3
3
 
4
4
  # frozen_string_literal: true
5
5
 
@@ -19,7 +19,7 @@ module Checkoff
19
19
  LONG_CACHE_TIME = MINUTE * 15
20
20
  SHORT_CACHE_TIME = MINUTE
21
21
 
22
- # @param config [Hash]
22
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
23
23
  # @param asana_client_class [Class<Asana::Client>]
24
24
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
25
25
  asana_client_class: Asana::Client)
@@ -24,7 +24,7 @@ module Checkoff
24
24
  LONG_CACHE_TIME = MINUTE * 15
25
25
  SHORT_CACHE_TIME = MINUTE
26
26
 
27
- # @param config [Hash]
27
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
28
28
  # @param workspaces [Checkoff::Workspaces]
29
29
  # @param clients [Checkoff::Clients]
30
30
  # @param client [Asana::Client]
@@ -33,7 +33,7 @@ module Checkoff
33
33
  SHORT_CACHE_TIME = MINUTE
34
34
  private_constant :SHORT_CACHE_TIME
35
35
 
36
- # @param config [Hash]
36
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
37
37
  # @param workspaces [Checkoff::Workspaces]
38
38
  # @param tasks [Checkoff::Tasks]
39
39
  # @param sections [Checkoff::Sections]
@@ -1,4 +1,4 @@
1
- # typed: false
1
+ # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'yaml'
@@ -50,8 +50,7 @@ module Checkoff
50
50
  # Load configuration file
51
51
  class ConfigLoader
52
52
  class << self
53
- # @sg-ignore
54
- # @return [Hash<Symbol, Object>]
53
+ # @return [EnvFallbackConfigLoader]
55
54
  def load(sym)
56
55
  yaml_result = load_yaml_file(sym)
57
56
  EnvFallbackConfigLoader.new(yaml_result, sym, yaml_filename(sym))
@@ -1,4 +1,4 @@
1
- # typed: false
1
+ # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative '../function_evaluator'
@@ -11,10 +11,11 @@ module Checkoff
11
11
  # @param selector [Array<(Symbol, Array)>,String]
12
12
  # @param client [Asana::Client]
13
13
  # @param sections [Checkoff::Sections]
14
+ # @param kwargs [Hash]
14
15
  def initialize(selector:,
15
16
  sections:,
16
17
  client:,
17
- **)
18
+ **kwargs)
18
19
  @selector = selector
19
20
  @sections = sections
20
21
  @client = client
@@ -16,7 +16,7 @@ module Checkoff
16
16
  # @return [Checkoff::Projects]
17
17
  attr_reader :projects
18
18
 
19
- # @param config [Hash<Symbol, Object>]
19
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
20
20
  # @param client [Asana::Client]
21
21
  # @param projects [Checkoff::Projects]
22
22
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
@@ -9,23 +9,25 @@ require_relative 'internal/config_loader'
9
9
  require_relative 'workspaces'
10
10
  require_relative 'clients'
11
11
  require_relative 'projects'
12
+ require 'sorbet-runtime'
12
13
 
13
14
  # https://developers.asana.com/reference/portfolios
14
15
 
15
16
  module Checkoff
16
17
  # Pull portfolios from Asana
17
18
  class Portfolios
19
+ extend T::Sig
18
20
  # @!parse
19
21
  # extend CacheMethod::ClassMethods
20
22
 
21
23
  MINUTE = 60
22
- HOUR = MINUTE * 60
23
- DAY = 24 * HOUR
24
- REALLY_LONG_CACHE_TIME = HOUR * 1
25
- LONG_CACHE_TIME = MINUTE * 15
26
- SHORT_CACHE_TIME = MINUTE
24
+ HOUR = T.let(MINUTE * 60, Numeric)
25
+ DAY = T.let(24 * HOUR, Numeric)
26
+ REALLY_LONG_CACHE_TIME = T.let(HOUR * 1, Numeric)
27
+ LONG_CACHE_TIME = T.let(MINUTE * 15, Numeric)
28
+ SHORT_CACHE_TIME = T.let(MINUTE, Numeric)
27
29
 
28
- # @param config [Hash]
30
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
29
31
  # @param workspaces [Checkoff::Workspaces]
30
32
  # @param clients [Checkoff::Clients]
31
33
  # @param client [Asana::Client]
@@ -35,9 +37,9 @@ module Checkoff
35
37
  client: clients.client,
36
38
  projects: Checkoff::Projects.new(config: config, client: client),
37
39
  workspaces: Checkoff::Workspaces.new(config: config, client: client))
38
- @workspaces = workspaces
39
- @client = client
40
- @projects = projects
40
+ @workspaces = T.let(workspaces, Checkoff::Workspaces)
41
+ @client = T.let(client, Asana::Client)
42
+ @projects = T.let(projects, Checkoff::Projects)
41
43
  end
42
44
 
43
45
  # @param workspace_name [String]
@@ -33,7 +33,7 @@ module Checkoff
33
33
  # @!parse
34
34
  # extend CacheMethod::ClassMethods
35
35
 
36
- # @param config [Hash<Symbol, Object>]
36
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
37
37
  # @param client [Asana::Client]
38
38
  # @param workspaces [Checkoff::Workspaces]
39
39
  # @param project_hashes [Checkoff::Internal::ProjectHashes]
@@ -34,7 +34,7 @@ module Checkoff
34
34
  # @return [Checkoff::MyTasks]
35
35
  attr_reader :my_tasks
36
36
 
37
- # @param config [Hash<Symbol, Object>]
37
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
38
38
  # @param client [Asana::Client]
39
39
  # @param projects [Checkoff::Projects]
40
40
  # @param workspaces [Checkoff::Workspaces]
@@ -48,7 +48,8 @@ module Checkoff
48
48
  time: Time)
49
49
  @projects = projects
50
50
  @workspaces = workspaces
51
- @my_tasks = Checkoff::MyTasks.new(config: config, projects: projects, client: client)
51
+ @my_tasks = Checkoff::MyTasks
52
+ .new(config: config, projects: projects, client: client)
52
53
  @client = client
53
54
  @time = time
54
55
  end
@@ -112,8 +113,6 @@ module Checkoff
112
113
  client.tasks.get_tasks(section: section_gid, **options)
113
114
  end
114
115
 
115
- # XXX: Rename to section_tasks
116
- #
117
116
  # Pulls task objects from a specified section
118
117
  #
119
118
  # @param workspace_name [String]
data/lib/checkoff/tags.rb CHANGED
@@ -14,50 +14,81 @@ require_relative 'clients'
14
14
  module Checkoff
15
15
  # Work with tags in Asana
16
16
  class Tags
17
- MINUTE = 60
18
- HOUR = MINUTE * 60
19
- DAY = 24 * HOUR
20
- REALLY_LONG_CACHE_TIME = HOUR * 1
21
- LONG_CACHE_TIME = MINUTE * 15
22
- SHORT_CACHE_TIME = MINUTE
17
+ # @!parse
18
+ # extend CacheMethod::ClassMethods
23
19
 
20
+ MINUTE = 60
21
+ HOUR = T.let(MINUTE * 60, Numeric)
22
+ DAY = T.let(24 * HOUR, Numeric)
23
+ REALLY_LONG_CACHE_TIME = T.let(HOUR * 1, Numeric)
24
+ LONG_CACHE_TIME = T.let(MINUTE * 15, Numeric)
25
+ SHORT_CACHE_TIME = T.let(MINUTE, Numeric)
26
+
27
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
28
+ # @param clients [Checkoff::Clients]
29
+ # @param client [Asana::Client]
30
+ # @param projects [Checkoff::Projects]
31
+ # @param workspaces [Checkoff::Workspaces]
24
32
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
25
33
  clients: Checkoff::Clients.new(config: config),
26
34
  client: clients.client,
27
35
  projects: Checkoff::Projects.new(config: config, client: client),
28
36
  workspaces: Checkoff::Workspaces.new(config: config, client: client))
29
- @workspaces = workspaces
30
- @projects = projects
31
- @client = client
37
+ @workspaces = T.let(workspaces, Checkoff::Workspaces)
38
+ @projects = T.let(projects, Checkoff::Projects)
39
+ @client = T.let(client, Asana::Client)
32
40
  end
33
41
 
42
+ # @param workspace_name [String]
43
+ # @param tag_name [String]
44
+ # @param only_uncompleted [Boolean]
45
+ # @param extra_fields [Array<String>]
46
+ #
34
47
  # @return [Enumerable<Asana::Resources::Task>]
35
48
  def tasks(workspace_name, tag_name,
36
49
  only_uncompleted: true,
37
50
  extra_fields: [])
38
51
  tag = tag_or_raise(workspace_name, tag_name)
52
+ tag_gid = tag.gid
39
53
 
54
+ tasks_by_tag_gid(workspace_name, tag_gid,
55
+ only_uncompleted: only_uncompleted, extra_fields: extra_fields)
56
+ end
57
+
58
+ # @param workspace_name [String]
59
+ # @param tag_gid [String]
60
+ # @param only_uncompleted [Boolean]
61
+ # @param extra_fields [Array<String>]
62
+ #
63
+ # @return [Enumerable<Asana::Resources::Task>]
64
+ def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: [])
40
65
  options = projects.task_options(extra_fields: extra_fields,
41
66
  only_uncompleted: only_uncompleted)
42
-
43
67
  params = build_params(options)
44
-
45
- Asana::Resources::Collection.new(parse(client.get("/tags/#{tag.gid}/tasks",
68
+ Asana::Resources::Collection.new(parse(client.get("/tags/#{tag_gid}/tasks",
46
69
  params: params, options: options[:options])),
47
70
  type: Asana::Resources::Task,
48
71
  client: client)
49
72
  end
50
73
 
74
+ # @param workspace_name [String]
75
+ # @param tag_name [String]
76
+ #
51
77
  # @return [Asana::Resources::Tag]
52
78
  def tag_or_raise(workspace_name, tag_name)
53
- tag = tag(workspace_name, tag_name)
54
- raise "Could not find tag #{tag_name} under workspace #{workspace_name}." if tag.nil?
79
+ t = tag(workspace_name, tag_name)
55
80
 
56
- tag
81
+ raise "Could not find tag #{tag_name} under workspace #{workspace_name}." if t.nil?
82
+
83
+ t
57
84
  end
58
85
  cache_method :tag_or_raise, LONG_CACHE_TIME
59
86
 
87
+ # @param workspace_name [String]
88
+ # @param tag_name [String]
89
+ #
60
90
  # @return [Asana::Resources::Tag,nil]
91
+ # @sg-ignore
61
92
  def tag(workspace_name, tag_name)
62
93
  workspace = workspaces.workspace_or_raise(workspace_name)
63
94
  tags = client.tags.get_tags_for_workspace(workspace_gid: workspace.gid)
@@ -67,8 +98,17 @@ module Checkoff
67
98
 
68
99
  private
69
100
 
70
- attr_reader :workspaces, :projects, :client
71
-
101
+ # @return [Checkoff::Workspaces]
102
+ attr_reader :workspaces
103
+ # @return [Checkoff::Projects]
104
+ attr_reader :projects
105
+ # @return [Asana::Client]
106
+ attr_reader :client
107
+
108
+ # @param options [Hash<Symbol, Object>]
109
+ #
110
+ # @sg-ignore
111
+ # @return [Hash<Symbol, Object>]
72
112
  def build_params(options)
73
113
  { limit: options[:per_page], completed_since: options[:completed_since] }.reject do |_, v|
74
114
  v.nil? || Array(v).empty?
@@ -76,6 +116,10 @@ module Checkoff
76
116
  end
77
117
 
78
118
  # https://github.com/Asana/ruby-asana/blob/master/lib/asana/resource_includes/response_helper.rb#L7
119
+ #
120
+ # @param response [Asana::HttpClient::Response]
121
+ #
122
+ # @return [Array<Hash, Hash>]
79
123
  def parse(response)
80
124
  data = response.body.fetch('data')
81
125
  extra = response.body.except('data')
@@ -85,8 +129,13 @@ module Checkoff
85
129
  # bundle exec ./tags.rb
86
130
  # :nocov:
87
131
  class << self
132
+ # @return [void]
88
133
  def run
134
+ # @sg-ignore
135
+ # @type [String]
89
136
  workspace_name = ARGV[0] || raise('Please pass workspace name as first argument')
137
+ # @sg-ignore
138
+ # @type [String]
90
139
  tag_name = ARGV[1] || raise('Please pass tag name as second argument')
91
140
  tags = Checkoff::Tags.new
92
141
  tag = tags.tag_or_raise(workspace_name, tag_name)
@@ -32,7 +32,7 @@ module Checkoff
32
32
  LONG_CACHE_TIME = MINUTE * 15
33
33
  SHORT_CACHE_TIME = MINUTE * 5
34
34
 
35
- # @param config [Hash<Symbol, Object>]
35
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
36
36
  # @param client [Asana::Client]
37
37
  # @param workspaces [Checkoff::Workspaces]
38
38
  # @param sections [Checkoff::Sections]
@@ -4,5 +4,5 @@
4
4
  # Command-line and gem client for Asana (unofficial)
5
5
  module Checkoff
6
6
  # Version of library
7
- VERSION = '0.223.0'
7
+ VERSION = '0.225.0'
8
8
  end
@@ -22,7 +22,7 @@ module Checkoff
22
22
  # @!parse
23
23
  # extend CacheMethod::ClassMethods
24
24
 
25
- # @param config [Hash<Symbol, Object>]
25
+ # @param config [Checkoff::Internal::EnvFallbackConfigLoader]
26
26
  # @param client [Asana::Client]
27
27
  # @param asana_workspace [Class<Asana::Resources::Workspace>]
28
28
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),