checkoff 0.258.0 → 0.260.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +14 -15
  3. data/lib/checkoff/cli.rb +7 -12
  4. data/lib/checkoff/clients.rb +0 -2
  5. data/lib/checkoff/custom_fields.rb +13 -24
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +11 -21
  7. data/lib/checkoff/internal/asana_event_filter.rb +1 -5
  8. data/lib/checkoff/internal/config_loader.rb +0 -2
  9. data/lib/checkoff/internal/logging.rb +0 -2
  10. data/lib/checkoff/internal/project_hashes.rb +5 -4
  11. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +9 -10
  12. data/lib/checkoff/internal/search_url/custom_field_variant.rb +7 -2
  13. data/lib/checkoff/internal/search_url/date_param_converter.rb +13 -10
  14. data/lib/checkoff/internal/search_url/parser.rb +2 -7
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +1 -4
  16. data/lib/checkoff/internal/section_selector_evaluator.rb +1 -1
  17. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +2 -2
  18. data/lib/checkoff/internal/selector_classes/common.rb +2 -3
  19. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +9 -4
  20. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +2 -2
  21. data/lib/checkoff/internal/selector_classes/project.rb +0 -1
  22. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +2 -2
  23. data/lib/checkoff/internal/selector_classes/section.rb +1 -2
  24. data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +2 -2
  25. data/lib/checkoff/internal/selector_classes/task.rb +2 -26
  26. data/lib/checkoff/internal/selector_evaluator.rb +6 -5
  27. data/lib/checkoff/internal/task_hashes.rb +17 -9
  28. data/lib/checkoff/internal/task_timing.rb +0 -4
  29. data/lib/checkoff/internal/thread_local.rb +0 -2
  30. data/lib/checkoff/monkeypatches/resource_marshalling.rb +3 -3
  31. data/lib/checkoff/my_tasks.rb +1 -4
  32. data/lib/checkoff/portfolios.rb +0 -1
  33. data/lib/checkoff/project_selectors.rb +1 -1
  34. data/lib/checkoff/projects.rb +19 -8
  35. data/lib/checkoff/resources.rb +14 -3
  36. data/lib/checkoff/sections.rb +9 -9
  37. data/lib/checkoff/subtasks.rb +1 -2
  38. data/lib/checkoff/tags.rb +3 -4
  39. data/lib/checkoff/task_searches.rb +1 -8
  40. data/lib/checkoff/task_selectors.rb +25 -12
  41. data/lib/checkoff/tasks.rb +6 -14
  42. data/lib/checkoff/timelines.rb +3 -20
  43. data/lib/checkoff/timing.rb +1 -2
  44. data/lib/checkoff/version.rb +1 -1
  45. data/lib/checkoff/workspaces.rb +1 -7
  46. data/rbi/checkoff.rbi +92 -146
  47. data/sig/checkoff.rbs +79 -153
  48. metadata +2 -2
data/sig/checkoff.rbs CHANGED
@@ -127,7 +127,7 @@ module Checkoff
127
127
  String workspace_name,
128
128
  (String | Symbol) project_name,
129
129
  (String | Symbol)? section_name,
130
- (String | Symbol)? task_name,
130
+ String? task_name,
131
131
  ?config: (Checkoff::Internal::EnvFallbackConfigLoader | ::Hash[untyped, untyped]),
132
132
  ?projects: Checkoff::Projects,
133
133
  ?sections: Checkoff::Sections,
@@ -288,8 +288,6 @@ module Checkoff
288
288
  ) -> ::Enumerable[Asana::Resources::Task]
289
289
 
290
290
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
291
- # @sg-ignore nil check above is not flow-sensitive
292
- #
293
291
  # _@param_ `workspace_name`
294
292
  #
295
293
  # _@param_ `tag_name`
@@ -351,7 +349,7 @@ module Checkoff
351
349
  #
352
350
  # _@param_ `asana_task`
353
351
  def initialize: (
354
- ?config: (::Hash[untyped, untyped] | Checkoff::Internal::EnvFallbackConfigLoader),
352
+ ?config: (::Hash[Symbol, Object] | Checkoff::Internal::EnvFallbackConfigLoader),
355
353
  ?client: Asana::Client,
356
354
  ?workspaces: Checkoff::Workspaces,
357
355
  ?sections: Checkoff::Sections,
@@ -444,9 +442,6 @@ module Checkoff
444
442
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
445
443
  # Add a task
446
444
  #
447
- # @sg-ignore @asana_task.create return type could not be inferred — calling a class method
448
- # through a Class<T>-typed ivar is a known Solargraph dispatch limitation
449
- #
450
445
  # _@param_ `name`
451
446
  #
452
447
  # _@param_ `workspace_gid`
@@ -494,13 +489,11 @@ module Checkoff
494
489
 
495
490
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
496
491
  # _@param_ `task_data`
497
- def h_to_task: (::Hash[untyped, untyped] task_data) -> Asana::Resources::Task
492
+ def h_to_task: (::Hash[String, Object] task_data) -> Asana::Resources::Task
498
493
 
499
494
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
500
495
  # True if the task is in a project which is in the given portfolio
501
496
  #
502
- # @sg-ignore Checkoff::Tasks#in_portfolio_named? return type could not be inferred
503
- #
504
497
  # _@param_ `task`
505
498
  #
506
499
  # _@param_ `portfolio_name`
@@ -544,9 +537,6 @@ module Checkoff
544
537
 
545
538
  def projects: () -> Checkoff::Projects
546
539
 
547
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
548
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
549
- # unify #fetch across that union
550
540
  def default_assignee_gid: () -> String
551
541
 
552
542
  def logger: () -> ::Logger
@@ -566,7 +556,6 @@ module Checkoff
566
556
  # _@param_ `message`
567
557
  def finer: (?Object? message) -> void
568
558
 
569
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
570
559
  def log_level: () -> Symbol
571
560
 
572
561
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -656,7 +645,6 @@ module Checkoff
656
645
  # _@param_ `message`
657
646
  def finer: (?Object? message) -> void
658
647
 
659
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
660
648
  def log_level: () -> Symbol
661
649
 
662
650
  attr_reader projects: Checkoff::Projects
@@ -692,7 +680,7 @@ module Checkoff
692
680
  # _@param_ `date_or_time`
693
681
  #
694
682
  # _@param_ `period` — Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
695
- def in_period?: ((Date | Time)? date_or_time, (Symbol | [Symbol, Integer]) period) -> bool
683
+ def in_period?: ((Date | Time)? date_or_time, (Symbol | ::Array[(Symbol | Integer)]) period) -> bool
696
684
 
697
685
  # _@param_ `date_or_time`
698
686
  #
@@ -731,8 +719,6 @@ module Checkoff
731
719
  # _@param_ `num_days`
732
720
  def n_days_from_now: (Integer num_days) -> ActiveSupport::TimeWithZone
733
721
 
734
- # @sg-ignore Checkoff::Timing#n_days_from_today return type could not be inferred
735
- #
736
722
  # _@param_ `num_days`
737
723
  def n_days_from_today: (Integer num_days) -> Date
738
724
 
@@ -769,7 +755,6 @@ module Checkoff
769
755
  # _@param_ `message`
770
756
  def finer: (?Object? message) -> void
771
757
 
772
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
773
758
  def log_level: () -> Symbol
774
759
  end
775
760
 
@@ -844,13 +829,13 @@ module Checkoff
844
829
  class Projects
845
830
  include Logging
846
831
  extend CacheMethod::ClassMethods
847
- MINUTE: untyped
848
- HOUR: untyped
849
- DAY: untyped
850
- REALLY_LONG_CACHE_TIME: untyped
851
- LONG_CACHE_TIME: untyped
852
- MEDIUM_CACHE_TIME: untyped
853
- SHORT_CACHE_TIME: untyped
832
+ MINUTE: Integer
833
+ HOUR: Integer
834
+ DAY: Integer
835
+ REALLY_LONG_CACHE_TIME: Integer
836
+ LONG_CACHE_TIME: Integer
837
+ MEDIUM_CACHE_TIME: Integer
838
+ SHORT_CACHE_TIME: Integer
854
839
 
855
840
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
856
841
  # _@param_ `config`
@@ -878,6 +863,12 @@ module Checkoff
878
863
 
879
864
  # Default options used in Asana API to pull tasks
880
865
  #
866
+ # Keys are :per_page (Integer), :options (a Hash whose :fields is an
867
+ # Array<String>) and, when only_uncompleted is set, :completed_since
868
+ # (String). The value type is genuinely per-key, which a single YARD
869
+ # Hash value type cannot express.
870
+ # Callers who want the field list should call #task_fields directly.
871
+ #
881
872
  # _@param_ `extra_fields`
882
873
  #
883
874
  # _@param_ `only_uncompleted`
@@ -902,8 +893,6 @@ module Checkoff
902
893
  def project: ((String | Symbol) workspace_name, (String | Symbol) project_name, ?extra_fields: ::Array[String]) -> Asana::Resources::Project?
903
894
 
904
895
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
905
- # @sg-ignore nil check above is not flow-sensitive
906
- #
907
896
  # _@param_ `workspace_name`
908
897
  #
909
898
  # _@param_ `project_name` — - :my_tasks or a project name
@@ -954,8 +943,8 @@ module Checkoff
954
943
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
955
944
  # _@param_ `project_obj`
956
945
  #
957
- # _@param_ `project` — - :not_specified, :my_tasks or a project name
958
- def project_to_h: (Asana::Resources::Project project_obj, ?project: (String | Symbol)) -> ::Hash[untyped, untyped]
946
+ # _@param_ `project` — - a String is a project name
947
+ def project_to_h: (Asana::Resources::Project project_obj, ?project: (String | Symbol)?) -> ::Hash[String, Object]
959
948
 
960
949
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
961
950
  # Indicates a project is ready for a person to work on it. This
@@ -968,7 +957,7 @@ module Checkoff
968
957
  # _@param_ `project`
969
958
  #
970
959
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
971
- def project_ready?: (Asana::Resources::Project project, ?period: (Symbol | [Symbol, Integer])) -> bool
960
+ def project_ready?: (Asana::Resources::Project project, ?period: (Symbol | ::Array[(Symbol | Integer)])) -> bool
972
961
 
973
962
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
974
963
  # _@param_ `project`
@@ -976,7 +965,7 @@ module Checkoff
976
965
  # _@param_ `field_name`
977
966
  #
978
967
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
979
- def in_period?: (Asana::Resources::Project project, (Symbol | ::Array[untyped]) field_name, (Symbol | [Symbol, Integer]) period) -> bool
968
+ def in_period?: (Asana::Resources::Project project, (Symbol | ::Array[untyped]) field_name, (Symbol | ::Array[(Symbol | Integer)]) period) -> bool
980
969
 
981
970
  def as_cache_key: () -> ::Hash[untyped, untyped]
982
971
 
@@ -1004,7 +993,6 @@ module Checkoff
1004
993
  # _@param_ `message`
1005
994
  def finer: (?Object? message) -> void
1006
995
 
1007
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1008
996
  def log_level: () -> Symbol
1009
997
 
1010
998
  attr_reader timing: Checkoff::Timing
@@ -1022,11 +1010,11 @@ module Checkoff
1022
1010
  include Logging
1023
1011
  extend CacheMethod::ClassMethods
1024
1012
  extend Forwardable
1025
- MINUTE: untyped
1026
- HOUR: untyped
1027
- REALLY_LONG_CACHE_TIME: untyped
1028
- LONG_CACHE_TIME: untyped
1029
- SHORT_CACHE_TIME: untyped
1013
+ MINUTE: Integer
1014
+ HOUR: Integer
1015
+ REALLY_LONG_CACHE_TIME: Integer
1016
+ LONG_CACHE_TIME: Integer
1017
+ SHORT_CACHE_TIME: Integer
1030
1018
 
1031
1019
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
1032
1020
  # _@param_ `config`
@@ -1111,7 +1099,6 @@ module Checkoff
1111
1099
  ) -> ::Enumerable[Asana::Resources::Task]
1112
1100
 
1113
1101
  # Pulls just names of tasks from a given section.
1114
- # @sg-ignore Task#name is nilable; task names are assumed present here
1115
1102
  #
1116
1103
  # _@param_ `workspace_name`
1117
1104
  #
@@ -1121,8 +1108,6 @@ module Checkoff
1121
1108
  def section_task_names: (String workspace_name, (String | Symbol) project_name, String? section_name) -> ::Array[String]
1122
1109
 
1123
1110
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
1124
- # @sg-ignore section() is nil-checked below
1125
- #
1126
1111
  # _@param_ `workspace_name`
1127
1112
  #
1128
1113
  # _@param_ `project_name`
@@ -1203,8 +1188,6 @@ module Checkoff
1203
1188
  def file_task_by_section: (::Hash[String?, ::Array[Asana::Resources::Task]] by_section, Asana::Resources::Task task, String project_gid) -> void
1204
1189
 
1205
1190
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1206
- # @sg-ignore projects.project may be nil but is raised below
1207
- #
1208
1191
  # _@param_ `workspace_name`
1209
1192
  #
1210
1193
  # _@param_ `project_name`
@@ -1227,7 +1210,6 @@ module Checkoff
1227
1210
  # _@param_ `message`
1228
1211
  def finer: (?Object? message) -> void
1229
1212
 
1230
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1231
1213
  def log_level: () -> Symbol
1232
1214
 
1233
1215
  attr_reader projects: Checkoff::Projects
@@ -1294,8 +1276,6 @@ module Checkoff
1294
1276
  # expected to move to the new-style way of representing sections
1295
1277
  # as memberships with a separate API within a task.
1296
1278
  #
1297
- # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
1298
- #
1299
1279
  # _@param_ `subtask`
1300
1280
  def subtask_section?: (Asana::Resources::Task subtask) -> bool?
1301
1281
 
@@ -1373,6 +1353,11 @@ module Checkoff
1373
1353
 
1374
1354
  def self.run: () -> void
1375
1355
 
1356
+ # _@param_ `resource_type`
1357
+ #
1358
+ # _@param_ `gid`
1359
+ def fetch_gid_by_type: (String resource_type, String gid) -> Asana::Resources::Resource?
1360
+
1376
1361
  attr_reader workspaces: Checkoff::Workspaces
1377
1362
 
1378
1363
  attr_reader projects: Checkoff::Projects
@@ -1445,7 +1430,7 @@ module Checkoff
1445
1430
  # _@param_ `task_data`
1446
1431
  #
1447
1432
  # _@param_ `section`
1448
- def task_data_dependent_on_previous_section_last_milestone?: (::Hash[untyped, untyped] task_data, Asana::Resources::Section section) -> bool
1433
+ def task_data_dependent_on_previous_section_last_milestone?: (::Hash[String, Object] task_data, Asana::Resources::Section section) -> bool
1449
1434
 
1450
1435
  def self.run: () -> void
1451
1436
 
@@ -1485,8 +1470,6 @@ module Checkoff
1485
1470
  ) -> void
1486
1471
 
1487
1472
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
1488
- # @sg-ignore nil check above is not flow-sensitive
1489
- #
1490
1473
  # _@param_ `workspace_name`
1491
1474
  #
1492
1475
  # _@param_ `portfolio_name`
@@ -1548,7 +1531,7 @@ module Checkoff
1548
1531
  # _@param_ `client`
1549
1532
  #
1550
1533
  # _@param_ `asana_workspace`
1551
- def initialize: (?config: (::Hash[untyped, untyped] | Checkoff::Internal::EnvFallbackConfigLoader), ?client: Asana::Client, ?asana_workspace: singleton(Asana::Resources::Workspace)) -> void
1534
+ def initialize: (?config: (::Hash[Symbol, Object] | Checkoff::Internal::EnvFallbackConfigLoader), ?client: Asana::Client, ?asana_workspace: singleton(Asana::Resources::Workspace)) -> void
1552
1535
 
1553
1536
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
1554
1537
  # Pulls an Asana workspace object
@@ -1557,19 +1540,12 @@ module Checkoff
1557
1540
  def workspace: ((String | Symbol) workspace_name) -> Asana::Resources::Workspace?
1558
1541
 
1559
1542
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
1560
- # @sg-ignore @asana_workspace.find_by_id return type could not be inferred — calling a
1561
- # class method through a Class<T>-typed ivar is a known Solargraph dispatch limitation
1562
1543
  def default_workspace: () -> Asana::Resources::Workspace
1563
1544
 
1564
1545
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
1565
- # @sg-ignore workspace() is nil-checked below
1566
- #
1567
1546
  # _@param_ `workspace_name`
1568
1547
  def workspace_or_raise: ((String | Symbol) workspace_name) -> Asana::Resources::Workspace
1569
1548
 
1570
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
1571
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
1572
- # unify #fetch across that union
1573
1549
  def default_workspace_gid: () -> String
1574
1550
 
1575
1551
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -1686,7 +1662,6 @@ module Checkoff
1686
1662
  # _@param_ `message`
1687
1663
  def finer: (?Object? message) -> void
1688
1664
 
1689
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1690
1665
  def log_level: () -> Symbol
1691
1666
 
1692
1667
  attr_reader workspaces: Checkoff::Workspaces
@@ -1721,8 +1696,6 @@ module Checkoff
1721
1696
  ) -> void
1722
1697
 
1723
1698
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
1724
- # @sg-ignore nil check above is not flow-sensitive
1725
- #
1726
1699
  # _@param_ `workspace_name`
1727
1700
  #
1728
1701
  # _@param_ `custom_field_name`
@@ -1743,10 +1716,6 @@ module Checkoff
1743
1716
 
1744
1717
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1745
1718
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1746
- # @sg-ignore Declared return type Array<String> does not match inferred type Array,Array<Array> —
1747
- # fixing cleanly needs binding enum_value.fetch('name') to a typed local; leaving for a
1748
- # follow-up code PR to keep this one annotation-only.
1749
- #
1750
1719
  # _@param_ `resource`
1751
1720
  #
1752
1721
  # _@param_ `custom_field_name`
@@ -1757,37 +1726,37 @@ module Checkoff
1757
1726
  # _@param_ `resource`
1758
1727
  #
1759
1728
  # _@param_ `custom_field_name`
1760
- def resource_custom_field_by_name: ((Asana::Resources::Task | Asana::Resources::Project) resource, String custom_field_name) -> ::Hash[untyped, untyped]?
1729
+ def resource_custom_field_by_name: ((Asana::Resources::Task | Asana::Resources::Project) resource, String custom_field_name) -> ::Hash[String, Object]?
1761
1730
 
1762
1731
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1763
1732
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1764
- # @sg-ignore nil check above is not flow-sensitive
1765
- #
1766
1733
  # _@param_ `resource`
1767
1734
  #
1768
1735
  # _@param_ `custom_field_name`
1769
- def resource_custom_field_by_name_or_raise: ((Asana::Resources::Task | Asana::Resources::Project) resource, String custom_field_name) -> ::Hash[untyped, untyped]
1736
+ def resource_custom_field_by_name_or_raise: ((Asana::Resources::Task | Asana::Resources::Project) resource, String custom_field_name) -> ::Hash[String, Object]
1770
1737
 
1771
1738
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1772
1739
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1773
- # @sg-ignore nil check above is not flow-sensitive
1774
- #
1775
1740
  # _@param_ `resource`
1776
1741
  #
1777
1742
  # _@param_ `custom_field_gid`
1778
- def resource_custom_field_by_gid_or_raise: ((Asana::Resources::Project | Asana::Resources::Task) resource, String custom_field_gid) -> ::Hash[untyped, untyped]
1743
+ def resource_custom_field_by_gid_or_raise: ((Asana::Resources::Project | Asana::Resources::Task) resource, String custom_field_gid) -> ::Hash[String, Object]
1779
1744
 
1780
- # @sg-ignore Declared return type Array<Hash> does not match inferred type Array,Hash,Array<Hash>
1781
- # fixing cleanly needs restructuring the case/when to bind each branch to a typed local; leaving
1782
- # for a follow-up code PR to keep this one annotation-only.
1745
+ # sord warn - "\"resource_subtype\"" does not appear to be a type
1746
+ # sord warn - "String} & Hash{\"enum_value\"" does not appear to be a type
1747
+ # sord warn - "Hash} & Hash{\"multi_enum_values\"" does not appear to be a type
1748
+ # sord warn - "\"gid\"" does not appear to be a type
1749
+ # sord warn - "String} & Hash{\"name\"" does not appear to be a type
1750
+ # rubocop:disable Layout/LineLength, YARD/TagTypeSyntax
1751
+ # rubocop:enable Layout/LineLength, YARD/TagTypeSyntax
1783
1752
  #
1784
1753
  # _@param_ `custom_field`
1785
- def resource_custom_field_enum_values: (::Hash[String, (::Hash[untyped, untyped] | ::Array[::Hash[untyped, untyped]])] custom_field) -> ::Array[::Hash[untyped, untyped]]
1754
+ def resource_custom_field_enum_values: (::Hash[untyped, (untyped | (untyped | ::Array[::Hash[untyped, untyped]]))] custom_field) -> ::Array[::Hash[untyped, (untyped | String)]]
1786
1755
 
1787
1756
  # _@param_ `custom_field`
1788
1757
  #
1789
1758
  # _@param_ `enum_value`
1790
- def find_gids: (::Hash[untyped, untyped] custom_field, ::Hash[String, String]? enum_value) -> ::Array[String]
1759
+ def find_gids: (::Hash[String, Object] custom_field, ::Hash[String, String]? enum_value) -> ::Array[String]
1791
1760
 
1792
1761
  def self.run: () -> void
1793
1762
 
@@ -1909,9 +1878,6 @@ module Checkoff
1909
1878
  # _@param_ `extra_fields`
1910
1879
  def iterated_raw_task_search: (::Hash[String, Object] api_params, workspace_gid: String, extra_fields: ::Array[String]) -> ::Enumerable[Asana::Resources::Task]
1911
1880
 
1912
- # @sg-ignore return type could not be inferred — bracket access on a Hash{Symbol=>undefined}
1913
- # local doesn't narrow even with a T.cast on the return expression
1914
- #
1915
1881
  # _@param_ `extra_fields`
1916
1882
  def calculate_api_options: (::Array[String] extra_fields) -> ::Hash[Symbol, ::Array[String]]
1917
1883
 
@@ -1934,7 +1900,6 @@ module Checkoff
1934
1900
  # _@param_ `message`
1935
1901
  def finer: (?Object? message) -> void
1936
1902
 
1937
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1938
1903
  def log_level: () -> Symbol
1939
1904
 
1940
1905
  attr_reader task_selectors: Checkoff::TaskSelectors
@@ -1978,19 +1943,19 @@ module Checkoff
1978
1943
  # _@param_ `task`
1979
1944
  #
1980
1945
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
1981
- def filter_via_task_selector: (Asana::Resources::Task task, (Symbol | ::Array[(Symbol | Integer | ::Array[untyped])]) task_selector) -> bool
1946
+ def filter_via_task_selector: (Asana::Resources::Task task, (Symbol | ::Array[(Symbol | String | Integer | ::Array[untyped])]) task_selector) -> bool
1982
1947
 
1983
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1984
1948
  def self.project_name: () -> String
1985
1949
 
1986
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1987
1950
  def self.workspace_name: () -> String
1988
1951
 
1989
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1990
1952
  def self.task_selector: () -> [Symbol, ::Array[untyped]]
1991
1953
 
1992
1954
  def self.run: () -> void
1993
1955
 
1956
+ # _@param_ `parsed` — result of JSON.parse on a task selector
1957
+ def self.validate_task_selector: (Object parsed) -> [String, ::Array[untyped]]
1958
+
1994
1959
  attr_reader tasks: Checkoff::Tasks
1995
1960
 
1996
1961
  attr_reader timelines: Checkoff::Timelines
@@ -2035,7 +2000,7 @@ module Checkoff
2035
2000
  # _@param_ `project`
2036
2001
  #
2037
2002
  # _@param_ `project_selector` — Filter based on project details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
2038
- def filter_via_project_selector: (Asana::Resources::Project project, [Symbol, ::Array[untyped]] project_selector) -> bool
2003
+ def filter_via_project_selector: (Asana::Resources::Project project, ::Array[(Symbol | String | ::Array[untyped])] project_selector) -> bool
2039
2004
 
2040
2005
  def self.run: () -> void
2041
2006
 
@@ -2112,7 +2077,7 @@ module Checkoff
2112
2077
  # _@param_ `task_data`
2113
2078
  #
2114
2079
  # _@param_ `client`
2115
- def h_to_task: (::Hash[untyped, untyped] task_data, client: Asana::Client) -> Asana::Resources::Task
2080
+ def h_to_task: (::Hash[String, Object] task_data, client: Asana::Client) -> Asana::Resources::Task
2116
2081
 
2117
2082
  # _@param_ `task_hash`
2118
2083
  def unwrap_custom_fields: (::Hash[untyped, untyped] task_hash) -> void
@@ -2130,14 +2095,17 @@ module Checkoff
2130
2095
  #
2131
2096
  # _@param_ `key`
2132
2097
  def unwrap_memberships: (
2133
- ::Hash[untyped, untyped] task_hash,
2098
+ ::Hash[String, Object] task_hash,
2134
2099
  ::Array[::Hash[untyped, untyped]] memberships,
2135
2100
  String resource,
2136
2101
  String key
2137
2102
  ) -> void
2138
2103
 
2139
2104
  # _@param_ `task_hash`
2140
- def unwrap_all_memberships: (::Hash[untyped, untyped] task_hash) -> void
2105
+ def unwrap_all_memberships: (::Hash[String, Object] task_hash) -> void
2106
+
2107
+ # _@param_ `task_hash`
2108
+ def assignee_hash: (::Hash[String, (String | ::Hash[untyped, untyped] | ::Array[untyped])] task_hash) -> ::Hash[String, Object]
2141
2109
  end
2142
2110
 
2143
2111
  # Utility methods for working with task dates and times
@@ -2158,16 +2126,10 @@ module Checkoff
2158
2126
  ) -> void
2159
2127
 
2160
2128
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2161
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
2162
- # union receiver
2163
- #
2164
2129
  # _@param_ `task`
2165
2130
  def start_time: (Asana::Resources::Task task) -> Time?
2166
2131
 
2167
2132
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2168
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
2169
- # union receiver
2170
- #
2171
2133
  # _@param_ `task`
2172
2134
  def due_time: (Asana::Resources::Task task) -> Time?
2173
2135
 
@@ -2200,9 +2162,6 @@ module Checkoff
2200
2162
  class ThreadLocal
2201
2163
  # sord warn - T wasn't able to be resolved to a constant in this project
2202
2164
  # sord warn - T wasn't able to be resolved to a constant in this project
2203
- # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
2204
- # inference gap for #with_thread_local_variable
2205
- #
2206
2165
  # _@param_ `name`
2207
2166
  #
2208
2167
  # _@param_ `value`
@@ -2219,8 +2178,6 @@ module Checkoff
2219
2178
  # _@param_ `yaml_filename`
2220
2179
  def initialize: (::Hash[Symbol, untyped] config, Symbol sym, String yaml_filename) -> void
2221
2180
 
2222
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2223
- #
2224
2181
  # _@param_ `key`
2225
2182
  def []: (Symbol key) -> Object
2226
2183
 
@@ -2252,8 +2209,8 @@ module Checkoff
2252
2209
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
2253
2210
  # _@param_ `project_obj`
2254
2211
  #
2255
- # _@param_ `project` — - :not_specified, :my_tasks
2256
- def project_to_h: (Asana::Resources::Project project_obj, ?project: (String | Symbol)) -> ::Hash[untyped, untyped]
2212
+ # _@param_ `project` — - a String is a project name
2213
+ def project_to_h: (Asana::Resources::Project project_obj, ?project: (String | Symbol)?) -> ::Hash[String, Object]
2257
2214
 
2258
2215
  # _@param_ `project_hash`
2259
2216
  def unwrap_custom_fields: (::Hash[untyped, untyped] project_hash) -> void
@@ -2343,6 +2300,9 @@ module Checkoff
2343
2300
  # _@param_ `param_name`
2344
2301
  def fetch_solo_param: (String param_name) -> String
2345
2302
 
2303
+ # Implemented by every subclass.
2304
+ def convert: () -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2305
+
2346
2306
  attr_reader gid: String
2347
2307
 
2348
2308
  attr_reader remaining_params: ::Hash[String, ::Array[String]]
@@ -2417,7 +2377,6 @@ module Checkoff
2417
2377
  # _@param_ `date_url_params` — the simple params
2418
2378
  def initialize: (date_url_params: ::Hash[String, ::Array[String]]) -> void
2419
2379
 
2420
- # @sg-ignore out can genuinely be nil if none of the 3 known prefixes matched; relies on the raise above it
2421
2380
  def convert: () -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2422
2381
 
2423
2382
  # _@param_ `prefix`
@@ -2443,8 +2402,6 @@ module Checkoff
2443
2402
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
2444
2403
  def handle_within_next: (String prefix) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2445
2404
 
2446
- # @sg-ignore value.length == 1 guard above isn't inferred as narrowing value[0] to non-nil
2447
- #
2448
2405
  # _@param_ `param_key`
2449
2406
  def get_single_param: (String param_key) -> String
2450
2407
 
@@ -2454,6 +2411,9 @@ module Checkoff
2454
2411
  # _@param_ `prefix`
2455
2412
  def validate_unit_is_day!: (String prefix) -> void
2456
2413
 
2414
+ # _@param_ `out`
2415
+ def ensure_matched!: ([::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]? _out) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2416
+
2457
2417
  attr_reader date_url_params: ::Hash[String, ::Array[String]]
2458
2418
  end
2459
2419
 
@@ -2484,7 +2444,6 @@ module Checkoff
2484
2444
  # _@param_ `verb`
2485
2445
  def convert_from_projects_and_sections: (String verb) -> ::Array[String]
2486
2446
 
2487
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
2488
2447
  def convert: () -> ::Array[String]
2489
2448
 
2490
2449
  attr_reader key: String
@@ -2593,15 +2552,11 @@ module Checkoff
2593
2552
 
2594
2553
  def by_custom_field: () -> ::Hash[String, ::Hash[untyped, untyped]]
2595
2554
 
2596
- # @sg-ignore `unless variant_class.nil?` return value isn't inferred as the declared tuple type
2597
- #
2598
2555
  # _@param_ `gid`
2599
2556
  #
2600
2557
  # _@param_ `single_custom_field_params`
2601
2558
  def convert_single_custom_field_params: (String gid, ::Hash[String, ::Array[String]] single_custom_field_params) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2602
2559
 
2603
- # @sg-ignore split(...)[n]'s nilable Array indexing isn't inferred as the declared String return
2604
- #
2605
2560
  # _@param_ `key`
2606
2561
  def gid_from_custom_field_key: (String key) -> String
2607
2562
 
@@ -2644,7 +2599,7 @@ module Checkoff
2644
2599
  # _@param_ `asana_event`
2645
2600
  #
2646
2601
  # _@param_ `failures`
2647
- def filter_matches_asana_event?: (::Hash[untyped, untyped] filter, ::Hash[untyped, untyped] asana_event, ::Array[String] failures) -> bool
2602
+ def filter_matches_asana_event?: (::Hash[String, (String | ::Array[String])] filter, ::Hash[untyped, untyped] asana_event, ::Array[String] failures) -> bool
2648
2603
 
2649
2604
  # _@param_ `key`
2650
2605
  #
@@ -2678,7 +2633,6 @@ module Checkoff
2678
2633
  # _@param_ `message`
2679
2634
  def finer: (?Object? message) -> void
2680
2635
 
2681
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2682
2636
  def log_level: () -> Symbol
2683
2637
  end
2684
2638
 
@@ -2770,7 +2724,6 @@ module Checkoff
2770
2724
  # _@param_ `message`
2771
2725
  def finer: (?Object? message) -> void
2772
2726
 
2773
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2774
2727
  def log_level: () -> Symbol
2775
2728
 
2776
2729
  attr_reader projects: Checkoff::Projects
@@ -2791,11 +2744,10 @@ module Checkoff
2791
2744
  # Base class to evaluate Asana resource selectors against an Asana resource
2792
2745
  class SelectorEvaluator
2793
2746
  # _@param_ `selector`
2794
- def evaluate: ((Symbol | ::Array[(Symbol | Integer | ::Array[untyped])]) selector) -> (bool | Object | ::Array[untyped])?
2747
+ def evaluate: ((Symbol | ::Array[(Symbol | String | Integer | ::Array[untyped])]) selector) -> (bool | Object | ::Array[untyped])?
2795
2748
 
2796
2749
  def initializer_kwargs: () -> ::Hash[untyped, untyped]
2797
2750
 
2798
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
2799
2751
  def function_evaluators: () -> ::Array[singleton(Checkoff::SelectorClasses::FunctionEvaluator)]
2800
2752
 
2801
2753
  # _@param_ `selector`
@@ -2861,9 +2813,6 @@ module Checkoff
2861
2813
  def evaluate_arg?: (Integer _index) -> bool
2862
2814
 
2863
2815
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2864
- # @sg-ignore Hash#fetch generic<X> leak on rbs >= 4.1.0, fix in progress upstream
2865
- # https://github.com/castwide/solargraph/pull/1228
2866
- #
2867
2816
  # _@param_ `task`
2868
2817
  #
2869
2818
  # _@param_ `project_name`
@@ -2939,9 +2888,6 @@ module Checkoff
2939
2888
  def matches?: () -> bool
2940
2889
 
2941
2890
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2942
- # @sg-ignore Checkoff::SelectorClasses::Task::UnassignedPFunctionEvaluator#evaluate
2943
- # return type could not be inferred
2944
- #
2945
2891
  # _@param_ `task`
2946
2892
  def evaluate: (Asana::Resources::Task task) -> bool
2947
2893
  end
@@ -2953,9 +2899,6 @@ module Checkoff
2953
2899
  def matches?: () -> bool
2954
2900
 
2955
2901
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2956
- # @sg-ignore Checkoff::SelectorClasses::Task::DueDateSetPFunctionEvaluator#evaluate
2957
- # return type could not be inferred
2958
- #
2959
2902
  # _@param_ `task`
2960
2903
  def evaluate: (Asana::Resources::Task task) -> bool
2961
2904
  end
@@ -3042,9 +2985,6 @@ module Checkoff
3042
2985
  def evaluate_arg?: (Integer _index) -> bool
3043
2986
 
3044
2987
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3045
- # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
3046
- # return type could not be inferred
3047
- #
3048
2988
  # _@param_ `task`
3049
2989
  def evaluate: (Asana::Resources::Task task) -> bool
3050
2990
  end
@@ -3076,7 +3016,7 @@ module Checkoff
3076
3016
  #
3077
3017
  # _@param_ `_kwargs`
3078
3018
  def initialize: (
3079
- selector: ([Symbol, ::Array[untyped]] | String),
3019
+ selector: (::Array[(Symbol | ::Array[untyped])] | Symbol),
3080
3020
  tasks: Checkoff::Tasks,
3081
3021
  timelines: Checkoff::Timelines,
3082
3022
  custom_fields: Checkoff::CustomFields,
@@ -3089,7 +3029,7 @@ module Checkoff
3089
3029
 
3090
3030
  attr_reader custom_fields: Checkoff::CustomFields
3091
3031
 
3092
- attr_reader selector: [Symbol, ::Array[untyped]]
3032
+ attr_reader selector: (::Array[(Symbol | ::Array[untyped])] | Symbol)
3093
3033
  end
3094
3034
  end
3095
3035
 
@@ -3264,9 +3204,6 @@ module Checkoff
3264
3204
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3265
3205
  # sord warn - boolish is probably not a type, but using anyway
3266
3206
  # sord warn - boolish wasn't able to be resolved to a constant in this project
3267
- # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
3268
- # return type could not be inferred
3269
- #
3270
3207
  # _@param_ `resource`
3271
3208
  #
3272
3209
  # _@param_ `prefix`
@@ -3279,8 +3216,6 @@ module Checkoff
3279
3216
 
3280
3217
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3281
3218
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3282
- # @sg-ignore selector is only String here per matches?'s is_a?(String) check, in another method
3283
- #
3284
3219
  # _@param_ `_resource`
3285
3220
  def evaluate: ((Asana::Resources::Task | Asana::Resources::Project) _resource) -> String
3286
3221
  end
@@ -3292,9 +3227,9 @@ module Checkoff
3292
3227
  # _@param_ `custom_fields`
3293
3228
  #
3294
3229
  # _@param_ `_kwargs`
3295
- def initialize: (selector: ([Symbol, ::Array[untyped]] | String), custom_fields: Checkoff::CustomFields, **::Hash[untyped, untyped] _kwargs) -> void
3230
+ def initialize: (selector: (::Array[(Symbol | ::Array[untyped])] | Symbol), custom_fields: Checkoff::CustomFields, **::Hash[untyped, untyped] _kwargs) -> void
3296
3231
 
3297
- attr_reader selector: ([Symbol, ::Array[untyped]] | String)
3232
+ attr_reader selector: (::Array[(Symbol | ::Array[untyped])] | Symbol)
3298
3233
 
3299
3234
  attr_reader custom_fields: Checkoff::CustomFields
3300
3235
  end
@@ -3309,8 +3244,6 @@ module Checkoff
3309
3244
  def matches?: () -> bool
3310
3245
 
3311
3246
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3312
- # @sg-ignore nilable return from an @!parse-declared method isn't inferred
3313
- #
3314
3247
  # _@param_ `resource`
3315
3248
  def evaluate: (Asana::Resources::Project resource) -> String?
3316
3249
  end
@@ -3362,14 +3295,14 @@ module Checkoff
3362
3295
  #
3363
3296
  # _@param_ `_kwargs`
3364
3297
  def initialize: (
3365
- selector: ([Symbol, ::Array[untyped]] | String),
3298
+ selector: (::Array[(Symbol | ::Array[untyped])] | Symbol),
3366
3299
  projects: Checkoff::Projects,
3367
3300
  portfolios: Checkoff::Portfolios,
3368
3301
  workspaces: Checkoff::Workspaces,
3369
3302
  **::Hash[untyped, untyped] _kwargs
3370
3303
  ) -> void
3371
3304
 
3372
- attr_reader selector: [Symbol, ::Array[untyped]]
3305
+ attr_reader selector: (::Array[(Symbol | ::Array[untyped])] | Symbol)
3373
3306
 
3374
3307
  attr_reader projects: Checkoff::Projects
3375
3308
 
@@ -3388,8 +3321,6 @@ module Checkoff
3388
3321
  def matches?: () -> bool
3389
3322
 
3390
3323
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3391
- # @sg-ignore String, nil safe-nav chain isn't inferred as returning Boolean
3392
- #
3393
3324
  # _@param_ `section`
3394
3325
  def evaluate: (Asana::Resources::Section section) -> bool
3395
3326
  end
@@ -3416,13 +3347,13 @@ module Checkoff
3416
3347
  #
3417
3348
  # _@param_ `kwargs`
3418
3349
  def initialize: (
3419
- selector: ([Symbol, ::Array[untyped]] | String),
3350
+ selector: (::Array[(Symbol | ::Array[untyped])] | Symbol),
3420
3351
  sections: Checkoff::Sections,
3421
3352
  client: Asana::Client,
3422
3353
  **::Hash[untyped, untyped] kwargs
3423
3354
  ) -> void
3424
3355
 
3425
- attr_reader selector: [Symbol, ::Array[untyped]]
3356
+ attr_reader selector: (::Array[(Symbol | ::Array[untyped])] | Symbol)
3426
3357
 
3427
3358
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
3428
3359
  attr_reader client: Asana::Client
@@ -3438,12 +3369,9 @@ module Checkoff
3438
3369
  # _@param_ `_index`
3439
3370
  def evaluate_arg?: (Integer _index) -> bool
3440
3371
 
3441
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
3442
3372
  def matches?: () -> bool
3443
3373
 
3444
3374
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3445
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
3446
- #
3447
3375
  # _@param_ `_task`
3448
3376
  #
3449
3377
  # _@param_ `_args`
@@ -3452,7 +3380,7 @@ module Checkoff
3452
3380
  # _@param_ `object`
3453
3381
  #
3454
3382
  # _@param_ `fn_name`
3455
- def fn?: (Object object, Symbol fn_name) -> bool
3383
+ def fn?: ((::Array[(Symbol | ::Array[untyped])] | Symbol) object, Symbol fn_name) -> bool
3456
3384
 
3457
3385
  # Concrete subclasses each declare their own initialize with their
3458
3386
  # specific keyword args (and set @selector themselves before calling
@@ -3484,7 +3412,6 @@ module Checkoff
3484
3412
  # _@param_ `message`
3485
3413
  def finer: (?Object? message) -> void
3486
3414
 
3487
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3488
3415
  def log_level: () -> Symbol
3489
3416
  end
3490
3417
  end
@@ -3596,8 +3523,8 @@ module Checkoff
3596
3523
 
3597
3524
  def initializer_kwargs: () -> ::Hash[untyped, untyped]
3598
3525
 
3599
- # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3600
- attr_reader item: Asana::Resources::Project
3526
+ # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3527
+ attr_reader item: Asana::Resources::Section
3601
3528
 
3602
3529
  attr_reader sections: Checkoff::Sections
3603
3530
 
@@ -3629,7 +3556,6 @@ module Logging
3629
3556
  # _@param_ `message`
3630
3557
  def finer: (?Object? message) -> void
3631
3558
 
3632
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3633
3559
  def log_level: () -> Symbol
3634
3560
  end
3635
3561
 
@@ -3649,10 +3575,10 @@ module Asana
3649
3575
  # Public: The base resource class which provides some sugar over common
3650
3576
  # resource functionality.
3651
3577
  class Resource
3652
- def marshal_dump: () -> ::Hash[untyped, untyped]
3578
+ def marshal_dump: () -> ::Hash[String, Object]
3653
3579
 
3654
3580
  # _@param_ `data`
3655
- def marshal_load: (::Hash[untyped, untyped] data) -> void
3581
+ def marshal_load: (::Hash[String, Object] data) -> void
3656
3582
  end
3657
3583
  end
3658
3584
  end