checkoff 0.223.0 → 0.226.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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/checkoff.gemspec +10 -5
  3. data/lib/checkoff/attachments.rb +1 -1
  4. data/lib/checkoff/cli.rb +1 -1
  5. data/lib/checkoff/clients.rb +1 -1
  6. data/lib/checkoff/custom_fields.rb +1 -1
  7. data/lib/checkoff/events.rb +1 -1
  8. data/lib/checkoff/internal/config_loader.rb +2 -3
  9. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +3 -2
  10. data/lib/checkoff/my_tasks.rb +1 -1
  11. data/lib/checkoff/portfolios.rb +11 -9
  12. data/lib/checkoff/projects.rb +1 -1
  13. data/lib/checkoff/sections.rb +4 -5
  14. data/lib/checkoff/tags.rb +66 -17
  15. data/lib/checkoff/tasks.rb +1 -1
  16. data/lib/checkoff/version.rb +1 -1
  17. data/lib/checkoff/workspaces.rb +1 -1
  18. data/rbi/checkoff.rbi +4529 -0
  19. data/sig/checkoff.rbs +3749 -0
  20. metadata +5 -211
  21. data/.circleci/config.yml +0 -291
  22. data/.envrc +0 -9
  23. data/.git-hooks/pre_commit/circle_ci.rb +0 -26
  24. data/.git-hooks/pre_commit/punchlist.rb +0 -52
  25. data/.git-hooks/pre_commit/solargraph_typecheck.rb +0 -77
  26. data/.gitattributes +0 -6
  27. data/.gitignore +0 -65
  28. data/.markdownlint_style.rb +0 -4
  29. data/.mdlrc +0 -1
  30. data/.overcommit.yml +0 -115
  31. data/.rubocop.yml +0 -143
  32. data/.rubocop_todo.yml +0 -90
  33. data/.solargraph.yml +0 -35
  34. data/.yamllint.yml +0 -8
  35. data/.yardopts +0 -2
  36. data/CODE_OF_CONDUCT.md +0 -133
  37. data/CONTRIBUTING.rst +0 -75
  38. data/DEVELOPMENT.md +0 -69
  39. data/GLOSSARY.md +0 -16
  40. data/Gemfile +0 -67
  41. data/Gemfile.lock +0 -351
  42. data/LICENSE +0 -21
  43. data/Makefile +0 -139
  44. data/bin/brakeman +0 -27
  45. data/bin/bump +0 -29
  46. data/bin/checkoff +0 -29
  47. data/bin/console +0 -15
  48. data/bin/overcommit +0 -29
  49. data/bin/overcommit_branch +0 -114
  50. data/bin/rake +0 -29
  51. data/bin/rubocop +0 -27
  52. data/bin/setup +0 -8
  53. data/bin/solargraph +0 -27
  54. data/bin/sord +0 -27
  55. data/bin/spoom +0 -27
  56. data/bin/srb +0 -27
  57. data/bin/srb-rbi +0 -27
  58. data/bin/tapioca +0 -27
  59. data/bin/yard +0 -27
  60. data/config/annotations_asana.rb +0 -253
  61. data/config/annotations_misc.rb +0 -68
  62. data/config/env.1p +0 -2
  63. data/docs/.gitignore +0 -3
  64. data/docs/cookiecutter_input.json +0 -17
  65. data/docs/example_project.png +0 -0
  66. data/fix.sh +0 -534
  67. data/metrics/bigfiles_high_water_mark +0 -1
  68. data/metrics/brakeman_high_water_mark +0 -1
  69. data/metrics/bundle-audit_high_water_mark +0 -1
  70. data/metrics/cane_high_water_mark +0 -1
  71. data/metrics/eslint_high_water_mark +0 -1
  72. data/metrics/flake8_high_water_mark +0 -1
  73. data/metrics/flay_high_water_mark +0 -1
  74. data/metrics/flog_high_water_mark +0 -1
  75. data/metrics/jscs_high_water_mark +0 -1
  76. data/metrics/mdl_high_water_mark +0 -1
  77. data/metrics/pep8_high_water_mark +0 -1
  78. data/metrics/punchlist_high_water_mark +0 -1
  79. data/metrics/pycodestyle_high_water_mark +0 -1
  80. data/metrics/rails_best_practices_high_water_mark +0 -1
  81. data/metrics/rubocop_high_water_mark +0 -1
  82. data/metrics/scalastyle_high_water_mark +0 -1
  83. data/metrics/shellcheck_high_water_mark +0 -1
  84. data/package.json +0 -9
  85. data/rakelib/citest.rake +0 -4
  86. data/rakelib/clear_metrics.rake +0 -9
  87. data/rakelib/console.rake +0 -15
  88. data/rakelib/default.rake +0 -4
  89. data/rakelib/doc.rake +0 -6
  90. data/rakelib/gem_tasks.rake +0 -3
  91. data/rakelib/localtest.rake +0 -4
  92. data/rakelib/overcommit.rake +0 -6
  93. data/rakelib/quality.rake +0 -4
  94. data/rakelib/repl.rake +0 -4
  95. data/rakelib/test.rake +0 -10
  96. data/rakelib/trigger_next_builds.rake +0 -7
  97. data/rakelib/undercover.rake +0 -8
  98. data/requirements_dev.txt +0 -2
  99. data/sorbet/config +0 -4
  100. data/sorbet/rbi/annotations/.gitattributes +0 -1
  101. data/sorbet/rbi/annotations/activesupport.rbi +0 -453
  102. data/sorbet/rbi/annotations/faraday.rbi +0 -17
  103. data/sorbet/rbi/annotations/minitest.rbi +0 -119
  104. data/sorbet/rbi/annotations/mocha.rbi +0 -34
  105. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  106. data/sorbet/rbi/annotations/webmock.rbi +0 -9
  107. data/sorbet/rbi/dsl/.gitattributes +0 -1
  108. data/sorbet/rbi/dsl/active_support/callbacks.rbi +0 -23
  109. data/sorbet/rbi/gems/.gitattributes +0 -1
  110. data/sorbet/rbi/gems/activesupport@7.1.5.rbi +0 -18746
  111. data/sorbet/rbi/gems/addressable@2.8.6.rbi +0 -1994
  112. data/sorbet/rbi/gems/ansi@1.5.0.rbi +0 -688
  113. data/sorbet/rbi/gems/asana@0.10.6-ab9393136d9ca59b75e42a661fdddc1c65c8f7c3.rbi +0 -6142
  114. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -585
  115. data/sorbet/rbi/gems/backport@1.2.0.rbi +0 -523
  116. data/sorbet/rbi/gems/base64@0.2.0.rbi +0 -509
  117. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +0 -618
  118. data/sorbet/rbi/gems/bigdecimal@3.1.5.rbi +0 -78
  119. data/sorbet/rbi/gems/brakeman@6.2.2.rbi +0 -222
  120. data/sorbet/rbi/gems/builder@3.2.4.rbi +0 -505
  121. data/sorbet/rbi/gems/bump@0.10.0.rbi +0 -169
  122. data/sorbet/rbi/gems/cache@0.4.1.rbi +0 -211
  123. data/sorbet/rbi/gems/cache_method@0.2.7.rbi +0 -293
  124. data/sorbet/rbi/gems/chef-utils@18.3.0.rbi +0 -9
  125. data/sorbet/rbi/gems/childprocess@5.1.0.rbi +0 -383
  126. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -3427
  127. data/sorbet/rbi/gems/commander@4.6.0.rbi +0 -9
  128. data/sorbet/rbi/gems/concurrent-ruby@1.2.3.rbi +0 -11591
  129. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +0 -9
  130. data/sorbet/rbi/gems/crack@0.4.5.rbi +0 -145
  131. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +0 -969
  132. data/sorbet/rbi/gems/docile@1.4.0.rbi +0 -377
  133. data/sorbet/rbi/gems/drb@2.2.1.rbi +0 -1347
  134. data/sorbet/rbi/gems/e2mmap@0.1.0.rbi +0 -9
  135. data/sorbet/rbi/gems/erubi@1.13.0.rbi +0 -152
  136. data/sorbet/rbi/gems/faraday-em_http@1.0.0.rbi +0 -222
  137. data/sorbet/rbi/gems/faraday-em_synchrony@1.0.0.rbi +0 -126
  138. data/sorbet/rbi/gems/faraday-excon@1.1.0.rbi +0 -136
  139. data/sorbet/rbi/gems/faraday-httpclient@1.0.1.rbi +0 -145
  140. data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +0 -259
  141. data/sorbet/rbi/gems/faraday-net_http@1.0.1.rbi +0 -142
  142. data/sorbet/rbi/gems/faraday-net_http_persistent@1.2.0.rbi +0 -118
  143. data/sorbet/rbi/gems/faraday-patron@1.0.0.rbi +0 -125
  144. data/sorbet/rbi/gems/faraday-rack@1.0.0.rbi +0 -133
  145. data/sorbet/rbi/gems/faraday-retry@1.0.3.rbi +0 -198
  146. data/sorbet/rbi/gems/faraday@1.10.3.rbi +0 -2729
  147. data/sorbet/rbi/gems/faraday_middleware-multi_json@0.0.6.rbi +0 -29
  148. data/sorbet/rbi/gems/faraday_middleware@1.2.0.rbi +0 -1004
  149. data/sorbet/rbi/gems/gli@2.22.0.rbi +0 -9
  150. data/sorbet/rbi/gems/hashdiff@1.0.1.rbi +0 -351
  151. data/sorbet/rbi/gems/highline@2.0.3.rbi +0 -9
  152. data/sorbet/rbi/gems/i18n@1.14.6.rbi +0 -2359
  153. data/sorbet/rbi/gems/imagen@0.1.8.rbi +0 -340
  154. data/sorbet/rbi/gems/iniparse@1.5.0.rbi +0 -899
  155. data/sorbet/rbi/gems/jaro_winkler@1.6.0.rbi +0 -22
  156. data/sorbet/rbi/gems/json@2.7.1.rbi +0 -1562
  157. data/sorbet/rbi/gems/jwt@2.7.1.rbi +0 -1405
  158. data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +0 -128
  159. data/sorbet/rbi/gems/kramdown@2.4.0.rbi +0 -3272
  160. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14238
  161. data/sorbet/rbi/gems/logger@1.6.2.rbi +0 -923
  162. data/sorbet/rbi/gems/mdl@0.13.0.rbi +0 -445
  163. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -273
  164. data/sorbet/rbi/gems/mime-types-data@3.2023.1205.rbi +0 -127
  165. data/sorbet/rbi/gems/mime-types@3.5.1.rbi +0 -1252
  166. data/sorbet/rbi/gems/minitest-profile@0.0.2.rbi +0 -136
  167. data/sorbet/rbi/gems/minitest-reporters@1.6.1.rbi +0 -1014
  168. data/sorbet/rbi/gems/minitest@5.21.1.rbi +0 -1539
  169. data/sorbet/rbi/gems/mixlib-cli@2.1.8.rbi +0 -314
  170. data/sorbet/rbi/gems/mixlib-config@3.0.27.rbi +0 -581
  171. data/sorbet/rbi/gems/mixlib-shellout@3.2.7.rbi +0 -629
  172. data/sorbet/rbi/gems/mocha@2.1.0.rbi +0 -12
  173. data/sorbet/rbi/gems/multi_json@1.15.0.rbi +0 -268
  174. data/sorbet/rbi/gems/multi_xml@0.6.0.rbi +0 -102
  175. data/sorbet/rbi/gems/multipart-post@2.3.0.rbi +0 -234
  176. data/sorbet/rbi/gems/mutex_m@0.3.0.rbi +0 -97
  177. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -159
  178. data/sorbet/rbi/gems/nokogiri@1.17.0.rbi +0 -8201
  179. data/sorbet/rbi/gems/oauth2@1.4.11.rbi +0 -833
  180. data/sorbet/rbi/gems/overcommit@0.64.1.rbi +0 -2400
  181. data/sorbet/rbi/gems/parallel@1.23.0.rbi +0 -274
  182. data/sorbet/rbi/gems/parlour@5.0.0.rbi +0 -3007
  183. data/sorbet/rbi/gems/parser@3.2.2.4.rbi +0 -7253
  184. data/sorbet/rbi/gems/prism@1.2.0.rbi +0 -39085
  185. data/sorbet/rbi/gems/pry@0.14.2.rbi +0 -10070
  186. data/sorbet/rbi/gems/public_suffix@5.0.4.rbi +0 -936
  187. data/sorbet/rbi/gems/punchlist@1.3.2.rbi +0 -173
  188. data/sorbet/rbi/gems/racc@1.8.1.rbi +0 -162
  189. data/sorbet/rbi/gems/rack@3.1.8.rbi +0 -4896
  190. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -403
  191. data/sorbet/rbi/gems/rake@13.1.0.rbi +0 -3022
  192. data/sorbet/rbi/gems/rbi@0.2.1.rbi +0 -4535
  193. data/sorbet/rbi/gems/rbs@2.8.4.rbi +0 -5613
  194. data/sorbet/rbi/gems/regexp_parser@2.8.3.rbi +0 -3750
  195. data/sorbet/rbi/gems/reverse_markdown@2.1.1.rbi +0 -390
  196. data/sorbet/rbi/gems/rexml@3.3.9.rbi +0 -4964
  197. data/sorbet/rbi/gems/rubocop-ast@1.30.0.rbi +0 -7127
  198. data/sorbet/rbi/gems/rubocop-minitest@0.34.5.rbi +0 -2577
  199. data/sorbet/rbi/gems/rubocop-performance@1.20.2.rbi +0 -3262
  200. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +0 -329
  201. data/sorbet/rbi/gems/rubocop-rspec@3.0.0.rbi +0 -7546
  202. data/sorbet/rbi/gems/rubocop@1.59.0.rbi +0 -57238
  203. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1318
  204. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +0 -9
  205. data/sorbet/rbi/gems/rugged@1.6.3.rbi +0 -1577
  206. data/sorbet/rbi/gems/securerandom@0.4.0.rbi +0 -75
  207. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +0 -217
  208. data/sorbet/rbi/gems/simplecov-lcov@0.8.0.rbi +0 -256
  209. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +0 -2149
  210. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +0 -9
  211. data/sorbet/rbi/gems/solargraph-rails@1.1.0-9dc37915bd4f3b169046e34db6fb32193ab347d8.rbi +0 -320
  212. data/sorbet/rbi/gems/solargraph@0.50.1-904b9304770a59fac393c5cc3cad481e5bdf0fd8.rbi +0 -9396
  213. data/sorbet/rbi/gems/sord@5.1.0.rbi +0 -820
  214. data/sorbet/rbi/gems/source_finder@3.2.1.rbi +0 -317
  215. data/sorbet/rbi/gems/spoom@1.5.0.rbi +0 -4932
  216. data/sorbet/rbi/gems/tapioca@0.16.5.rbi +0 -3617
  217. data/sorbet/rbi/gems/thor@1.3.2.rbi +0 -4378
  218. data/sorbet/rbi/gems/tilt@2.4.0.rbi +0 -933
  219. data/sorbet/rbi/gems/tomlrb@2.0.3.rbi +0 -9
  220. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +0 -5918
  221. data/sorbet/rbi/gems/undercover@0.5.0.rbi +0 -433
  222. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +0 -66
  223. data/sorbet/rbi/gems/webmock@3.19.1.rbi +0 -1769
  224. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +0 -435
  225. data/sorbet/rbi/gems/yard@0.9.37.rbi +0 -18406
  226. data/sorbet/rbi/todo.rbi +0 -11
  227. data/sorbet/tapioca/config.yml +0 -13
  228. 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: 92a9e8e8ca22cbfa31d1d4b02c941c20826db8e3e831f626f96500a12bc306a3
4
+ data.tar.gz: be53367a968bbf2d4ca1b6b18aada517c7254765d35f9ca8b6f9b6058445eb85
5
5
  SHA512:
6
- metadata.gz: d3093484531af641d774b6fd8e18f33f960d3cc21616a362be4d460d188ddfbc72300aa1befe41e92845d4a2a34153a6d18dd25e83e5b54f36718ba1192a4f0a
7
- data.tar.gz: e235b3bf48f544514a95a711b4d07e4ded2b529343d507e65bbab01cbcfd6c4e9b46df6b3ee6e39373d523df330b1adebbdd1389386dcd04ae253fce2e5e5e5c
6
+ metadata.gz: bbbf49ded9ca35770835d23ef89488fafff69e4500e91b2fa688b2b450df50178b827c50d2144e52fa58485bf71dde8762a014b1c3edee324b0d0600c613a828
7
+ data.tar.gz: bdc7f6e728ed13bdf96e9ab43448c8f201e5d42421f1d2141ba24c274667a22018b4e73dd145d267822ca7201767fe7fb78846bc35c7ba372147e6be9d66b0de
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']
@@ -165,7 +165,7 @@ module Checkoff
165
165
  end
166
166
 
167
167
  # https://github.com/Asana/ruby-asana/blob/master/lib/asana/resource_includes/response_helper.rb#L7
168
- # @param response [Faraday::Response]
168
+ # @param response [Asana::HttpClient::Response]
169
169
  #
170
170
  # @return [Array<Hash, Hash>]
171
171
  def parse(response)
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]
@@ -231,7 +230,7 @@ module Checkoff
231
230
  include Logging
232
231
 
233
232
  # https://github.com/Asana/ruby-asana/blob/master/lib/asana/resource_includes/response_helper.rb#L7
234
- # @param response [Faraday::Response]
233
+ # @param response [Asana::HttpClient::Response]
235
234
  #
236
235
  # @return [Array<Hash, Hash>]
237
236
  def parse(response)
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.226.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),