checkoff 0.245.0 → 0.246.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16837626a210b7327f511b18077cee738a0b4f205daf0f0b045a50724665c046
4
- data.tar.gz: ce43d4671fc73bb78073cf7b80d9b323cd7e0100f114a2af87f0229e11910307
3
+ metadata.gz: e525b82b6ae1ea09510316f53b1087da97f218de3ffc16c71571ac30306720b7
4
+ data.tar.gz: '034090171c0a8c076a33aa7a415ac60a4852e1bb7480df8e779c59826dd2275a'
5
5
  SHA512:
6
- metadata.gz: 7386e4bd7e121415a124923913d5e3f6ed9aacb3a7a6f869310874a9e9df0a7882230d99dcf50adba284c713ef13a0fd0d9a931751aa08c3c814aa11b0e0aa3c
7
- data.tar.gz: b6c0987c6301e7a1bc44fbccc2a55e08317f8f868a97a7fa5d62597dae689d19855a5d994a83e7e227444756e51bbff6fbdf7f16d99d8fd0637bbbfcddd4eb8e
6
+ metadata.gz: 4d4bc576a9785e658c818efe8bd6b11925fa8e530c72054bf432ab509b174eb135cbabc9a52f5d6f5c27e933749814e643d99ba73863a2967ee4f47f7e8e02df
7
+ data.tar.gz: 4285735d4121093dc6363eae28101d9330e12beac46c592ec723f2ebecff77acad0f7c1dd139121499ed313adefd1685b212df6dc8b147a42c49f11be595fd22
@@ -283,12 +283,13 @@ module Checkoff
283
283
  # @return [void]
284
284
  def file_task_by_section(by_section, task, project_gid)
285
285
  membership = task.memberships.find do |m|
286
- # @sg-ignore
287
- T.cast(m['project'], T::Hash[String, T.untyped])['gid'] == project_gid
286
+ membership_hash = T.unsafe(m)
287
+ T.cast(membership_hash['project'], T::Hash[String, T.untyped])['gid'] == project_gid
288
288
  end
289
289
  raise "Could not find task in project_gid #{project_gid}: #{task}" if membership.nil?
290
290
 
291
- section = T.cast(membership['section'], T::Hash[String, T.untyped])
291
+ membership_data = T.unsafe(membership)
292
+ section = T.cast(membership_data['section'], T::Hash[String, T.untyped])
292
293
  section_name = T.cast(section['name'], String)
293
294
 
294
295
  # @type [String, nil]
@@ -165,7 +165,7 @@ module Checkoff
165
165
  all_options = projects.task_options(extra_fields:,
166
166
  only_uncompleted:)
167
167
  # @type [Hash]
168
- options = all_options.fetch(:options, {})
168
+ options = all_options.fetch(:options) { {} }
169
169
  options[:completed_since] = all_options[:completed_since] unless all_options[:completed_since].nil?
170
170
  client.tasks.find_by_id(task_gid, options:)
171
171
  rescue Asana::Errors::NotFound => e
@@ -13,7 +13,7 @@ require_relative 'clients'
13
13
 
14
14
  module Checkoff
15
15
  # Manages timelines of dependent tasks with dates and milestones
16
- class Timelines
16
+ class Timelines # rubocop:disable Metrics/ClassLength
17
17
  # @!parse
18
18
  # extend CacheMethod::ClassMethods
19
19
 
@@ -65,7 +65,6 @@ module Checkoff
65
65
  # @param task [Asana::Resources::Task]
66
66
  # @param limit_to_portfolio_name [String, nil]
67
67
  # @return [Boolean]
68
- # @sg-ignore
69
68
  def last_task_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil)
70
69
  unless limit_to_portfolio_name.nil?
71
70
  limit_to_projects = @portfolios.projects_in_portfolio(@workspaces.default_workspace.name,
@@ -73,15 +72,19 @@ module Checkoff
73
72
  end
74
73
 
75
74
  all_dependent_task_gids = nil
76
- task.memberships.all? do |membership_data|
75
+ # @type [Array<Hash{String => Object}>]
76
+ memberships = task.memberships
77
+ memberships.all? do |membership_data|
78
+ # @type [Hash{String => Object}]
79
+ md = membership_data
77
80
  unless limit_to_portfolio_name.nil?
78
- # @sg-ignore
79
- project_gid = membership_data.fetch('project').fetch('gid')
81
+ # @type [Hash{String => Object}]
82
+ project_data = md.fetch('project')
83
+ project_gid = project_data.fetch('gid')
80
84
  next true unless limit_to_projects.map(&:gid).include? project_gid
81
85
  end
82
- # @sg-ignore
83
- section_data = membership_data.fetch('section')
84
- # @sg-ignore
86
+ # @type [Hash{String => Object}]
87
+ section_data = md.fetch('section')
85
88
  section_gid = section_data.fetch('gid')
86
89
 
87
90
  last_milestone = last_milestone_in_section(section_gid)
@@ -100,7 +103,6 @@ module Checkoff
100
103
  # @param task [Asana::Resources::Task]
101
104
  # @param limit_to_portfolio_name [String, nil]
102
105
  # @return [Boolean]
103
- # @sg-ignore
104
106
  def any_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil)
105
107
  unless limit_to_portfolio_name.nil?
106
108
  limit_to_projects = @portfolios.projects_in_portfolio(@workspaces.default_workspace.name,
@@ -108,10 +110,15 @@ module Checkoff
108
110
  end
109
111
 
110
112
  all_dependent_milestones = nil
111
- task.memberships.all? do |membership_data|
113
+ # @type [Array<Hash{String => Object}>]
114
+ memberships = task.memberships
115
+ memberships.all? do |membership_data|
116
+ # @type [Hash{String => Object}]
117
+ md = membership_data
112
118
  unless limit_to_portfolio_name.nil?
113
- # @sg-ignore
114
- project_gid = membership_data.fetch('project').fetch('gid')
119
+ # @type [Hash{String => Object}]
120
+ project_data = md.fetch('project')
121
+ project_gid = project_data.fetch('gid')
115
122
  next true unless limit_to_projects.map(&:gid).include? project_gid
116
123
  end
117
124
 
@@ -6,6 +6,7 @@
6
6
  require 'date'
7
7
  require 'time'
8
8
  require 'active_support'
9
+ require 'active_support/core_ext/integer/time'
9
10
  # require 'active_support/time'
10
11
  require 'forwardable'
11
12
  require 'cache_method'
@@ -169,9 +170,9 @@ module Checkoff
169
170
 
170
171
  # @param num_days [Integer]
171
172
  #
172
- # @return [Time]
173
+ # @return [ActiveSupport::TimeWithZone]
173
174
  def n_days_from_now(num_days)
174
- Time.at(@now_getter.now.to_i + (num_days * 86_400))
175
+ num_days.days.since(@now_getter.now)
175
176
  end
176
177
 
177
178
  # @param num_days [Integer]
@@ -4,5 +4,5 @@
4
4
  # Command-line and gem client for Asana (unofficial)
5
5
  module Checkoff
6
6
  # Version of library
7
- VERSION = '0.245.0'
7
+ VERSION = '0.246.0'
8
8
  end
data/rbi/checkoff.rbi CHANGED
@@ -75,7 +75,7 @@ module Overcommit
75
75
  end
76
76
 
77
77
  module Checkoff
78
- VERSION = '0.245.0'
78
+ VERSION = '0.246.0'
79
79
 
80
80
  class Attachments
81
81
  include Logging
@@ -2442,7 +2442,7 @@ end
2442
2442
  # typed: ignore
2443
2443
  # Command-line and gem client for Asana (unofficial)
2444
2444
  module Checkoff
2445
- VERSION = T.let('0.245.0', T.untyped)
2445
+ VERSION = T.let('0.246.0', T.untyped)
2446
2446
 
2447
2447
  # Move tasks from one place to another
2448
2448
  class MvSubcommand
@@ -3314,7 +3314,7 @@ module Checkoff
3314
3314
  def now_or_before?(date_or_time); end
3315
3315
 
3316
3316
  # _@param_ `num_days`
3317
- sig { params(num_days: Integer).returns(Time) }
3317
+ sig { params(num_days: Integer).returns(ActiveSupport::TimeWithZone) }
3318
3318
  def n_days_from_now(num_days); end
3319
3319
 
3320
3320
  # @sg-ignore
@@ -4133,8 +4133,6 @@ module Checkoff
4133
4133
  def task_dependent_on_previous_section_last_milestone?(task, limit_to_portfolio_gid: nil); end
4134
4134
 
4135
4135
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4136
- # @sg-ignore
4137
- #
4138
4136
  # _@param_ `task`
4139
4137
  #
4140
4138
  # _@param_ `limit_to_portfolio_name`
@@ -4142,8 +4140,6 @@ module Checkoff
4142
4140
  def last_task_milestone_depends_on_this_task?(task, limit_to_portfolio_name: nil); end
4143
4141
 
4144
4142
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4145
- # @sg-ignore
4146
- #
4147
4143
  # _@param_ `task`
4148
4144
  #
4149
4145
  # _@param_ `limit_to_portfolio_name`
@@ -6131,9 +6127,6 @@ module Checkoff
6131
6127
  end
6132
6128
  def initialize(selector:, tasks:, timelines:, custom_fields:, **_kwargs); end
6133
6129
 
6134
- sig { returns([Symbol, T::Array[T.untyped]]) }
6135
- attr_reader :selector
6136
-
6137
6130
  sig { returns(Checkoff::Tasks) }
6138
6131
  attr_reader :tasks
6139
6132
 
@@ -6142,6 +6135,9 @@ module Checkoff
6142
6135
 
6143
6136
  sig { returns(Checkoff::CustomFields) }
6144
6137
  attr_reader :custom_fields
6138
+
6139
+ sig { returns([Symbol, T::Array[T.untyped]]) }
6140
+ attr_reader :selector
6145
6141
  end
6146
6142
  end
6147
6143
 
@@ -7129,6 +7125,15 @@ class TestTasks < BaseAsana
7129
7125
  sig { void }
7130
7126
  def test_in_portfolio_more_than_once; end
7131
7127
 
7128
+ sig { void }
7129
+ def test_in_portfolio_more_than_once_true; end
7130
+
7131
+ sig { void }
7132
+ def test_gid_for_task; end
7133
+
7134
+ sig { void }
7135
+ def test_gid_for_task_not_found; end
7136
+
7132
7137
  sig { returns(T.untyped) }
7133
7138
  def test_task_to_h_delegates; end
7134
7139
 
@@ -7170,15 +7175,6 @@ class TestTasks < BaseAsana
7170
7175
 
7171
7176
  sig { void }
7172
7177
  def class_under_test; end
7173
-
7174
- sig { void }
7175
- def test_in_portfolio_more_than_once_true; end
7176
-
7177
- sig { void }
7178
- def test_gid_for_task; end
7179
-
7180
- sig { void }
7181
- def test_gid_for_task_not_found; end
7182
7178
  end
7183
7179
 
7184
7180
  # Test the Checkoff::CLI class with mv subcommand
@@ -7906,19 +7902,19 @@ class TestTimelines < ClassTest
7906
7902
  def test_init; end
7907
7903
 
7908
7904
  sig { void }
7909
- def class_under_test; end
7905
+ def test_any_milestone_depends_on_this_task_false; end
7910
7906
 
7911
7907
  sig { void }
7912
- def respond_like_instance_of; end
7908
+ def test_any_milestone_depends_on_this_task_true; end
7913
7909
 
7914
7910
  sig { void }
7915
- def respond_like; end
7911
+ def class_under_test; end
7916
7912
 
7917
7913
  sig { void }
7918
- def test_any_milestone_depends_on_this_task_false; end
7914
+ def respond_like_instance_of; end
7919
7915
 
7920
7916
  sig { void }
7921
- def test_any_milestone_depends_on_this_task_true; end
7917
+ def respond_like; end
7922
7918
  end
7923
7919
 
7924
7920
  class TestPortfolios < ClassTest
@@ -8022,15 +8018,6 @@ class TestAttachments < ClassTest
8022
8018
  sig { void }
8023
8019
  def test_create_attachment_from_url; end
8024
8020
 
8025
- sig { void }
8026
- def class_under_test; end
8027
-
8028
- sig { void }
8029
- def respond_like_instance_of; end
8030
-
8031
- sig { void }
8032
- def respond_like; end
8033
-
8034
8021
  # _@param_ `gid`
8035
8022
  #
8036
8023
  # _@param_ `url`
@@ -8042,6 +8029,15 @@ class TestAttachments < ClassTest
8042
8029
 
8043
8030
  sig { void }
8044
8031
  def test_run; end
8032
+
8033
+ sig { void }
8034
+ def class_under_test; end
8035
+
8036
+ sig { void }
8037
+ def respond_like_instance_of; end
8038
+
8039
+ sig { void }
8040
+ def respond_like; end
8045
8041
  end
8046
8042
 
8047
8043
  # double to inject cache_method, pretending to be cache_method gem
@@ -8325,15 +8321,6 @@ class TestTaskSearches < ClassTest
8325
8321
  sig { void }
8326
8322
  def test_as_cache_key; end
8327
8323
 
8328
- sig { void }
8329
- def class_under_test; end
8330
-
8331
- sig { void }
8332
- def respond_like_instance_of; end
8333
-
8334
- sig { void }
8335
- def respond_like; end
8336
-
8337
8324
  sig { void }
8338
8325
  def test_raw_task_search_without_selector; end
8339
8326
 
@@ -8343,6 +8330,15 @@ class TestTaskSearches < ClassTest
8343
8330
 
8344
8331
  sig { void }
8345
8332
  def test_raw_task_search_paginates_when_full_page; end
8333
+
8334
+ sig { void }
8335
+ def class_under_test; end
8336
+
8337
+ sig { void }
8338
+ def respond_like_instance_of; end
8339
+
8340
+ sig { void }
8341
+ def respond_like; end
8346
8342
  end
8347
8343
 
8348
8344
  # rubocop:disable Metrics/ClassLength
@@ -8581,6 +8577,12 @@ class TestTaskSelectors < ClassTest
8581
8577
  sig { returns(T.untyped) }
8582
8578
  def test_filter_via_task_selector_in_project_named_true; end
8583
8579
 
8580
+ sig { returns(T.untyped) }
8581
+ def test_filter_via_task_selector_in_section_named_false; end
8582
+
8583
+ sig { returns(T.untyped) }
8584
+ def test_filter_via_task_selector_in_section_named_true; end
8585
+
8584
8586
  sig { returns(T.untyped) }
8585
8587
  def test_dependent_on_previous_section_last_milestone; end
8586
8588
 
@@ -8596,15 +8598,6 @@ class TestTaskSelectors < ClassTest
8596
8598
  sig { void }
8597
8599
  def test_last_task_milestone_does_not_depend_on_this_task; end
8598
8600
 
8599
- sig { void }
8600
- def respond_like_instance_of; end
8601
-
8602
- sig { void }
8603
- def respond_like; end
8604
-
8605
- sig { returns(T.class_of(Checkoff::TaskSelectors)) }
8606
- def class_under_test; end
8607
-
8608
8601
  sig { void }
8609
8602
  def test_in_a_real_project_true; end
8610
8603
 
@@ -8629,11 +8622,49 @@ class TestTaskSelectors < ClassTest
8629
8622
  sig { void }
8630
8623
  def test_no_milestone_depends_on_this_task_true; end
8631
8624
 
8632
- sig { returns(T.untyped) }
8633
- def test_filter_via_task_selector_in_section_named_false; end
8625
+ sig { void }
8626
+ def respond_like_instance_of; end
8634
8627
 
8635
- sig { returns(T.untyped) }
8636
- def test_filter_via_task_selector_in_section_named_true; end
8628
+ sig { void }
8629
+ def respond_like; end
8630
+
8631
+ sig { returns(T.class_of(Checkoff::TaskSelectors)) }
8632
+ def class_under_test; end
8633
+ end
8634
+
8635
+ # Test the Checkoff::ViewSubcommand class used in CLI processing
8636
+ class TestViewSubcommand < ClassTest
8637
+ extend Forwardable
8638
+
8639
+ sig { returns(String) }
8640
+ def task_name; end
8641
+
8642
+ sig { returns(String) }
8643
+ def due_at_value; end
8644
+
8645
+ sig { void }
8646
+ def expect_task_lookup; end
8647
+
8648
+ sig { void }
8649
+ def stub_task_due_fields; end
8650
+
8651
+ sig { void }
8652
+ def test_run_on_task; end
8653
+
8654
+ sig { void }
8655
+ def test_run_on_task_not_found; end
8656
+
8657
+ sig { params(clazz: T.untyped).returns(Checkoff::ViewSubcommand) }
8658
+ def create_object(clazz = class_under_test); end
8659
+
8660
+ sig { returns(T.class_of(Checkoff::ViewSubcommand)) }
8661
+ def class_under_test; end
8662
+
8663
+ sig { void }
8664
+ def respond_like_instance_of; end
8665
+
8666
+ sig { void }
8667
+ def respond_like; end
8637
8668
  end
8638
8669
 
8639
8670
  class TestLogging < Minitest::Test
@@ -8953,6 +8984,12 @@ class TestSearchUrlParser < ClassTest
8953
8984
  sig { returns(Checkoff::Internal::SearchUrl::Parser) }
8954
8985
  def get_test_object; end
8955
8986
 
8987
+ # Ruby 3.4+ Hash#inspect inserts spaces around =>; normalize for assertions.
8988
+ #
8989
+ # _@param_ `message`
8990
+ sig { params(message: String).returns(String) }
8991
+ def normalize_error_message(message); end
8992
+
8956
8993
  sig { void }
8957
8994
  def test_convert_params_1; end
8958
8995
 
@@ -9099,12 +9136,6 @@ class TestSearchUrlParser < ClassTest
9099
9136
 
9100
9137
  sig { returns(T.class_of(Checkoff::Internal::SearchUrl::Parser)) }
9101
9138
  def class_under_test; end
9102
-
9103
- # Ruby 3.4+ Hash#inspect inserts spaces around =>; normalize for assertions.
9104
- #
9105
- # _@param_ `message`
9106
- sig { params(message: String).returns(String) }
9107
- def normalize_error_message(message); end
9108
9139
  end
9109
9140
 
9110
9141
  class TestAsanaEventFilter < ClassTest
@@ -9247,38 +9278,3 @@ class TestAsanaEventFilter < ClassTest
9247
9278
  sig { void }
9248
9279
  def respond_like; end
9249
9280
  end
9250
-
9251
- # Test the Checkoff::ViewSubcommand class used in CLI processing
9252
- class TestViewSubcommand < ClassTest
9253
- extend Forwardable
9254
-
9255
- sig { returns(String) }
9256
- def task_name; end
9257
-
9258
- sig { returns(String) }
9259
- def due_at_value; end
9260
-
9261
- sig { void }
9262
- def expect_task_lookup; end
9263
-
9264
- sig { void }
9265
- def stub_task_due_fields; end
9266
-
9267
- sig { void }
9268
- def test_run_on_task; end
9269
-
9270
- sig { void }
9271
- def test_run_on_task_not_found; end
9272
-
9273
- sig { params(clazz: T.untyped).returns(Checkoff::ViewSubcommand) }
9274
- def create_object(clazz = class_under_test); end
9275
-
9276
- sig { returns(T.class_of(Checkoff::ViewSubcommand)) }
9277
- def class_under_test; end
9278
-
9279
- sig { void }
9280
- def respond_like_instance_of; end
9281
-
9282
- sig { void }
9283
- def respond_like; end
9284
- end
data/sig/checkoff.rbs CHANGED
@@ -727,7 +727,7 @@ module Checkoff
727
727
  def now_or_before?: ((Date | Time)? date_or_time) -> bool
728
728
 
729
729
  # _@param_ `num_days`
730
- def n_days_from_now: (Integer num_days) -> Time
730
+ def n_days_from_now: (Integer num_days) -> ActiveSupport::TimeWithZone
731
731
 
732
732
  # @sg-ignore
733
733
  #
@@ -1424,16 +1424,12 @@ module Checkoff
1424
1424
  def task_dependent_on_previous_section_last_milestone?: (Asana::Resources::Task task, ?limit_to_portfolio_gid: String?) -> bool
1425
1425
 
1426
1426
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1427
- # @sg-ignore
1428
- #
1429
1427
  # _@param_ `task`
1430
1428
  #
1431
1429
  # _@param_ `limit_to_portfolio_name`
1432
1430
  def last_task_milestone_depends_on_this_task?: (Asana::Resources::Task task, ?limit_to_portfolio_name: String?) -> bool
1433
1431
 
1434
1432
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1435
- # @sg-ignore
1436
- #
1437
1433
  # _@param_ `task`
1438
1434
  #
1439
1435
  # _@param_ `limit_to_portfolio_name`
@@ -3078,13 +3074,13 @@ module Checkoff
3078
3074
  **::Hash[untyped, untyped] _kwargs
3079
3075
  ) -> void
3080
3076
 
3081
- attr_reader selector: [Symbol, ::Array[untyped]]
3082
-
3083
3077
  attr_reader tasks: Checkoff::Tasks
3084
3078
 
3085
3079
  attr_reader timelines: Checkoff::Timelines
3086
3080
 
3087
3081
  attr_reader custom_fields: Checkoff::CustomFields
3082
+
3083
+ attr_reader selector: [Symbol, ::Array[untyped]]
3088
3084
  end
3089
3085
  end
3090
3086
 
@@ -3839,6 +3835,12 @@ class TestTasks < BaseAsana
3839
3835
 
3840
3836
  def test_in_portfolio_more_than_once: () -> void
3841
3837
 
3838
+ def test_in_portfolio_more_than_once_true: () -> void
3839
+
3840
+ def test_gid_for_task: () -> void
3841
+
3842
+ def test_gid_for_task_not_found: () -> void
3843
+
3842
3844
  def test_task_to_h_delegates: () -> untyped
3843
3845
 
3844
3846
  def expect_default_workspace_name_pulled: () -> void
@@ -3866,12 +3868,6 @@ class TestTasks < BaseAsana
3866
3868
  def test_as_cache_key: () -> void
3867
3869
 
3868
3870
  def class_under_test: () -> void
3869
-
3870
- def test_in_portfolio_more_than_once_true: () -> void
3871
-
3872
- def test_gid_for_task: () -> void
3873
-
3874
- def test_gid_for_task_not_found: () -> void
3875
3871
  end
3876
3872
 
3877
3873
  # Test the Checkoff::CLI class with mv subcommand
@@ -4351,15 +4347,15 @@ class TestTimelines < ClassTest
4351
4347
 
4352
4348
  def test_init: () -> void
4353
4349
 
4350
+ def test_any_milestone_depends_on_this_task_false: () -> void
4351
+
4352
+ def test_any_milestone_depends_on_this_task_true: () -> void
4353
+
4354
4354
  def class_under_test: () -> void
4355
4355
 
4356
4356
  def respond_like_instance_of: () -> void
4357
4357
 
4358
4358
  def respond_like: () -> void
4359
-
4360
- def test_any_milestone_depends_on_this_task_false: () -> void
4361
-
4362
- def test_any_milestone_depends_on_this_task_true: () -> void
4363
4359
  end
4364
4360
 
4365
4361
  class TestPortfolios < ClassTest
@@ -4421,12 +4417,6 @@ class TestAttachments < ClassTest
4421
4417
 
4422
4418
  def test_create_attachment_from_url: () -> void
4423
4419
 
4424
- def class_under_test: () -> void
4425
-
4426
- def respond_like_instance_of: () -> void
4427
-
4428
- def respond_like: () -> void
4429
-
4430
4420
  # _@param_ `gid`
4431
4421
  #
4432
4422
  # _@param_ `url`
@@ -4435,6 +4425,12 @@ class TestAttachments < ClassTest
4435
4425
  def capture_attachments_run: () -> String
4436
4426
 
4437
4427
  def test_run: () -> void
4428
+
4429
+ def class_under_test: () -> void
4430
+
4431
+ def respond_like_instance_of: () -> void
4432
+
4433
+ def respond_like: () -> void
4438
4434
  end
4439
4435
 
4440
4436
  # double to inject cache_method, pretending to be cache_method gem
@@ -4636,18 +4632,18 @@ class TestTaskSearches < ClassTest
4636
4632
 
4637
4633
  def test_as_cache_key: () -> void
4638
4634
 
4639
- def class_under_test: () -> void
4640
-
4641
- def respond_like_instance_of: () -> void
4642
-
4643
- def respond_like: () -> void
4644
-
4645
4635
  def test_raw_task_search_without_selector: () -> void
4646
4636
 
4647
4637
  # _@param_ `task_searches`
4648
4638
  def mock_full_page_raw_task_search: (Checkoff::TaskSearches task_searches) -> ::Array[untyped]
4649
4639
 
4650
4640
  def test_raw_task_search_paginates_when_full_page: () -> void
4641
+
4642
+ def class_under_test: () -> void
4643
+
4644
+ def respond_like_instance_of: () -> void
4645
+
4646
+ def respond_like: () -> void
4651
4647
  end
4652
4648
 
4653
4649
  # rubocop:disable Metrics/ClassLength
@@ -4809,6 +4805,10 @@ class TestTaskSelectors < ClassTest
4809
4805
 
4810
4806
  def test_filter_via_task_selector_in_project_named_true: () -> untyped
4811
4807
 
4808
+ def test_filter_via_task_selector_in_section_named_false: () -> untyped
4809
+
4810
+ def test_filter_via_task_selector_in_section_named_true: () -> untyped
4811
+
4812
4812
  def test_dependent_on_previous_section_last_milestone: () -> untyped
4813
4813
 
4814
4814
  def test_in_portfolio_named_true: () -> untyped
@@ -4819,12 +4819,6 @@ class TestTaskSelectors < ClassTest
4819
4819
 
4820
4820
  def test_last_task_milestone_does_not_depend_on_this_task: () -> void
4821
4821
 
4822
- def respond_like_instance_of: () -> void
4823
-
4824
- def respond_like: () -> void
4825
-
4826
- def class_under_test: () -> singleton(Checkoff::TaskSelectors)
4827
-
4828
4822
  def test_in_a_real_project_true: () -> void
4829
4823
 
4830
4824
  def test_in_a_real_project_false_only_my_tasks: () -> void
@@ -4841,9 +4835,36 @@ class TestTaskSelectors < ClassTest
4841
4835
 
4842
4836
  def test_no_milestone_depends_on_this_task_true: () -> void
4843
4837
 
4844
- def test_filter_via_task_selector_in_section_named_false: () -> untyped
4838
+ def respond_like_instance_of: () -> void
4845
4839
 
4846
- def test_filter_via_task_selector_in_section_named_true: () -> untyped
4840
+ def respond_like: () -> void
4841
+
4842
+ def class_under_test: () -> singleton(Checkoff::TaskSelectors)
4843
+ end
4844
+
4845
+ # Test the Checkoff::ViewSubcommand class used in CLI processing
4846
+ class TestViewSubcommand < ClassTest
4847
+ extend Forwardable
4848
+
4849
+ def task_name: () -> String
4850
+
4851
+ def due_at_value: () -> String
4852
+
4853
+ def expect_task_lookup: () -> void
4854
+
4855
+ def stub_task_due_fields: () -> void
4856
+
4857
+ def test_run_on_task: () -> void
4858
+
4859
+ def test_run_on_task_not_found: () -> void
4860
+
4861
+ def create_object: (?untyped clazz) -> Checkoff::ViewSubcommand
4862
+
4863
+ def class_under_test: () -> singleton(Checkoff::ViewSubcommand)
4864
+
4865
+ def respond_like_instance_of: () -> void
4866
+
4867
+ def respond_like: () -> void
4847
4868
  end
4848
4869
 
4849
4870
  class TestLogging < Minitest::Test
@@ -4994,6 +5015,11 @@ end
4994
5015
  class TestSearchUrlParser < ClassTest
4995
5016
  def get_test_object: () -> Checkoff::Internal::SearchUrl::Parser
4996
5017
 
5018
+ # Ruby 3.4+ Hash#inspect inserts spaces around =>; normalize for assertions.
5019
+ #
5020
+ # _@param_ `message`
5021
+ def normalize_error_message: (String message) -> String
5022
+
4997
5023
  def test_convert_params_1: () -> void
4998
5024
 
4999
5025
  def test_convert_params_2: () -> void
@@ -5091,11 +5117,6 @@ class TestSearchUrlParser < ClassTest
5091
5117
  def test_convert_params_48: () -> void
5092
5118
 
5093
5119
  def class_under_test: () -> singleton(Checkoff::Internal::SearchUrl::Parser)
5094
-
5095
- # Ruby 3.4+ Hash#inspect inserts spaces around =>; normalize for assertions.
5096
- #
5097
- # _@param_ `message`
5098
- def normalize_error_message: (String message) -> String
5099
5120
  end
5100
5121
 
5101
5122
  class TestAsanaEventFilter < ClassTest
@@ -5134,30 +5155,5 @@ class TestAsanaEventFilter < ClassTest
5134
5155
 
5135
5156
  def respond_like_instance_of: () -> void
5136
5157
 
5137
- def respond_like: () -> void
5138
- end
5139
-
5140
- # Test the Checkoff::ViewSubcommand class used in CLI processing
5141
- class TestViewSubcommand < ClassTest
5142
- extend Forwardable
5143
-
5144
- def task_name: () -> String
5145
-
5146
- def due_at_value: () -> String
5147
-
5148
- def expect_task_lookup: () -> void
5149
-
5150
- def stub_task_due_fields: () -> void
5151
-
5152
- def test_run_on_task: () -> void
5153
-
5154
- def test_run_on_task_not_found: () -> void
5155
-
5156
- def create_object: (?untyped clazz) -> Checkoff::ViewSubcommand
5157
-
5158
- def class_under_test: () -> singleton(Checkoff::ViewSubcommand)
5159
-
5160
- def respond_like_instance_of: () -> void
5161
-
5162
5158
  def respond_like: () -> void
5163
5159
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.245.0
4
+ version: 0.246.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-24 00:00:00.000000000 Z
11
+ date: 2026-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport