checkoff 0.227.0 → 0.229.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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/checkoff.gemspec +7 -7
  3. data/lib/checkoff/cli.rb +71 -1
  4. data/lib/checkoff/clients.rb +1 -1
  5. data/lib/checkoff/custom_fields.rb +3 -3
  6. data/lib/checkoff/events.rb +3 -3
  7. data/lib/checkoff/internal/asana_event_enrichment.rb +13 -14
  8. data/lib/checkoff/internal/config_loader.rb +4 -2
  9. data/lib/checkoff/internal/logging.rb +3 -0
  10. data/lib/checkoff/internal/project_selector_evaluator.rb +5 -2
  11. data/lib/checkoff/internal/project_timing.rb +0 -2
  12. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +12 -12
  13. data/lib/checkoff/internal/search_url/custom_field_variant.rb +19 -18
  14. data/lib/checkoff/internal/search_url/date_param_converter.rb +9 -9
  15. data/lib/checkoff/internal/search_url/parser.rb +20 -30
  16. data/lib/checkoff/internal/search_url/results_merger.rb +4 -6
  17. data/lib/checkoff/internal/search_url/simple_param_converter.rb +19 -11
  18. data/lib/checkoff/internal/section_selector_evaluator.rb +7 -3
  19. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +3 -2
  20. data/lib/checkoff/internal/selector_classes/common.rb +5 -6
  21. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +2 -3
  22. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +3 -2
  23. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +2 -2
  24. data/lib/checkoff/internal/selector_classes/section.rb +2 -2
  25. data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +3 -2
  26. data/lib/checkoff/internal/selector_classes/task.rb +1 -2
  27. data/lib/checkoff/internal/selector_evaluator.rb +2 -2
  28. data/lib/checkoff/internal/task_hashes.rb +3 -3
  29. data/lib/checkoff/internal/task_selector_evaluator.rb +3 -0
  30. data/lib/checkoff/internal/task_timing.rb +0 -2
  31. data/lib/checkoff/internal/thread_local.rb +5 -4
  32. data/lib/checkoff/my_tasks.rb +4 -4
  33. data/lib/checkoff/portfolios.rb +1 -1
  34. data/lib/checkoff/project_selectors.rb +4 -4
  35. data/lib/checkoff/projects.rb +6 -6
  36. data/lib/checkoff/resources.rb +5 -3
  37. data/lib/checkoff/section_selectors.rb +4 -4
  38. data/lib/checkoff/sections.rb +18 -15
  39. data/lib/checkoff/subtasks.rb +2 -2
  40. data/lib/checkoff/tags.rb +7 -3
  41. data/lib/checkoff/task_searches.rb +9 -9
  42. data/lib/checkoff/task_selectors.rb +10 -6
  43. data/lib/checkoff/tasks.rb +5 -5
  44. data/lib/checkoff/timelines.rb +0 -1
  45. data/lib/checkoff/timing.rb +5 -4
  46. data/lib/checkoff/version.rb +1 -1
  47. data/lib/checkoff/workspaces.rb +1 -1
  48. data/rbi/checkoff.rbi +342 -305
  49. data/sig/checkoff.rbs +327 -279
  50. metadata +7 -7
data/rbi/checkoff.rbi CHANGED
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: ignore
2
2
  module Logging
3
3
  sig { returns(T.untyped) }
4
4
  def logger; end
@@ -52,26 +52,12 @@ module Overcommit
52
52
  sig { returns(T.untyped) }
53
53
  def run; end
54
54
  end
55
-
56
- class SolargraphTypecheck < Base
57
- sig { returns(T.untyped) }
58
- def run; end
59
-
60
- sig { params(stderr: T.untyped).returns(T.untyped) }
61
- def remove_harmless_glitches(stderr); end
62
-
63
- sig { params(errors: T.untyped, files: T.untyped).returns(T.untyped) }
64
- def generate_errors_for_files(errors, *files); end
65
-
66
- sig { params(error: T.untyped).returns(T.untyped) }
67
- def parse_error(error); end
68
- end
69
55
  end
70
56
  end
71
57
  end
72
58
 
73
59
  module Checkoff
74
- VERSION = '0.227.0'
60
+ VERSION = '0.229.0'
75
61
 
76
62
  class Attachments
77
63
  include Logging
@@ -479,7 +465,7 @@ module Checkoff
479
465
  SECTION_FUNCTION_EVALUATORS = (Checkoff::SelectorClasses::Section.constants.map do |const|
480
466
  Checkoff::SelectorClasses::Section.const_get(const)
481
467
  end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze
482
- FUNCTION_EVALUTORS = (COMMON_FUNCTION_EVALUATORS + SECTION_FUNCTION_EVALUATORS).freeze
468
+ FUNCTION_EVALUATORS = (COMMON_FUNCTION_EVALUATORS + SECTION_FUNCTION_EVALUATORS).freeze
483
469
 
484
470
  sig do
485
471
  params(
@@ -2408,7 +2394,7 @@ module Checkoff
2408
2394
  end
2409
2395
  end
2410
2396
  end
2411
- # typed: true
2397
+ # typed: ignore
2412
2398
  class ENV
2413
2399
  # _@param_ `key`
2414
2400
  #
@@ -2478,6 +2464,9 @@ module Asana
2478
2464
  include Asana::Resources
2479
2465
 
2480
2466
  class Client
2467
+ sig { returns(Asana::ProxiedResourceClasses::Tag) }
2468
+ def tags; end
2469
+
2481
2470
  sig { returns(Asana::ProxiedResourceClasses::Task) }
2482
2471
  def tasks; end
2483
2472
 
@@ -2502,17 +2491,14 @@ module Asana
2502
2491
  sig { returns(Asana::ProxiedResourceClasses::CustomField) }
2503
2492
  def custom_fields; end
2504
2493
 
2505
- sig { returns(Asana::ProxiedResourceClasses::Tag) }
2506
- def tags; end
2507
-
2508
2494
  # sord warn - Asana::HttpClient::Response wasn't able to be resolved to a constant in this project
2509
- # Public: Performs a GET request against an arbitrary Asana URL. Allows for
2495
+ # Performs a GET request against an arbitrary Asana URL. Allows for
2510
2496
  # the user to interact with the API in ways that haven't been
2511
2497
  # reflected/foreseen in this library.
2512
2498
  #
2513
- # _@param_ `url` — the URL to GET
2514
- #
2515
2499
  # _@param_ `args` — the request I/O options
2500
+ #
2501
+ # _@param_ `url`
2516
2502
  sig { params(url: String, args: Object).returns(Asana::HttpClient::Response) }
2517
2503
  def get(url, **args); end
2518
2504
  end
@@ -2563,6 +2549,9 @@ module Asana
2563
2549
  ).returns(Asana::Resources::Task)
2564
2550
  end
2565
2551
  def self.create(client, assignee:, workspace:, name:); end
2552
+
2553
+ sig { returns(T.any(T::Hash[T.untyped, T.untyped], Asana::Resources::Section)) }
2554
+ def assignee_section; end
2566
2555
  end
2567
2556
 
2568
2557
  class Section
@@ -2626,6 +2615,22 @@ module Asana
2626
2615
  def get_custom_fields_for_workspace(workspace_gid: required("workspace_gid"), options: {}); end
2627
2616
  end
2628
2617
 
2618
+ class Tag
2619
+ # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2620
+ # Get tags in a workspace
2621
+ #
2622
+ # > offset - [str] Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
2623
+ # > limit - [int] Results per page. The number of objects to return per page. The value must be between 1 and 100.
2624
+ # > opt_fields - [list[str]] Defines fields to return. Some requests return *compact* representations of objects in order to conserve resources and complete the request more efficiently. Other times requests return more information than you may need. This option allows you to list the exact set of fields that the API should be sure to return for the objects. The field names should be provided as paths, described below. The id of included objects will always be returned, regardless of the field options.
2625
+ # > opt_pretty - [bool] Provides “pretty” output. Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.
2626
+ #
2627
+ # _@param_ `workspace_gid` — (required) Globally unique identifier for the workspace or organization.
2628
+ #
2629
+ # _@param_ `options` — the request I/O options
2630
+ sig { params(workspace_gid: String, options: T::Hash[T.untyped, T.untyped]).returns(T::Enumerable[Asana::Resources::Tag]) }
2631
+ def get_tags_for_workspace(workspace_gid:, options: {}); end
2632
+ end
2633
+
2629
2634
  class Task
2630
2635
  # Get subtasks from a task
2631
2636
  #
@@ -2848,69 +2853,130 @@ module Asana
2848
2853
  sig { params(options: T::Hash[T.untyped, T.untyped]).returns(Asana::Resources::User) }
2849
2854
  def me(options: {}); end
2850
2855
  end
2856
+ end
2857
+ end
2851
2858
 
2852
- class Tag
2853
- # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2854
- # Get tags in a workspace
2855
- #
2856
- # > offset - [str] Offset token. An offset to the next page returned by the API. A pagination request will return an offset token, which can be used as an input parameter to the next request. If an offset is not passed in, the API will return the first page of results. 'Note: You can only pass in an offset that was returned to you via a previously paginated request.'
2857
- # > limit - [int] Results per page. The number of objects to return per page. The value must be between 1 and 100.
2858
- # > opt_fields - [list[str]] Defines fields to return. Some requests return *compact* representations of objects in order to conserve resources and complete the request more efficiently. Other times requests return more information than you may need. This option allows you to list the exact set of fields that the API should be sure to return for the objects. The field names should be provided as paths, described below. The id of included objects will always be returned, regardless of the field options.
2859
- # > opt_pretty - [bool] Provides “pretty” output. Provides the response in a “pretty” format. In the case of JSON this means doing proper line breaking and indentation to make it readable. This will take extra time and increase the response size so it is advisable only to use this during debugging.
2860
- #
2861
- # _@param_ `workspace_gid` — (required) Globally unique identifier for the workspace or organization.
2862
- #
2863
- # _@param_ `options` the request I/O options
2864
- sig { params(workspace_gid: String, options: T::Hash[T.untyped, T.untyped]).returns(T::Enumerable[Asana::Resources::Tag]) }
2865
- def get_tags_for_workspace(workspace_gid:, options: {}); end
2866
- end
2859
+ module T
2860
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2861
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2862
+ # _@param_ `type`
2863
+ sig { params(type: T.any(T::Types::Base, T.class_of(Object))).returns(T::Types::Base) }
2864
+ def self.nilable(type); end
2865
+
2866
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2867
+ # _@param_ `obj`
2868
+ #
2869
+ # _@param_ `type`
2870
+ sig { params(obj: BasicObject, type: T.any(T::Types::Base, T.class_of(Object))).returns(BasicObject) }
2871
+ def self.let(obj, type); end
2872
+
2873
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2874
+ sig { returns(T::Types::Base) }
2875
+ def self.untyped; end
2876
+
2877
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2878
+ # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
2879
+ # _@param_ `type`
2880
+ sig { params(type: T.any(T::Types::Base, T.class_of(Object))).returns(T::Types::Base) }
2881
+ def nilable(type); end
2882
+
2883
+ # _@param_ `o`
2884
+ #
2885
+ # _@param_ `type`
2886
+ sig { params(o: T, type: T.class_of(T)).returns(T) }
2887
+ def let(o, type); end
2888
+
2889
+ class Struct
2890
+ extend T::Props::ClassMethods
2867
2891
  end
2868
2892
  end
2869
2893
 
2870
2894
  # Command-line and gem client for Asana (unofficial)
2871
2895
  module Checkoff
2872
- VERSION = T.let('0.227.0', T.untyped)
2896
+ VERSION = T.let('0.229.0', T.untyped)
2873
2897
 
2874
2898
  # Move tasks from one place to another
2875
2899
  class MvSubcommand
2876
- sig { params(from_workspace_arg: T.untyped, from_project_arg: T.untyped, from_section_arg: T.untyped).returns(T.untyped) }
2900
+ # _@param_ `from_workspace_arg`
2901
+ #
2902
+ # _@param_ `from_project_arg`
2903
+ #
2904
+ # _@param_ `from_section_arg`
2905
+ sig { params(from_workspace_arg: T.any(Symbol, String), from_project_arg: T.any(Symbol, String), from_section_arg: T.nilable(String)).void }
2877
2906
  def validate_and_assign_from_location(from_workspace_arg, from_project_arg, from_section_arg); end
2878
2907
 
2879
- sig { params(to_project_arg: T.untyped).returns(T.untyped) }
2908
+ # _@param_ `to_project_arg`
2909
+ sig { params(to_project_arg: T.any(Symbol, String)).returns(T.any(String, Symbol)) }
2880
2910
  def create_to_project_name(to_project_arg); end
2881
2911
 
2882
- sig { params(to_section_arg: T.untyped).returns(T.untyped) }
2912
+ # _@param_ `to_section_arg` :source_section
2913
+ sig { params(to_section_arg: T.nilable(T.any(Symbol, String))).void }
2883
2914
  def create_to_section_name(to_section_arg); end
2884
2915
 
2885
- sig { params(to_workspace_arg: T.untyped, to_project_arg: T.untyped, to_section_arg: T.untyped).returns(T.untyped) }
2916
+ # _@param_ `to_workspace_arg`
2917
+ #
2918
+ # _@param_ `to_project_arg`
2919
+ #
2920
+ # _@param_ `to_section_arg` — :source_section
2921
+ sig { params(to_workspace_arg: T.any(Symbol, String), to_project_arg: T.any(Symbol, String), to_section_arg: T.nilable(T.any(Symbol, String))).void }
2886
2922
  def validate_and_assign_to_location(to_workspace_arg, to_project_arg, to_section_arg); end
2887
2923
 
2924
+ # _@param_ `from_workspace_arg`
2925
+ #
2926
+ # _@param_ `from_project_arg`
2927
+ #
2928
+ # _@param_ `from_section_arg`
2929
+ #
2930
+ # _@param_ `to_workspace_arg`
2931
+ #
2932
+ # _@param_ `to_project_arg`
2933
+ #
2934
+ # _@param_ `to_section_arg` — :source_section
2935
+ #
2936
+ # _@param_ `config`
2937
+ #
2938
+ # _@param_ `projects`
2939
+ #
2940
+ # _@param_ `sections`
2941
+ #
2942
+ # _@param_ `logger`
2888
2943
  sig do
2889
2944
  params(
2890
- from_workspace_arg: T.untyped,
2891
- from_project_arg: T.untyped,
2892
- from_section_arg: T.untyped,
2893
- to_workspace_arg: T.untyped,
2894
- to_project_arg: T.untyped,
2895
- to_section_arg: T.untyped,
2896
- config: T.untyped,
2897
- projects: T.untyped,
2898
- sections: T.untyped,
2899
- logger: T.untyped
2945
+ from_workspace_arg: T.any(Symbol, String),
2946
+ from_project_arg: T.any(Symbol, String),
2947
+ from_section_arg: T.nilable(String),
2948
+ to_workspace_arg: T.any(Symbol, String),
2949
+ to_project_arg: T.any(Symbol, String),
2950
+ to_section_arg: T.nilable(T.any(Symbol, String)),
2951
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
2952
+ projects: Checkoff::Projects,
2953
+ sections: Checkoff::Sections,
2954
+ logger: IO
2900
2955
  ).void
2901
2956
  end
2902
2957
  def initialize(from_workspace_arg:, from_project_arg:, from_section_arg:, to_workspace_arg:, to_project_arg:, to_section_arg:, config: Checkoff::Internal::ConfigLoader.load(:asana), projects: Checkoff::Projects.new(config:), sections: Checkoff::Sections.new(config:), logger: $stderr); end
2903
2958
 
2904
- sig { params(tasks: T.untyped, to_project: T.untyped, to_section: T.untyped).returns(T.untyped) }
2959
+ # _@param_ `tasks`
2960
+ #
2961
+ # _@param_ `to_project`
2962
+ #
2963
+ # _@param_ `to_section`
2964
+ sig { params(tasks: T::Enumerable[Asana::Resources::Task], to_project: Asana::Resources::Project, to_section: Asana::Resources::Section).void }
2905
2965
  def move_tasks(tasks, to_project, to_section); end
2906
2966
 
2907
- sig { params(from_workspace_name: T.untyped, from_project_name: T.untyped, from_section_name: T.untyped).returns(T.untyped) }
2967
+ # _@param_ `from_workspace_name`
2968
+ #
2969
+ # _@param_ `from_project_name`
2970
+ #
2971
+ # _@param_ `from_section_name`
2972
+ sig { params(from_workspace_name: String, from_project_name: T.any(String, Symbol), from_section_name: T.any(String, Symbol)).returns(T::Enumerable[Asana::Resources::Task]) }
2908
2973
  def fetch_tasks(from_workspace_name, from_project_name, from_section_name); end
2909
2974
 
2910
- sig { returns(T.untyped) }
2975
+ sig { void }
2911
2976
  def run; end
2912
2977
 
2913
- sig { params(project_arg: T.untyped).returns(T.untyped) }
2978
+ # _@param_ `project_arg`
2979
+ sig { params(project_arg: String).returns(T.any(Symbol, String)) }
2914
2980
  def project_arg_to_name(project_arg); end
2915
2981
 
2916
2982
  # Returns the value of attribute from_workspace_name.
@@ -2948,49 +3014,86 @@ module Checkoff
2948
3014
 
2949
3015
  # CLI subcommand that shows tasks in JSON form
2950
3016
  class ViewSubcommand
3017
+ # _@param_ `workspace_name`
3018
+ #
3019
+ # _@param_ `project_name`
3020
+ #
3021
+ # _@param_ `section_name`
3022
+ #
3023
+ # _@param_ `task_name`
3024
+ #
3025
+ # _@param_ `config`
3026
+ #
3027
+ # _@param_ `projects`
3028
+ #
3029
+ # _@param_ `sections`
3030
+ #
3031
+ # _@param_ `tasks`
3032
+ #
3033
+ # _@param_ `stderr`
2951
3034
  sig do
2952
3035
  params(
2953
- workspace_name: T.untyped,
2954
- project_name: T.untyped,
2955
- section_name: T.untyped,
2956
- task_name: T.untyped,
2957
- config: T.untyped,
2958
- projects: T.untyped,
2959
- sections: T.untyped,
2960
- tasks: T.untyped,
2961
- stderr: T.untyped
3036
+ workspace_name: String,
3037
+ project_name: T.any(String, Symbol),
3038
+ section_name: T.nilable(T.any(String, Symbol)),
3039
+ task_name: T.nilable(T.any(String, Symbol)),
3040
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3041
+ projects: Checkoff::Projects,
3042
+ sections: Checkoff::Sections,
3043
+ tasks: Checkoff::Tasks,
3044
+ stderr: IO
2962
3045
  ).void
2963
3046
  end
2964
3047
  def initialize(workspace_name, project_name, section_name, task_name, config: Checkoff::Internal::ConfigLoader.load(:asana), projects: Checkoff::Projects.new(config:), sections: Checkoff::Sections.new(config:,
2965
3048
  projects:), tasks: Checkoff::Tasks.new(config:,
2966
3049
  sections:), stderr: $stderr); end
2967
3050
 
2968
- sig { returns(T.untyped) }
3051
+ sig { void }
2969
3052
  def run; end
2970
3053
 
2971
- sig { params(project_name: T.untyped).returns(T.untyped) }
3054
+ # _@param_ `project_name`
3055
+ sig { params(project_name: String).returns(T.any(String, Symbol)) }
2972
3056
  def validate_and_assign_project_name(project_name); end
2973
3057
 
2974
- sig { params(workspace: T.untyped, project: T.untyped).returns(T.untyped) }
3058
+ # _@param_ `workspace`
3059
+ #
3060
+ # _@param_ `project`
3061
+ sig { params(workspace: T.any(String, Symbol), project: T.any(String, Symbol)).returns(String) }
2975
3062
  def run_on_project(workspace, project); end
2976
3063
 
2977
- sig { params(workspace: T.untyped, project: T.untyped, section: T.untyped).returns(T.untyped) }
3064
+ # _@param_ `workspace`
3065
+ #
3066
+ # _@param_ `project`
3067
+ #
3068
+ # _@param_ `section`
3069
+ sig { params(workspace: T.any(String, Symbol), project: T.any(String, Symbol), section: T.nilable(T.any(String, Symbol))).returns(String) }
2978
3070
  def run_on_section(workspace, project, section); end
2979
3071
 
3072
+ # _@param_ `workspace`
3073
+ #
3074
+ # _@param_ `project`
3075
+ #
3076
+ # _@param_ `section`
3077
+ #
3078
+ # _@param_ `task_name`
2980
3079
  sig do
2981
3080
  params(
2982
- workspace: T.untyped,
2983
- project: T.untyped,
2984
- section: T.untyped,
2985
- task_name: T.untyped
2986
- ).returns(T.untyped)
3081
+ workspace: T.any(String, Symbol),
3082
+ project: T.any(String, Symbol),
3083
+ section: T.nilable(T.any(String, Symbol)),
3084
+ task_name: String
3085
+ ).returns(String)
2987
3086
  end
2988
3087
  def run_on_task(workspace, project, section, task_name); end
2989
3088
 
2990
- sig { params(task: T.untyped).returns(T.untyped) }
3089
+ # sord warn - undefined is probably not a type, but using anyway
3090
+ # sord warn - undefined wasn't able to be resolved to a constant in this project
3091
+ # _@param_ `task`
3092
+ sig { params(task: Asana::Resources::Task).returns(T::Hash[Symbol, undefined]) }
2991
3093
  def task_to_hash(task); end
2992
3094
 
2993
- sig { params(tasks: T.untyped).returns(T.untyped) }
3095
+ # _@param_ `tasks`
3096
+ sig { params(tasks: T::Enumerable[Asana::Resources::Task]).returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
2994
3097
  def tasks_to_hash(tasks); end
2995
3098
 
2996
3099
  # Returns the value of attribute workspace_name.
@@ -3024,18 +3127,27 @@ module Checkoff
3024
3127
 
3025
3128
  # CLI subcommand that creates a task
3026
3129
  class QuickaddSubcommand
3130
+ # _@param_ `workspace_name`
3131
+ #
3132
+ # _@param_ `task_name`
3133
+ #
3134
+ # _@param_ `config`
3135
+ #
3136
+ # _@param_ `workspaces`
3137
+ #
3138
+ # _@param_ `tasks`
3027
3139
  sig do
3028
3140
  params(
3029
- workspace_name: T.untyped,
3030
- task_name: T.untyped,
3031
- config: T.untyped,
3032
- workspaces: T.untyped,
3033
- tasks: T.untyped
3141
+ workspace_name: String,
3142
+ task_name: String,
3143
+ config: T.any(Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3144
+ workspaces: Checkoff::Workspaces,
3145
+ tasks: Checkoff::Tasks
3034
3146
  ).void
3035
3147
  end
3036
3148
  def initialize(workspace_name, task_name, config: Checkoff::Internal::ConfigLoader.load(:asana), workspaces: Checkoff::Workspaces.new(config:), tasks: Checkoff::Tasks.new(config:)); end
3037
3149
 
3038
- sig { returns(T.untyped) }
3150
+ sig { void }
3039
3151
  def run; end
3040
3152
 
3041
3153
  # Returns the value of attribute workspace_name.
@@ -3073,7 +3185,7 @@ module Checkoff
3073
3185
  # _@param_ `workspaces`
3074
3186
  sig do
3075
3187
  params(
3076
- config: Checkoff::Internal::EnvFallbackConfigLoader,
3188
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3077
3189
  clients: Checkoff::Clients,
3078
3190
  client: Asana::Client,
3079
3191
  projects: Checkoff::Projects,
@@ -3099,6 +3211,23 @@ module Checkoff
3099
3211
  end
3100
3212
  def tasks(workspace_name, tag_name, only_uncompleted: true, extra_fields: []); end
3101
3213
 
3214
+ # _@param_ `workspace_name`
3215
+ #
3216
+ # _@param_ `tag_gid`
3217
+ #
3218
+ # _@param_ `only_uncompleted`
3219
+ #
3220
+ # _@param_ `extra_fields`
3221
+ sig do
3222
+ params(
3223
+ workspace_name: String,
3224
+ tag_gid: String,
3225
+ only_uncompleted: T::Boolean,
3226
+ extra_fields: T::Array[String]
3227
+ ).returns(T::Enumerable[Asana::Resources::Task])
3228
+ end
3229
+ def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
3230
+
3102
3231
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
3103
3232
  # _@param_ `workspace_name`
3104
3233
  #
@@ -3131,23 +3260,6 @@ module Checkoff
3131
3260
  sig { void }
3132
3261
  def self.run; end
3133
3262
 
3134
- # _@param_ `workspace_name`
3135
- #
3136
- # _@param_ `tag_gid`
3137
- #
3138
- # _@param_ `only_uncompleted`
3139
- #
3140
- # _@param_ `extra_fields`
3141
- sig do
3142
- params(
3143
- workspace_name: String,
3144
- tag_gid: String,
3145
- only_uncompleted: T::Boolean,
3146
- extra_fields: T::Array[String]
3147
- ).returns(T::Enumerable[Asana::Resources::Task])
3148
- end
3149
- def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
3150
-
3151
3263
  sig { returns(Checkoff::Workspaces) }
3152
3264
  attr_reader :workspaces
3153
3265
 
@@ -3188,7 +3300,7 @@ module Checkoff
3188
3300
  # _@param_ `asana_task`
3189
3301
  sig do
3190
3302
  params(
3191
- config: Checkoff::Internal::EnvFallbackConfigLoader,
3303
+ config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
3192
3304
  client: Asana::Client,
3193
3305
  workspaces: Checkoff::Workspaces,
3194
3306
  sections: Checkoff::Sections,
@@ -3331,9 +3443,9 @@ module Checkoff
3331
3443
  # <regular keys from API response>
3332
3444
  # +
3333
3445
  # unwrapped:
3334
- # membership_by_section_gid: Hash<String, Hash (membership)>
3335
- # membership_by_project_gid: Hash<String, Hash (membership)>
3336
- # membership_by_project_name: Hash<String, Hash (membership)>
3446
+ # membership_by_section_gid: Hash{String => Hash (membership)>
3447
+ # membership_by_project_gid: Hash{String => Hash (membership)>
3448
+ # membership_by_project_name: Hash{String => Hash (membership)>
3337
3449
  # task: String (name)
3338
3450
  #
3339
3451
  # _@param_ `task`
@@ -3400,6 +3512,7 @@ module Checkoff
3400
3512
  sig { returns(String) }
3401
3513
  def default_assignee_gid; end
3402
3514
 
3515
+ # @sg-ignore
3403
3516
  sig { returns(::Logger) }
3404
3517
  def logger; end
3405
3518
 
@@ -3467,7 +3580,7 @@ module Checkoff
3467
3580
  # _@param_ `asana_event_enrichment`
3468
3581
  sig do
3469
3582
  params(
3470
- config: Checkoff::Internal::EnvFallbackConfigLoader,
3583
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3471
3584
  workspaces: Checkoff::Workspaces,
3472
3585
  tasks: Checkoff::Tasks,
3473
3586
  sections: Checkoff::Sections,
@@ -3495,14 +3608,8 @@ module Checkoff
3495
3608
  sig { params(asana_event: T::Hash[T.untyped, T.untyped]).returns(T::Hash[T.untyped, T.untyped]) }
3496
3609
  def enrich_event(asana_event); end
3497
3610
 
3498
- # sord warn - "[String" does not appear to be a type
3499
- # sord warn - "Array<String>]" does not appear to be a type
3500
- # sord warn - Invalid hash, must have exactly two types: "Hash<String,[String,Array<String>]>".
3501
- # sord warn - "[String" does not appear to be a type
3502
- # sord warn - "Array<String>]" does not appear to be a type
3503
- # sord warn - Invalid hash, must have exactly two types: "Hash<String,[String,Array<String>]>".
3504
3611
  # _@param_ `filter`
3505
- sig { params(filter: T.untyped).returns(T.untyped) }
3612
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).returns(T::Hash[String, T.any(String, T::Array[String])]) }
3506
3613
  def enrich_filter(filter); end
3507
3614
 
3508
3615
  # _@param_ `webhook_subscription` — Hash of the request made to webhook POST endpoint - https://app.asana.com/api/1.0/webhooks https://developers.asana.com/reference/createwebhook
@@ -3512,6 +3619,7 @@ module Checkoff
3512
3619
  sig { void }
3513
3620
  def self.run; end
3514
3621
 
3622
+ # @sg-ignore
3515
3623
  sig { returns(::Logger) }
3516
3624
  def logger; end
3517
3625
 
@@ -3586,7 +3694,7 @@ module Checkoff
3586
3694
  # _@param_ `date_or_time`
3587
3695
  #
3588
3696
  # _@param_ `period` — Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
3589
- sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, T::Array[[Symbol, Integer]])).returns(T::Boolean) }
3697
+ sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3590
3698
  def in_period?(date_or_time, period); end
3591
3699
 
3592
3700
  # _@param_ `date_or_time`
@@ -3658,6 +3766,7 @@ module Checkoff
3658
3766
  sig { void }
3659
3767
  def self.run; end
3660
3768
 
3769
+ # @sg-ignore
3661
3770
  sig { returns(::Logger) }
3662
3771
  def logger; end
3663
3772
 
@@ -3698,7 +3807,7 @@ module Checkoff
3698
3807
  # _@param_ `config`
3699
3808
  #
3700
3809
  # _@param_ `asana_client_class`
3701
- sig { params(config: Checkoff::Internal::EnvFallbackConfigLoader, asana_client_class: T.class_of(Asana::Client)).void }
3810
+ sig { params(config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader), asana_client_class: T.class_of(Asana::Client)).void }
3702
3811
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), asana_client_class: Asana::Client); end
3703
3812
 
3704
3813
  sig { returns(Asana::Client) }
@@ -3719,7 +3828,7 @@ module Checkoff
3719
3828
  # _@param_ `client`
3720
3829
  #
3721
3830
  # _@param_ `projects`
3722
- sig { params(config: Checkoff::Internal::EnvFallbackConfigLoader, client: Asana::Client, projects: Checkoff::Projects).void }
3831
+ sig { params(config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]), client: Asana::Client, projects: Checkoff::Projects).void }
3723
3832
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, projects: Checkoff::Projects.new(config:,
3724
3833
  client:)); end
3725
3834
 
@@ -3780,7 +3889,7 @@ module Checkoff
3780
3889
  # _@param_ `timing`
3781
3890
  sig do
3782
3891
  params(
3783
- config: Checkoff::Internal::EnvFallbackConfigLoader,
3892
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3784
3893
  client: Asana::Client,
3785
3894
  workspaces: Checkoff::Workspaces,
3786
3895
  project_hashes: Checkoff::Internal::ProjectHashes,
@@ -3795,12 +3904,14 @@ module Checkoff
3795
3904
  sig { params(extra_fields: T::Array[String]).returns(T::Array[String]) }
3796
3905
  def task_fields(extra_fields: []); end
3797
3906
 
3907
+ # sord warn - undefined is probably not a type, but using anyway
3908
+ # sord warn - undefined wasn't able to be resolved to a constant in this project
3798
3909
  # Default options used in Asana API to pull tasks
3799
3910
  #
3800
3911
  # _@param_ `extra_fields`
3801
3912
  #
3802
3913
  # _@param_ `only_uncompleted`
3803
- sig { params(extra_fields: T::Array[String], only_uncompleted: T::Boolean).returns(T::Hash[Symbol, Object]) }
3914
+ sig { params(extra_fields: T::Array[String], only_uncompleted: T::Boolean).returns(T::Hash[Symbol, undefined]) }
3804
3915
  def task_options(extra_fields: [], only_uncompleted: false); end
3805
3916
 
3806
3917
  # _@param_ `extra_project_fields`
@@ -3885,7 +3996,7 @@ module Checkoff
3885
3996
  # _@param_ `project`
3886
3997
  #
3887
3998
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3888
- sig { params(project: Asana::Resources::Project, period: T.any(Symbol, T::Array[T.untyped])).returns(T::Boolean) }
3999
+ sig { params(project: Asana::Resources::Project, period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3889
4000
  def project_ready?(project, period: :now_or_before); end
3890
4001
 
3891
4002
  # _@param_ `project`
@@ -3893,7 +4004,7 @@ module Checkoff
3893
4004
  # _@param_ `field_name`
3894
4005
  #
3895
4006
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3896
- sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, T::Array[T.untyped])).returns(T::Boolean) }
4007
+ sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3897
4008
  def in_period?(project, field_name, period); end
3898
4009
 
3899
4010
  sig { returns(T::Hash[T.untyped, T.untyped]) }
@@ -3906,6 +4017,7 @@ module Checkoff
3906
4017
  sig { params(workspace_name: String).returns(Asana::Resources::Project) }
3907
4018
  def my_tasks(workspace_name); end
3908
4019
 
4020
+ # @sg-ignore
3909
4021
  sig { returns(::Logger) }
3910
4022
  def logger; end
3911
4023
 
@@ -3968,7 +4080,7 @@ module Checkoff
3968
4080
  # _@param_ `time`
3969
4081
  sig do
3970
4082
  params(
3971
- config: Checkoff::Internal::EnvFallbackConfigLoader,
4083
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
3972
4084
  client: Asana::Client,
3973
4085
  projects: Checkoff::Projects,
3974
4086
  workspaces: Checkoff::Workspaces,
@@ -3997,9 +4109,6 @@ module Checkoff
3997
4109
  sig { params(project_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Section]) }
3998
4110
  def sections_by_project_gid(project_gid, extra_fields: []); end
3999
4111
 
4000
- # sord warn - "[String" does not appear to be a type
4001
- # sord warn - "nil]" does not appear to be a type
4002
- # sord warn - Invalid hash, must have exactly two types: "Hash{[String, nil] => Enumerable<Asana::Resources::Task>}".
4003
4112
  # Given a workspace name and project name, then provide a Hash of
4004
4113
  # tasks with section name -> task list of the uncompleted tasks
4005
4114
  #
@@ -4016,7 +4125,7 @@ module Checkoff
4016
4125
  project_name: T.any(String, Symbol),
4017
4126
  only_uncompleted: T::Boolean,
4018
4127
  extra_fields: T::Array[String]
4019
- ).returns(T.untyped)
4128
+ ).returns(T::Hash[T.nilable(String), T::Enumerable[Asana::Resources::Task]])
4020
4129
  end
4021
4130
  def tasks_by_section(workspace_name, project_name, only_uncompleted: true, extra_fields: []); end
4022
4131
 
@@ -4051,6 +4160,7 @@ module Checkoff
4051
4160
  def tasks(workspace_name, project_name, section_name, only_uncompleted: true, extra_fields: []); end
4052
4161
 
4053
4162
  # Pulls just names of tasks from a given section.
4163
+ # @sg-ignore
4054
4164
  #
4055
4165
  # _@param_ `workspace_name`
4056
4166
  #
@@ -4120,9 +4230,6 @@ module Checkoff
4120
4230
  sig { params(response: Asana::HttpClient::Response).returns(T::Array[T.any(T::Hash[T.untyped, T.untyped], T::Hash[T.untyped, T.untyped])]) }
4121
4231
  def parse(response); end
4122
4232
 
4123
- # sord warn - "[String" does not appear to be a type
4124
- # sord warn - "nil]" does not appear to be a type
4125
- # sord warn - Invalid hash, must have exactly two types: "Hash<[String,nil], Enumerable<Asana::Resources::Task>>".
4126
4233
  # Given a project object, pull all tasks, then provide a Hash of
4127
4234
  # tasks with section name -> task list of the uncompleted tasks
4128
4235
  #
@@ -4131,29 +4238,23 @@ module Checkoff
4131
4238
  # _@param_ `only_uncompleted`
4132
4239
  #
4133
4240
  # _@param_ `extra_fields`
4134
- sig { params(project: Asana::Resources::Project, only_uncompleted: T::Boolean, extra_fields: T::Array[String]).returns(T.untyped) }
4241
+ sig { params(project: Asana::Resources::Project, only_uncompleted: T::Boolean, extra_fields: T::Array[String]).returns(T::Hash[T.nilable(String), T::Enumerable[Asana::Resources::Task]]) }
4135
4242
  def tasks_by_section_for_project(project, only_uncompleted: true, extra_fields: []); end
4136
4243
 
4137
- # sord warn - "[String" does not appear to be a type
4138
- # sord warn - "nil]" does not appear to be a type
4139
- # sord warn - Invalid hash, must have exactly two types: "Hash<[String,nil], Enumerable<Asana::Resources::Task>>".
4140
4244
  # Given a list of tasks, pull a Hash of tasks with section name -> task list
4141
4245
  #
4142
4246
  # _@param_ `tasks`
4143
4247
  #
4144
4248
  # _@param_ `project_gid`
4145
- sig { params(tasks: T::Enumerable[Asana::Resources::Task], project_gid: String).returns(T.untyped) }
4249
+ sig { params(tasks: T::Enumerable[Asana::Resources::Task], project_gid: String).returns(T::Hash[T.nilable(String), T::Enumerable[Asana::Resources::Task]]) }
4146
4250
  def by_section(tasks, project_gid); end
4147
4251
 
4148
- # sord warn - "[String" does not appear to be a type
4149
- # sord warn - "nil]" does not appear to be a type
4150
- # sord warn - Invalid hash, must have exactly two types: "Hash{[String, nil] => Enumerable<Asana::Resources::Task>}".
4151
4252
  # _@param_ `by_section`
4152
4253
  #
4153
4254
  # _@param_ `task`
4154
4255
  #
4155
4256
  # _@param_ `project_gid`
4156
- sig { params(by_section: T.untyped, task: Asana::Resources::Task, project_gid: String).void }
4257
+ sig { params(by_section: T::Hash[T.nilable(String), T::Array[Asana::Resources::Task]], task: Asana::Resources::Task, project_gid: String).void }
4157
4258
  def file_task_by_section(by_section, task, project_gid); end
4158
4259
 
4159
4260
  # _@param_ `workspace_name`
@@ -4162,6 +4263,7 @@ module Checkoff
4162
4263
  sig { params(workspace_name: String, project_name: T.any(String, Symbol)).returns(Asana::Resources::Project) }
4163
4264
  def project_or_raise(workspace_name, project_name); end
4164
4265
 
4266
+ # @sg-ignore
4165
4267
  sig { returns(::Logger) }
4166
4268
  def logger; end
4167
4269
 
@@ -4227,13 +4329,10 @@ module Checkoff
4227
4329
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
4228
4330
  def all_subtasks_completed?(task); end
4229
4331
 
4230
- # sord warn - "[nil" does not appear to be a type
4231
- # sord warn - "String]" does not appear to be a type
4232
- # sord warn - Invalid hash, must have exactly two types: "Hash<[nil,String], Enumerable<Asana::Resources::Task>>".
4233
4332
  # pulls a Hash of subtasks broken out by section
4234
4333
  #
4235
4334
  # _@param_ `tasks`
4236
- sig { params(tasks: T::Enumerable[Asana::Resources::Task]).returns(T.untyped) }
4335
+ sig { params(tasks: T::Enumerable[Asana::Resources::Task]).returns(T::Hash[T.nilable(String), T::Enumerable[Asana::Resources::Task]]) }
4237
4336
  def by_section(tasks); end
4238
4337
 
4239
4338
  # Returns all subtasks, including section headers
@@ -4267,7 +4366,7 @@ module Checkoff
4267
4366
  # _@param_ `by_section`
4268
4367
  #
4269
4368
  # _@param_ `task`
4270
- sig { params(current_section: T.nilable(String), by_section: T::Hash[T.untyped, T.untyped], task: Asana::Resources::Task).returns(T::Array[[String, T::Hash[T.untyped, T.untyped]]]) }
4369
+ sig { params(current_section: T.nilable(String), by_section: T::Hash[T.untyped, T.untyped], task: Asana::Resources::Task).returns([String, T::Hash[T.untyped, T.untyped]]) }
4271
4370
  def file_task_by_section(current_section, by_section, task); end
4272
4371
 
4273
4372
  sig { returns(Checkoff::Projects) }
@@ -4323,7 +4422,7 @@ module Checkoff
4323
4422
  # _@param_ `gid`
4324
4423
  #
4325
4424
  # _@param_ `resource_type`
4326
- sig { params(gid: String, resource_type: T.nilable(String)).returns(T::Array[[T.untyped, T.untyped, T.untyped, T.untyped]]) }
4425
+ sig { params(gid: String, resource_type: T.nilable(String)).returns([T.untyped, T.untyped, T.untyped, T.untyped]) }
4327
4426
  def resource_by_gid(gid, resource_type: nil); end
4328
4427
 
4329
4428
  # _@param_ `gid`
@@ -4396,8 +4495,6 @@ module Checkoff
4396
4495
  # _@param_ `task`
4397
4496
  #
4398
4497
  # _@param_ `limit_to_portfolio_gid`
4399
- #
4400
- # _@param_ `project_name`
4401
4498
  sig { params(task: Asana::Resources::Task, limit_to_portfolio_gid: T.nilable(String)).returns(T::Boolean) }
4402
4499
  def task_dependent_on_previous_section_last_milestone?(task, limit_to_portfolio_gid: nil); end
4403
4500
 
@@ -4435,8 +4532,8 @@ module Checkoff
4435
4532
 
4436
4533
  # Pull portfolios from Asana
4437
4534
  class Portfolios
4438
- extend CacheMethod::ClassMethods
4439
4535
  extend T::Sig
4536
+ extend CacheMethod::ClassMethods
4440
4537
  MINUTE = T.let(60, T.untyped)
4441
4538
  HOUR = T.let(T.let(MINUTE * 60, Numeric), T.untyped)
4442
4539
  DAY = T.let(T.let(24 * HOUR, Numeric), T.untyped)
@@ -4455,7 +4552,7 @@ module Checkoff
4455
4552
  # _@param_ `projects`
4456
4553
  sig do
4457
4554
  params(
4458
- config: Checkoff::Internal::EnvFallbackConfigLoader,
4555
+ config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
4459
4556
  clients: Checkoff::Clients,
4460
4557
  client: Asana::Client,
4461
4558
  projects: Checkoff::Projects,
@@ -4528,7 +4625,7 @@ module Checkoff
4528
4625
  # _@param_ `client`
4529
4626
  #
4530
4627
  # _@param_ `asana_workspace`
4531
- sig { params(config: Checkoff::Internal::EnvFallbackConfigLoader, client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4628
+ sig { params(config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader), client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4532
4629
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, asana_workspace: Asana::Resources::Workspace); end
4533
4630
 
4534
4631
  # Pulls an Asana workspace object
@@ -4664,6 +4761,7 @@ module Checkoff
4664
4761
  sig { void }
4665
4762
  def self.run; end
4666
4763
 
4764
+ # @sg-ignore
4667
4765
  sig { returns(::Logger) }
4668
4766
  def logger; end
4669
4767
 
@@ -4717,7 +4815,7 @@ module Checkoff
4717
4815
  # _@param_ `client`
4718
4816
  sig do
4719
4817
  params(
4720
- config: Checkoff::Internal::EnvFallbackConfigLoader,
4818
+ config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
4721
4819
  clients: Checkoff::Clients,
4722
4820
  client: Asana::Client,
4723
4821
  workspaces: Checkoff::Workspaces
@@ -4756,10 +4854,10 @@ module Checkoff
4756
4854
 
4757
4855
  # @sg-ignore
4758
4856
  #
4759
- # _@param_ `project`
4857
+ # _@param_ `resource`
4760
4858
  #
4761
4859
  # _@param_ `custom_field_name`
4762
- sig { params(resource: T.untyped, custom_field_name: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
4860
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
4763
4861
  def resource_custom_field_by_name(resource, custom_field_name); end
4764
4862
 
4765
4863
  # _@param_ `resource`
@@ -4774,13 +4872,10 @@ module Checkoff
4774
4872
  sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[T.untyped, T.untyped]) }
4775
4873
  def resource_custom_field_by_gid_or_raise(resource, custom_field_gid); end
4776
4874
 
4777
- # sord warn - "[Hash" does not appear to be a type
4778
- # sord warn - "Array<Hash>]" does not appear to be a type
4779
- # sord warn - Invalid hash, must have exactly two types: "Hash{String => [Hash,Array<Hash>]}".
4780
4875
  # @sg-ignore
4781
4876
  #
4782
4877
  # _@param_ `custom_field`
4783
- sig { params(custom_field: T.untyped).returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
4878
+ sig { params(custom_field: T::Hash[String, T.any(T::Hash[T.untyped, T.untyped], T::Array[T::Hash[T.untyped, T.untyped]])]).returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
4784
4879
  def resource_custom_field_enum_values(custom_field); end
4785
4880
 
4786
4881
  # _@param_ `custom_field`
@@ -4874,7 +4969,7 @@ module Checkoff
4874
4969
  api_params: T::Hash[String, Object],
4875
4970
  workspace_gid: String,
4876
4971
  extra_fields: T::Array[String],
4877
- task_selector: T::Array[T.untyped],
4972
+ task_selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])]),
4878
4973
  fetch_all: T::Boolean
4879
4974
  ).returns(T::Enumerable[Asana::Resources::Task])
4880
4975
  end
@@ -4913,18 +5008,21 @@ module Checkoff
4913
5008
  # _@param_ `url`
4914
5009
  #
4915
5010
  # _@param_ `extra_fields`
4916
- #
4917
- # _@param_ `fetch_all` — Ensure all results are provided by manually paginating
4918
5011
  sig { params(api_params: T::Hash[String, Object], workspace_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Task]) }
4919
5012
  def iterated_raw_task_search(api_params, workspace_gid:, extra_fields:); end
4920
5013
 
5014
+ # sord warn - undefined is probably not a type, but using anyway
5015
+ # sord warn - undefined wasn't able to be resolved to a constant in this project
5016
+ # @sg-ignore
5017
+ #
4921
5018
  # _@param_ `extra_fields`
4922
- sig { params(extra_fields: T::Array[String]).returns(T::Hash[String, Object]) }
5019
+ sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, undefined]) }
4923
5020
  def calculate_api_options(extra_fields); end
4924
5021
 
4925
5022
  sig { void }
4926
5023
  def self.run; end
4927
5024
 
5025
+ # @sg-ignore
4928
5026
  sig { returns(::Logger) }
4929
5027
  def logger; end
4930
5028
 
@@ -4983,13 +5081,15 @@ module Checkoff
4983
5081
  # _@param_ `tasks`
4984
5082
  #
4985
5083
  # _@param_ `timelines`
5084
+ #
5085
+ # _@param_ `custom_fields`
4986
5086
  sig do
4987
5087
  params(
4988
5088
  config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
4989
5089
  client: Asana::Client,
4990
5090
  tasks: Checkoff::Tasks,
4991
5091
  timelines: Checkoff::Timelines,
4992
- custom_fields: T.untyped
5092
+ custom_fields: Checkoff::CustomFields
4993
5093
  ).void
4994
5094
  end
4995
5095
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, tasks: Checkoff::Tasks.new(config:,
@@ -5000,7 +5100,7 @@ module Checkoff
5000
5100
  # _@param_ `task`
5001
5101
  #
5002
5102
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
5003
- sig { params(task: Asana::Resources::Task, task_selector: T::Array[[Symbol, T::Array[T.untyped]]]).returns(T::Boolean) }
5103
+ sig { params(task: Asana::Resources::Task, task_selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T::Boolean) }
5004
5104
  def filter_via_task_selector(task, task_selector); end
5005
5105
 
5006
5106
  # @sg-ignore
@@ -5011,7 +5111,8 @@ module Checkoff
5011
5111
  sig { returns(String) }
5012
5112
  def self.workspace_name; end
5013
5113
 
5014
- sig { returns(T::Array[T.untyped]) }
5114
+ # @sg-ignore
5115
+ sig { returns([Symbol, T::Array[T.untyped]]) }
5015
5116
  def self.task_selector; end
5016
5117
 
5017
5118
  sig { void }
@@ -5065,7 +5166,7 @@ module Checkoff
5065
5166
  # _@param_ `project`
5066
5167
  #
5067
5168
  # _@param_ `project_selector` — Filter based on project details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
5068
- sig { params(project: Asana::Resources::Project, project_selector: T::Array[[Symbol, T::Array[T.untyped]]]).returns(T::Boolean) }
5169
+ sig { params(project: Asana::Resources::Project, project_selector: [Symbol, T::Array[T.untyped]]).returns(T::Boolean) }
5069
5170
  def filter_via_project_selector(project, project_selector); end
5070
5171
 
5071
5172
  sig { void }
@@ -5122,7 +5223,7 @@ module Checkoff
5122
5223
  # _@param_ `section`
5123
5224
  #
5124
5225
  # _@param_ `section_selector` — Filter based on section details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
5125
- sig { params(section: Asana::Resources::Section, section_selector: T::Array[[Symbol, T::Array[T.untyped]]]).returns(T::Boolean) }
5226
+ sig { params(section: Asana::Resources::Section, section_selector: [Symbol, T::Array[T.untyped]]).returns(T::Boolean) }
5126
5227
  def filter_via_section_selector(section, section_selector); end
5127
5228
 
5128
5229
  sig { void }
@@ -5159,11 +5260,10 @@ module Checkoff
5159
5260
  sig { params(task_hash: T::Hash[T.untyped, T.untyped]).void }
5160
5261
  def unwrap_custom_fields(task_hash); end
5161
5262
 
5162
- # sord warn - Invalid hash, must have exactly two types: "Hash<String, Hash, Array>".
5163
5263
  # _@param_ `task_hash`
5164
5264
  #
5165
5265
  # _@param_ `memberships`
5166
- sig { params(task_hash: T.untyped, memberships: T::Array[T::Hash[T.untyped, T.untyped]]).void }
5266
+ sig { params(task_hash: T::Hash[String, T.any(String, T::Hash[T.untyped, T.untyped], T::Array[T.untyped])], memberships: T::Array[T::Hash[T.untyped, T.untyped]]).void }
5167
5267
  def add_user_task_list(task_hash, memberships); end
5168
5268
 
5169
5269
  # _@param_ `task_hash`
@@ -5218,16 +5318,12 @@ module Checkoff
5218
5318
  # @sg-ignore
5219
5319
  #
5220
5320
  # _@param_ `task`
5221
- #
5222
- # _@param_ `field_name`
5223
5321
  sig { params(task: Asana::Resources::Task).returns(T.nilable(T.any(Date, Time))) }
5224
5322
  def start_date_or_time(task); end
5225
5323
 
5226
5324
  # @sg-ignore
5227
5325
  #
5228
5326
  # _@param_ `task`
5229
- #
5230
- # _@param_ `field_name`
5231
5327
  sig { params(task: Asana::Resources::Task).returns(T.nilable(T.any(Date, Time))) }
5232
5328
  def due_date_or_time(task); end
5233
5329
 
@@ -5257,19 +5353,21 @@ module Checkoff
5257
5353
  # _@param_ `name`
5258
5354
  #
5259
5355
  # _@param_ `value`
5260
- sig { params(name: Symbol, value: T.any(Object, T::Boolean), block: T.untyped).returns(T.any(Object, T::Boolean)) }
5356
+ sig { params(name: Symbol, value: T.any(Object, T::Boolean), block: T.proc.returns(T)).returns(T) }
5261
5357
  def with_thread_local_variable(name, value, &block); end
5262
5358
  end
5263
5359
 
5264
5360
  # Use the provided config from a YAML file, and fall back to env
5265
5361
  # variable if it's not populated for a key'
5266
5362
  class EnvFallbackConfigLoader
5363
+ # sord warn - undefined is probably not a type, but using anyway
5364
+ # sord warn - undefined wasn't able to be resolved to a constant in this project
5267
5365
  # _@param_ `config`
5268
5366
  #
5269
5367
  # _@param_ `sym`
5270
5368
  #
5271
5369
  # _@param_ `yaml_filename`
5272
- sig { params(config: T::Hash[Symbol, Object], sym: Symbol, yaml_filename: String).void }
5370
+ sig { params(config: T::Hash[Symbol, undefined], sym: Symbol, yaml_filename: String).void }
5273
5371
  def initialize(config, sym, yaml_filename); end
5274
5372
 
5275
5373
  # _@param_ `key`
@@ -5287,14 +5385,14 @@ module Checkoff
5287
5385
 
5288
5386
  # Load configuration file
5289
5387
  class ConfigLoader
5290
- sig { params(sym: T.untyped).returns(EnvFallbackConfigLoader) }
5388
+ # _@param_ `sym`
5389
+ sig { params(sym: Symbol).returns(EnvFallbackConfigLoader) }
5291
5390
  def self.load(sym); end
5292
5391
 
5293
- # sord warn - "[String" does not appear to be a type
5294
- # sord warn - "Symbol]" does not appear to be a type
5295
- # sord warn - Invalid hash, must have exactly two types: "Hash<[String, Symbol], Object>".
5392
+ # sord warn - undefined is probably not a type, but using anyway
5393
+ # sord warn - undefined wasn't able to be resolved to a constant in this project
5296
5394
  # _@param_ `sym`
5297
- sig { params(sym: Symbol).returns(T.untyped) }
5395
+ sig { params(sym: Symbol).returns(T::Hash[Symbol, undefined]) }
5298
5396
  def self.load_yaml_file(sym); end
5299
5397
 
5300
5398
  # _@param_ `sym`
@@ -5342,16 +5440,12 @@ module Checkoff
5342
5440
  # @sg-ignore
5343
5441
  #
5344
5442
  # _@param_ `project`
5345
- #
5346
- # _@param_ `field_name`
5347
5443
  sig { params(project: Asana::Resources::Project).returns(T.nilable(Date)) }
5348
5444
  def start_date(project); end
5349
5445
 
5350
5446
  # @sg-ignore
5351
5447
  #
5352
5448
  # _@param_ `project`
5353
- #
5354
- # _@param_ `field_name`
5355
5449
  sig { params(project: Asana::Resources::Project).returns(T.nilable(Date)) }
5356
5450
  def due_date(project); end
5357
5451
 
@@ -5379,45 +5473,34 @@ module Checkoff
5379
5473
  def initialize(_deps = {}); end
5380
5474
 
5381
5475
  # _@param_ `url`
5382
- sig { params(url: String).returns([T::Hash[String, String], T::Hash[String, String]]) }
5476
+ sig { params(url: String).returns([T::Hash[String, String], T::Array[T.untyped]]) }
5383
5477
  def convert_params(url); end
5384
5478
 
5385
- # sord warn - "[Symbol" does not appear to be a type
5386
- # sord warn - "Array]" does not appear to be a type
5387
5479
  # _@param_ `date_url_params`
5388
- sig { params(date_url_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5480
+ sig { params(date_url_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5389
5481
  def convert_date_params(date_url_params); end
5390
5482
 
5391
5483
  # _@param_ `simple_url_params`
5392
5484
  sig { params(simple_url_params: T::Hash[String, T::Array[String]]).returns(T::Hash[String, String]) }
5393
5485
  def convert_simple_params(simple_url_params); end
5394
5486
 
5395
- # sord warn - "[Symbol" does not appear to be a type
5396
- # sord warn - "Array]" does not appear to be a type
5397
5487
  # _@param_ `custom_field_params`
5398
- sig { params(custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5488
+ sig { params(custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5399
5489
  def convert_custom_field_params(custom_field_params); end
5400
5490
 
5401
5491
  # _@param_ `url_params`
5402
- sig { params(url_params: T::Hash[String, String]).returns([T::Hash[String, String], T::Hash[String, String], T::Hash[String, String]]) }
5492
+ sig { params(url_params: T::Hash[String, String]).returns([T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]]]) }
5403
5493
  def partition_url_params(url_params); end
5404
5494
  end
5405
5495
 
5406
5496
  # Merge task selectors and search API arguments
5407
5497
  class ResultsMerger
5408
- # sord warn - "[Hash<String, String>]" does not appear to be a type
5409
5498
  # _@param_ `args`
5410
- #
5411
- # _@return_ — Hash<String, String>
5412
- sig { params(args: T::Array[T.untyped]).returns(T::Hash[String, String]) }
5499
+ sig { params(args: T::Array[T::Hash[String, String]]).returns(T::Hash[String, String]) }
5413
5500
  def self.merge_args(*args); end
5414
5501
 
5415
- # sord warn - "[Symbol" does not appear to be a type
5416
- # sord warn - "Array]" does not appear to be a type
5417
- # sord warn - "[Symbol" does not appear to be a type
5418
- # sord warn - "Array]" does not appear to be a type
5419
5502
  # _@param_ `task_selectors`
5420
- sig { params(task_selectors: T::Array[T::Array[T.any(T.untyped, T.untyped)]]).returns(T::Array[T.any(T.untyped, T.untyped)]) }
5503
+ sig { params(task_selectors: T::Array[T.any(Symbol, T::Array[T.untyped])]).returns([Symbol, T::Array[T.untyped], T::Array[T.untyped]]) }
5421
5504
  def self.merge_task_selectors(*task_selectors); end
5422
5505
  end
5423
5506
 
@@ -5428,12 +5511,14 @@ module Checkoff
5428
5511
  # _@param_ `gid`
5429
5512
  #
5430
5513
  # _@param_ `remaining_params`
5431
- sig { params(gid: String, remaining_params: T::Hash[T.untyped, T.untyped]).void }
5514
+ sig { params(gid: String, remaining_params: T::Hash[String, T::Array[String]]).void }
5432
5515
  def initialize(gid, remaining_params); end
5433
5516
 
5434
5517
  sig { void }
5435
5518
  def ensure_no_remaining_params!; end
5436
5519
 
5520
+ # @sg-ignore
5521
+ #
5437
5522
  # _@param_ `param_name`
5438
5523
  sig { params(param_name: String).returns(String) }
5439
5524
  def fetch_solo_param(param_name); end
@@ -5441,25 +5526,25 @@ module Checkoff
5441
5526
  sig { returns(String) }
5442
5527
  attr_reader :gid
5443
5528
 
5444
- sig { returns(T::Hash[T.untyped, T.untyped]) }
5529
+ sig { returns(T::Hash[String, T::Array[String]]) }
5445
5530
  attr_reader :remaining_params
5446
5531
  end
5447
5532
 
5448
5533
  # custom_field_#{gid}.variant = 'less_than'
5449
5534
  class LessThan < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5450
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5535
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String)]]) }
5451
5536
  def convert; end
5452
5537
  end
5453
5538
 
5454
5539
  # custom_field_#{gid}.variant = 'greater_than'
5455
5540
  class GreaterThan < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5456
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5541
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String)]]) }
5457
5542
  def convert; end
5458
5543
  end
5459
5544
 
5460
5545
  # custom_field_#{gid}.variant = 'equals'
5461
5546
  class Equals < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5462
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5547
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String)]]) }
5463
5548
  def convert; end
5464
5549
  end
5465
5550
 
@@ -5467,7 +5552,7 @@ module Checkoff
5467
5552
  #
5468
5553
  # custom_field_#{gid}.variant = 'is_not'
5469
5554
  class IsNot < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5470
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5555
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5471
5556
  def convert; end
5472
5557
  end
5473
5558
 
@@ -5475,7 +5560,7 @@ module Checkoff
5475
5560
  #
5476
5561
  # custom_field_#{gid}.variant = 'doesnt_contain_any'
5477
5562
  class DoesntContainAny < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5478
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5563
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5479
5564
  def convert; end
5480
5565
  end
5481
5566
 
@@ -5483,7 +5568,7 @@ module Checkoff
5483
5568
  #
5484
5569
  # custom_field_#{gid}.variant = 'contains_any'
5485
5570
  class ContainsAny < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5486
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5571
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5487
5572
  def convert; end
5488
5573
  end
5489
5574
 
@@ -5491,13 +5576,13 @@ module Checkoff
5491
5576
  #
5492
5577
  # custom_field_#{gid}.variant = 'contains_all'
5493
5578
  class ContainsAll < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5494
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5579
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5495
5580
  def convert; end
5496
5581
  end
5497
5582
 
5498
5583
  # custom_field_#{gid}.variant = 'no_value'
5499
5584
  class NoValue < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5500
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5585
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped], Symbol)]]) }
5501
5586
  def convert; end
5502
5587
  end
5503
5588
 
@@ -5505,13 +5590,13 @@ module Checkoff
5505
5590
  #
5506
5591
  # Not used for multi-select fields
5507
5592
  class AnyValue < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5508
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5593
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5509
5594
  def convert; end
5510
5595
  end
5511
5596
 
5512
5597
  # custom_field_#{gid}.variant = 'is'
5513
5598
  class Is < Checkoff::Internal::SearchUrl::CustomFieldVariant::CustomFieldVariant
5514
- sig { returns(T::Array[[T::Hash[T.untyped, T.untyped], T::Array[T.untyped]]]) }
5599
+ sig { returns([T::Hash[String, String], T::Array[T.any(T::Array[String], String, T::Array[T.untyped])]]) }
5515
5600
  def convert; end
5516
5601
  end
5517
5602
  end
@@ -5529,50 +5614,36 @@ module Checkoff
5529
5614
  sig { params(date_url_params: T::Hash[String, T::Array[String]]).void }
5530
5615
  def initialize(date_url_params:); end
5531
5616
 
5532
- # sord warn - "[Symbol" does not appear to be a type
5533
- # sord warn - "Array]" does not appear to be a type
5534
5617
  # @sg-ignore
5535
- sig { returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5618
+ sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5536
5619
  def convert; end
5537
5620
 
5538
- # sord warn - "[Symbol" does not appear to be a type
5539
- # sord warn - "Array]" does not appear to be a type
5540
- # @sg-ignore
5541
- #
5542
5621
  # _@param_ `prefix`
5543
- sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5622
+ sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5544
5623
  def convert_for_prefix(prefix); end
5545
5624
 
5546
- # sord warn - "[Symbol" does not appear to be a type
5547
- # sord warn - "Array]" does not appear to be a type
5548
5625
  # _@param_ `prefix`
5549
5626
  #
5550
5627
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
5551
- sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5628
+ sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5552
5629
  def handle_through_next(prefix); end
5553
5630
 
5554
- # sord warn - "[Symbol" does not appear to be a type
5555
- # sord warn - "Array]" does not appear to be a type
5556
5631
  # _@param_ `prefix`
5557
5632
  #
5558
5633
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
5559
- sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5634
+ sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5560
5635
  def handle_between(prefix); end
5561
5636
 
5562
- # sord warn - "[Symbol" does not appear to be a type
5563
- # sord warn - "Array]" does not appear to be a type
5564
5637
  # _@param_ `prefix`
5565
5638
  #
5566
5639
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
5567
- sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5640
+ sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5568
5641
  def handle_within_last(prefix); end
5569
5642
 
5570
- # sord warn - "[Symbol" does not appear to be a type
5571
- # sord warn - "Array]" does not appear to be a type
5572
5643
  # _@param_ `prefix`
5573
5644
  #
5574
5645
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
5575
- sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5646
+ sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5576
5647
  def handle_within_next(prefix); end
5577
5648
 
5578
5649
  # _@param_ `param_key`
@@ -5651,7 +5722,7 @@ module Checkoff
5651
5722
 
5652
5723
  # Handle 'completion' search url param
5653
5724
  class Completion < Checkoff::Internal::SearchUrl::SimpleParam::SimpleParam
5654
- sig { returns(T::Array[String]) }
5725
+ sig { returns(T::Array[T.any(String, T::Boolean)]) }
5655
5726
  def convert; end
5656
5727
  end
5657
5728
 
@@ -5663,9 +5734,7 @@ module Checkoff
5663
5734
 
5664
5735
  # handle 'subtask' search url param
5665
5736
  class Subtask < Checkoff::Internal::SearchUrl::SimpleParam::SimpleParam
5666
- # sord warn - "[String" does not appear to be a type
5667
- # sord warn - "Boolean]" does not appear to be a type
5668
- sig { returns(T::Array[T.any(T.untyped, T.untyped)]) }
5737
+ sig { returns(T::Array[T.any(String, T::Boolean)]) }
5669
5738
  def convert; end
5670
5739
  end
5671
5740
 
@@ -5753,23 +5822,19 @@ module Checkoff
5753
5822
  sig { params(custom_field_params: T::Hash[String, T::Array[String]]).void }
5754
5823
  def initialize(custom_field_params:); end
5755
5824
 
5756
- # sord warn - "[Symbol" does not appear to be a type
5757
- # sord warn - "Array]" does not appear to be a type
5758
- sig { returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5825
+ sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5759
5826
  def convert; end
5760
5827
 
5761
5828
  # @sg-ignore
5762
5829
  sig { returns(T::Hash[String, T::Hash[T.untyped, T.untyped]]) }
5763
5830
  def by_custom_field; end
5764
5831
 
5765
- # sord warn - "[Symbol" does not appear to be a type
5766
- # sord warn - "Array]" does not appear to be a type
5767
5832
  # @sg-ignore
5768
5833
  #
5769
5834
  # _@param_ `gid`
5770
5835
  #
5771
5836
  # _@param_ `single_custom_field_params`
5772
- sig { params(gid: String, single_custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(T.untyped, T.untyped)]]) }
5837
+ sig { params(gid: String, single_custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5773
5838
  def convert_single_custom_field_params(gid, single_custom_field_params); end
5774
5839
 
5775
5840
  # _@param_ `key`
@@ -5842,6 +5907,7 @@ module Checkoff
5842
5907
  sig { params(key: String, asana_event: T::Hash[T.untyped, T.untyped], fields: T::Array[String]).returns(T.nilable(Asana::Resources::Task)) }
5843
5908
  def uncached_fetch_task(key, asana_event, fields); end
5844
5909
 
5910
+ # @sg-ignore
5845
5911
  sig { returns(::Logger) }
5846
5912
  def logger; end
5847
5913
 
@@ -5890,8 +5956,6 @@ module Checkoff
5890
5956
  # _@param_ `clients`
5891
5957
  #
5892
5958
  # _@param_ `client`
5893
- #
5894
- # _@param_ `asana_event_enrichment`
5895
5959
  sig do
5896
5960
  params(
5897
5961
  config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
@@ -5913,18 +5977,12 @@ module Checkoff
5913
5977
  sig { params(asana_event: T::Hash[T.untyped, T.untyped]).returns(T::Hash[T.untyped, T.untyped]) }
5914
5978
  def enrich_event(asana_event); end
5915
5979
 
5916
- # sord warn - "[String" does not appear to be a type
5917
- # sord warn - "Array<String>]" does not appear to be a type
5918
- # sord warn - Invalid hash, must have exactly two types: "Hash<String,[String,Array<String>]>".
5919
- # sord warn - "[String" does not appear to be a type
5920
- # sord warn - "Array<String>]" does not appear to be a type
5921
- # sord warn - Invalid hash, must have exactly two types: "Hash<String,[String,Array<String>]>".
5922
5980
  # _@param_ `filter`
5923
- sig { params(filter: T.untyped).returns(T.untyped) }
5981
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).returns(T::Hash[String, T.any(String, T::Array[String])]) }
5924
5982
  def enrich_filter(filter); end
5925
5983
 
5926
5984
  # _@param_ `webhook_subscription` — Hash of the request made to webhook POST endpoint - https://app.asana.com/api/1.0/webhooks https://developers.asana.com/reference/createwebhook
5927
- sig { params(webhook_subscription: T::Hash[T.untyped, T.untyped]).void }
5985
+ sig { params(webhook_subscription: T.nilable(T::Hash[T.untyped, T.untyped])).void }
5928
5986
  def enrich_webhook_subscription!(webhook_subscription); end
5929
5987
 
5930
5988
  # sord warn - "[String" does not appear to be a type
@@ -5937,22 +5995,19 @@ module Checkoff
5937
5995
  # _@param_ `gid`
5938
5996
  #
5939
5997
  # _@param_ `resource_type`
5940
- sig { params(gid: String, resource_type: T.nilable(String)).returns(T::Array[[T.untyped, T.untyped, T.untyped, T.untyped]]) }
5998
+ sig { params(gid: String, resource_type: T.nilable(String)).returns([T.untyped, T.untyped, T.untyped, T.untyped]) }
5941
5999
  def enrich_gid(gid, resource_type: nil); end
5942
6000
 
5943
6001
  # _@param_ `filter`
5944
- sig { params(filter: T::Hash[String, String]).returns(T.nilable(String)) }
6002
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).returns(T.nilable(String)) }
5945
6003
  def enrich_filter_parent_gid!(filter); end
5946
6004
 
5947
6005
  # _@param_ `filter`
5948
- sig { params(filter: T::Hash[String, String]).void }
6006
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).void }
5949
6007
  def enrich_filter_resource!(filter); end
5950
6008
 
5951
- # sord warn - "[String" does not appear to be a type
5952
- # sord warn - "Array<String>]" does not appear to be a type
5953
- # sord warn - Invalid hash, must have exactly two types: "Hash{String => [String,Array<String>]}".
5954
6009
  # _@param_ `filter`
5955
- sig { params(filter: T.untyped).void }
6010
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).void }
5956
6011
  def enrich_filter_section!(filter); end
5957
6012
 
5958
6013
  # sord warn - "'resource'" does not appear to be a type
@@ -5965,6 +6020,7 @@ module Checkoff
5965
6020
  sig { params(asana_event: T::Hash[T.untyped, T::Hash[T.untyped, T.untyped]]).void }
5966
6021
  def enrich_event_resource!(asana_event); end
5967
6022
 
6023
+ # @sg-ignore
5968
6024
  sig { returns(::Logger) }
5969
6025
  def logger; end
5970
6026
 
@@ -6015,7 +6071,7 @@ module Checkoff
6015
6071
  # Base class to evaluate Asana resource selectors against an Asana resource
6016
6072
  class SelectorEvaluator
6017
6073
  # _@param_ `selector`
6018
- sig { params(selector: T::Array[T.untyped]).returns(T.nilable(T.any(T::Boolean, Object))) }
6074
+ sig { params(selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T.nilable(T.any(T::Boolean, Object, T::Array[T.untyped]))) }
6019
6075
  def evaluate(selector); end
6020
6076
 
6021
6077
  sig { returns(T::Hash[T.untyped, T.untyped]) }
@@ -6255,13 +6311,9 @@ module Checkoff
6255
6311
  sig { returns(T::Boolean) }
6256
6312
  def matches?; end
6257
6313
 
6258
- # only projects in this portfolio will be evaluated.
6259
- #
6260
6314
  # _@param_ `task`
6261
6315
  #
6262
- # _@param_ `project_name`
6263
- #
6264
- # _@param_ `limit_to_portfolio_gid` — If specified,
6316
+ # _@param_ `limit_to_portfolio_gid` — If specified, only projects in this portfolio will be evaluated.
6265
6317
  sig { params(task: Asana::Resources::Task, limit_to_portfolio_gid: T.nilable(String)).returns(T::Boolean) }
6266
6318
  def evaluate(task, limit_to_portfolio_gid: nil); end
6267
6319
  end
@@ -6338,18 +6390,20 @@ module Checkoff
6338
6390
  # _@param_ `timelines`
6339
6391
  #
6340
6392
  # _@param_ `custom_fields`
6393
+ #
6394
+ # _@param_ `_kwargs`
6341
6395
  sig do
6342
6396
  params(
6343
- selector: T.any(T::Array[[Symbol, T::Array[T.untyped]]], String),
6397
+ selector: T.any([Symbol, T::Array[T.untyped]], String),
6344
6398
  tasks: Checkoff::Tasks,
6345
6399
  timelines: Checkoff::Timelines,
6346
6400
  custom_fields: Checkoff::CustomFields,
6347
- _kwargs: T.untyped
6401
+ _kwargs: T::Hash[T.untyped, T.untyped]
6348
6402
  ).void
6349
6403
  end
6350
6404
  def initialize(selector:, tasks:, timelines:, custom_fields:, **_kwargs); end
6351
6405
 
6352
- sig { returns(T::Array[[Symbol, T::Array[T.untyped]]]) }
6406
+ sig { returns([Symbol, T::Array[T.untyped]]) }
6353
6407
  attr_reader :selector
6354
6408
  end
6355
6409
  end
@@ -6530,12 +6584,12 @@ module Checkoff
6530
6584
  sig { params(_index: Integer).returns(T::Boolean) }
6531
6585
  def evaluate_arg?(_index); end
6532
6586
 
6533
- # @sg-ignore
6534
- #
6587
+ # sord warn - boolish is probably not a type, but using anyway
6588
+ # sord warn - boolish wasn't able to be resolved to a constant in this project
6535
6589
  # _@param_ `resource`
6536
6590
  #
6537
6591
  # _@param_ `prefix`
6538
- sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), prefix: String).returns(T::Boolean) }
6592
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), prefix: String).returns(boolish) }
6539
6593
  def evaluate(resource, prefix); end
6540
6594
  end
6541
6595
 
@@ -6556,10 +6610,12 @@ module Checkoff
6556
6610
  # _@param_ `selector`
6557
6611
  #
6558
6612
  # _@param_ `custom_fields`
6559
- sig { params(selector: T.any(T::Array[[Symbol, T::Array[T.untyped]]], String), custom_fields: Checkoff::CustomFields, _kwargs: T.untyped).void }
6613
+ #
6614
+ # _@param_ `_kwargs`
6615
+ sig { params(selector: T.any([Symbol, T::Array[T.untyped]], String), custom_fields: Checkoff::CustomFields, _kwargs: T::Hash[T.untyped, T.untyped]).void }
6560
6616
  def initialize(selector:, custom_fields:, **_kwargs); end
6561
6617
 
6562
- sig { returns(T::Array[[Symbol, T::Array[T.untyped]]]) }
6618
+ sig { returns(T.any([Symbol, T::Array[T.untyped]], String)) }
6563
6619
  attr_reader :selector
6564
6620
  end
6565
6621
  end
@@ -6626,18 +6682,20 @@ module Checkoff
6626
6682
  # _@param_ `portfolios`
6627
6683
  #
6628
6684
  # _@param_ `workspaces`
6685
+ #
6686
+ # _@param_ `_kwargs`
6629
6687
  sig do
6630
6688
  params(
6631
- selector: T.any(T::Array[[Symbol, T::Array[T.untyped]]], String),
6689
+ selector: T.any([Symbol, T::Array[T.untyped]], String),
6632
6690
  projects: Checkoff::Projects,
6633
6691
  portfolios: Checkoff::Portfolios,
6634
6692
  workspaces: Checkoff::Workspaces,
6635
- _kwargs: T.untyped
6693
+ _kwargs: T::Hash[T.untyped, T.untyped]
6636
6694
  ).void
6637
6695
  end
6638
6696
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
6639
6697
 
6640
- sig { returns(T::Array[[Symbol, T::Array[T.untyped]]]) }
6698
+ sig { returns([Symbol, T::Array[T.untyped]]) }
6641
6699
  attr_reader :selector
6642
6700
  end
6643
6701
  end
@@ -6683,7 +6741,7 @@ module Checkoff
6683
6741
  # _@param_ `kwargs`
6684
6742
  sig do
6685
6743
  params(
6686
- selector: T.any(T::Array[[Symbol, T::Array[T.untyped]]], String),
6744
+ selector: T.any([Symbol, T::Array[T.untyped]], String),
6687
6745
  sections: Checkoff::Sections,
6688
6746
  client: Asana::Client,
6689
6747
  kwargs: T::Hash[T.untyped, T.untyped]
@@ -6691,7 +6749,7 @@ module Checkoff
6691
6749
  end
6692
6750
  def initialize(selector:, sections:, client:, **kwargs); end
6693
6751
 
6694
- sig { returns(T::Array[[Symbol, T::Array[T.untyped]]]) }
6752
+ sig { returns([Symbol, T::Array[T.untyped]]) }
6695
6753
  attr_reader :selector
6696
6754
 
6697
6755
  sig { returns(Asana::Client) }
@@ -6703,8 +6761,6 @@ module Checkoff
6703
6761
  class FunctionEvaluator
6704
6762
  include Logging
6705
6763
 
6706
- # @sg-ignore
6707
- #
6708
6764
  # _@param_ `_index`
6709
6765
  sig { params(_index: Integer).returns(T::Boolean) }
6710
6766
  def evaluate_arg?(_index); end
@@ -6727,6 +6783,7 @@ module Checkoff
6727
6783
  sig { params(object: Object, fn_name: Symbol).returns(T::Boolean) }
6728
6784
  def fn?(object, fn_name); end
6729
6785
 
6786
+ # @sg-ignore
6730
6787
  sig { returns(::Logger) }
6731
6788
  def logger; end
6732
6789
 
@@ -6862,7 +6919,7 @@ end - [Checkoff::SelectorClasses::Common::FunctionEvaluator]).freeze, T.untyped)
6862
6919
  SECTION_FUNCTION_EVALUATORS = T.let((Checkoff::SelectorClasses::Section.constants.map do |const|
6863
6920
  Checkoff::SelectorClasses::Section.const_get(const)
6864
6921
  end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped)
6865
- FUNCTION_EVALUTORS = T.let((COMMON_FUNCTION_EVALUATORS + SECTION_FUNCTION_EVALUATORS).freeze, T.untyped)
6922
+ FUNCTION_EVALUATORS = T.let((COMMON_FUNCTION_EVALUATORS + SECTION_FUNCTION_EVALUATORS).freeze, T.untyped)
6866
6923
 
6867
6924
  # _@param_ `section`
6868
6925
  #
@@ -6873,14 +6930,16 @@ end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped
6873
6930
  # _@param_ `sections`
6874
6931
  #
6875
6932
  # _@param_ `custom_fields`
6933
+ #
6934
+ # _@param_ `_kwargs`
6876
6935
  sig do
6877
6936
  params(
6878
- section: Asana::Resources::Project,
6937
+ section: Asana::Resources::Section,
6879
6938
  client: Asana::Client,
6880
6939
  projects: Checkoff::Projects,
6881
6940
  sections: Checkoff::Sections,
6882
6941
  custom_fields: Checkoff::CustomFields,
6883
- _kwargs: T.untyped
6942
+ _kwargs: T::Hash[T.untyped, T.untyped]
6884
6943
  ).void
6885
6944
  end
6886
6945
  def initialize(section:, client:, projects: Checkoff::Projects.new(client:), sections: Checkoff::Sections.new(client:), custom_fields: Checkoff::CustomFields.new(client:), **_kwargs); end
@@ -6910,6 +6969,7 @@ end
6910
6969
 
6911
6970
  # include this to add ability to log at different levels
6912
6971
  module Logging
6972
+ # @sg-ignore
6913
6973
  sig { returns(::Logger) }
6914
6974
  def logger; end
6915
6975
 
@@ -6937,26 +6997,3 @@ module Logging
6937
6997
  sig { returns(Symbol) }
6938
6998
  def log_level; end
6939
6999
  end
6940
-
6941
- module T
6942
- # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
6943
- # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
6944
- # _@param_ `type`
6945
- sig { params(type: T.any(T::Types::Base, T.class_of(Object))).returns(T::Types::Base) }
6946
- def self.nilable(type); end
6947
-
6948
- # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
6949
- # _@param_ `obj`
6950
- #
6951
- # _@param_ `type`
6952
- sig { params(obj: BasicObject, type: T.any(T::Types::Base, T.class_of(Object))).returns(BasicObject) }
6953
- def self.let(obj, type); end
6954
-
6955
- # sord warn - T::Types::Base wasn't able to be resolved to a constant in this project
6956
- sig { returns(T::Types::Base) }
6957
- def self.untyped; end
6958
-
6959
- class Struct
6960
- extend T::Props::ClassMethods
6961
- end
6962
- end