checkoff 0.246.0 → 0.248.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: e525b82b6ae1ea09510316f53b1087da97f218de3ffc16c71571ac30306720b7
4
- data.tar.gz: '034090171c0a8c076a33aa7a415ac60a4852e1bb7480df8e779c59826dd2275a'
3
+ metadata.gz: cf2ef1bb397eb6f71c13c2b0b80a07bcce2768bf949f7306552f42196ff2ee2f
4
+ data.tar.gz: e13e1ddd086c25666513f065d6d1d0efcb3498117207bd2db2be0832a3369a97
5
5
  SHA512:
6
- metadata.gz: 4d4bc576a9785e658c818efe8bd6b11925fa8e530c72054bf432ab509b174eb135cbabc9a52f5d6f5c27e933749814e643d99ba73863a2967ee4f47f7e8e02df
7
- data.tar.gz: 4285735d4121093dc6363eae28101d9330e12beac46c592ec723f2ebecff77acad0f7c1dd139121499ed313adefd1685b212df6dc8b147a42c49f11be595fd22
6
+ metadata.gz: 5b1e83d10cc864255f05003342919ff7c1c4171821232a6d702672c395bda000ef923e4da9084a5d86398e0107bdffa813e40bb6a78fd7a656f65f342c32bc09
7
+ data.tar.gz: f79ec8061cd3b0a3180f4f94370c468e57c8731e873486a912f280ed2a860751047433a7660068ac57283f7f8e608925b8e615a7224c3f8b41cea0bb58e0702c
@@ -190,9 +190,12 @@ module Checkoff
190
190
 
191
191
  # @param task [Asana::Resources::Task]
192
192
  # @return [Boolean]
193
+ # CI quality (pipeline 1902): "return type could not be inferred" on modified lines
194
+ # after 7eeb5b1 removed @sg-ignore. Local overcommit may report "Unneeded @sg-ignore";
195
+ # `== true` alone did not satisfy the CI overcommit Solargraph hook.
193
196
  # @sg-ignore
194
197
  def evaluate(task)
195
- task.assignee.nil?
198
+ task.assignee.nil? == true
196
199
  end
197
200
  end
198
201
 
@@ -206,9 +209,10 @@ module Checkoff
206
209
 
207
210
  # @param task [Asana::Resources::Task]
208
211
  # @return [Boolean]
212
+ # Same CI/local Solargraph drift as UnassignedPFunctionEvaluator#evaluate (pipeline 1902).
209
213
  # @sg-ignore
210
214
  def evaluate(task)
211
- !task.due_at.nil? || !task.due_on.nil?
215
+ !(task.due_at.nil? && task.due_on.nil?)
212
216
  end
213
217
  end
214
218
 
@@ -292,6 +292,7 @@ module Checkoff
292
292
  # @param portfolio_name [String]
293
293
  # @param workspace_name [String]
294
294
  # @return [Boolean]
295
+ # CI quality (pipeline 1902): "in_portfolio_named? return type could not be inferred".
295
296
  # @sg-ignore
296
297
  def in_portfolio_named?(task,
297
298
  portfolio_name,
@@ -300,10 +301,8 @@ module Checkoff
300
301
  task.memberships.any? do |membership|
301
302
  m = T.cast(membership, T::Hash[String, T.untyped])
302
303
  project_gid = T.cast(m.fetch('project'), T::Hash[String, T.untyped]).fetch('gid')
303
- portfolio_projects.any? do |portfolio_project|
304
- portfolio_project.gid == project_gid
305
- end
306
- end
304
+ portfolio_projects.any? { |portfolio_project| portfolio_project.gid == project_gid }
305
+ end == true
307
306
  end
308
307
 
309
308
  # True if the task is in a project which is in the given portfolio
@@ -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.246.0'
7
+ VERSION = '0.248.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.246.0'
78
+ VERSION = '0.248.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.246.0', T.untyped)
2445
+ VERSION = T.let('0.248.0', T.untyped)
2446
2446
 
2447
2447
  # Move tasks from one place to another
2448
2448
  class MvSubcommand
@@ -3027,6 +3027,7 @@ module Checkoff
3027
3027
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3028
3028
  # True if the task is in a project which is in the given portfolio
3029
3029
  #
3030
+ # CI quality (pipeline 1902): "in_portfolio_named? return type could not be inferred".
3030
3031
  # @sg-ignore
3031
3032
  #
3032
3033
  # _@param_ `task`
@@ -5961,6 +5962,9 @@ module Checkoff
5961
5962
  def matches?; end
5962
5963
 
5963
5964
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5965
+ # CI quality (pipeline 1902): "return type could not be inferred" on modified lines
5966
+ # after 7eeb5b1 removed @sg-ignore. Local overcommit may report "Unneeded @sg-ignore";
5967
+ # `== true` alone did not satisfy the CI overcommit Solargraph hook.
5964
5968
  # @sg-ignore
5965
5969
  #
5966
5970
  # _@param_ `task`
@@ -5976,6 +5980,7 @@ module Checkoff
5976
5980
  def matches?; end
5977
5981
 
5978
5982
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5983
+ # Same CI/local Solargraph drift as UnassignedPFunctionEvaluator#evaluate (pipeline 1902).
5979
5984
  # @sg-ignore
5980
5985
  #
5981
5986
  # _@param_ `task`
@@ -6755,6 +6760,23 @@ end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped
6755
6760
  sig { returns(Asana::Client) }
6756
6761
  attr_reader :client
6757
6762
  end
6763
+
6764
+ # Remove TIME_BY_PERIOD redeclarations Sord emits on BaseAsana test subclasses.
6765
+ module PruneRbiTestConstants
6766
+ SUBCLASSES = T.let(%w[TestTasks TestProjects TestSections TestWorkspaces].freeze, T.untyped)
6767
+
6768
+ # _@param_ `klass`
6769
+ sig { params(klass: String).returns(Regexp) }
6770
+ def self.pattern_for(klass); end
6771
+
6772
+ # _@param_ `path`
6773
+ sig { params(path: String).void }
6774
+ def self.call(path); end
6775
+
6776
+ # _@param_ `content`
6777
+ sig { params(content: String).returns(String) }
6778
+ def self.prune_subclasses(content); end
6779
+ end
6758
6780
  end
6759
6781
 
6760
6782
  # include this to add ability to log at different levels
@@ -6971,214 +6993,6 @@ end
6971
6993
  # Test the Checkoff::Tasks class
6972
6994
  class TestTasks < BaseAsana
6973
6995
  extend Forwardable
6974
- TIME_BY_PERIOD = T.let({
6975
- two_am: '02:00:20',
6976
- morning_during_breakfast: '07:30:20',
6977
- morning: '07:33:20',
6978
- eight_thirty_am: '8:30:00',
6979
- ten_am: '10:00:20',
6980
- mid_morning: '10:33:20',
6981
- eleven_thirty_am: '11:30:00',
6982
- afternoon: '14:33:20',
6983
- three_forty_five_pm: '15:45:20',
6984
- four_fifteen_pm: '16:15:20',
6985
- four_forty_five_pm: '16:45:20',
6986
- five_forty_five_pm: '17:45:20',
6987
- six_fifteen_pm: '18:15:00',
6988
- six_forty_five_pm: '18:45:00',
6989
- night: '19:00:20',
6990
- evening: '19:01:20',
6991
- late_evening: '21:33:20',
6992
- late_late_evening: '22:33:20',
6993
- }.freeze, T.untyped)
6994
-
6995
- sig { void }
6996
- def expect_now_pulled; end
6997
-
6998
- sig { params(less_than_now: T.untyped).void }
6999
- def expect_due_on_parsed(less_than_now:); end
7000
-
7001
- sig { params(less_than_now: T.untyped).void }
7002
- def expect_start_on_parsed(less_than_now:); end
7003
-
7004
- sig { params(less_than_now: T.untyped).void }
7005
- def expect_start_at_parsed(less_than_now:); end
7006
-
7007
- sig { void }
7008
- def mock_task_ready_false_due_in_future_on_date; end
7009
-
7010
- sig { void }
7011
- def test_task_ready_false_due_in_future_on_date; end
7012
-
7013
- sig { returns(T.untyped) }
7014
- def mock_task_ready_true_start_in_past; end
7015
-
7016
- sig { void }
7017
- def test_task_ready_true_start_in_past; end
7018
-
7019
- sig { void }
7020
- def mock_task_ready_true_start_in_past_time; end
7021
-
7022
- sig { void }
7023
- def test_task_ready_true_start_in_past_time; end
7024
-
7025
- sig { params(less_than_now: T.untyped).void }
7026
- def expect_due_at_parsed(less_than_now:); end
7027
-
7028
- sig { void }
7029
- def mock_task_ready_false_due_in_future_at_time; end
7030
-
7031
- sig { void }
7032
- def test_task_ready_false_due_in_future_at_time; end
7033
-
7034
- sig { params(task: T.untyped, dependency_gids: T.untyped).void }
7035
- def expect_dependency_gids_pulled(task, dependency_gids); end
7036
-
7037
- sig { void }
7038
- def test_task_ready_true_no_due_anything; end
7039
-
7040
- sig { void }
7041
- def expect_asana_tasks_client_pulled; end
7042
-
7043
- sig { void }
7044
- def default_fields; end
7045
-
7046
- sig { params(extra_fields: T.untyped).void }
7047
- def fields_including(extra_fields); end
7048
-
7049
- sig { params(dependency_gid: T.untyped, dependency_full_task: T.untyped, completed: T.untyped).void }
7050
- def expect_dependency_completion_pulled(dependency_gid, dependency_full_task, completed); end
7051
-
7052
- sig { void }
7053
- def mock_task_ready_false_dependency; end
7054
-
7055
- sig { returns(T.untyped) }
7056
- def test_task_ready_false_dependency; end
7057
-
7058
- sig { void }
7059
- def test_task_ready_false_dependency_cached; end
7060
-
7061
- sig do
7062
- params(
7063
- start_on: T.untyped,
7064
- start_at: T.untyped,
7065
- due_on: T.untyped,
7066
- due_at: T.untyped
7067
- ).void
7068
- end
7069
- def allow_task_due(start_on: nil, start_at: nil, due_on: nil, due_at: nil); end
7070
-
7071
- sig { params(task: T.untyped, start_at: T.untyped).void }
7072
- def allow_start_at_pulled(task, start_at); end
7073
-
7074
- sig { params(task: T.untyped, start_on: T.untyped).returns(T.untyped) }
7075
- def allow_start_on_pulled(task, start_on); end
7076
-
7077
- sig { params(task: T.untyped, due_at: T.untyped).void }
7078
- def allow_due_at_pulled(task, due_at); end
7079
-
7080
- sig { params(task: T.untyped, due_on: T.untyped).returns(T.untyped) }
7081
- def allow_due_on_pulled(task, due_on); end
7082
-
7083
- sig { returns(T.untyped) }
7084
- def test_url_of_task; end
7085
-
7086
- sig { returns(T.untyped) }
7087
- def expect_task_created; end
7088
-
7089
- sig { void }
7090
- def mock_add_task; end
7091
-
7092
- sig { void }
7093
- def test_add_task; end
7094
-
7095
- sig { returns(T.untyped) }
7096
- def expect_tasks_from_project_pulled; end
7097
-
7098
- sig { void }
7099
- def expect_project_pulled; end
7100
-
7101
- sig { params(extra_fields: T.untyped).returns(T.untyped) }
7102
- def expect_task_by_gid_pulled(extra_fields: []); end
7103
-
7104
- sig { returns(T.untyped) }
7105
- def expect_tasks_from_section_pulled; end
7106
-
7107
- sig { returns(T.untyped) }
7108
- def projects; end
7109
-
7110
- sig { returns(T.untyped) }
7111
- def expect_task_options_pulled; end
7112
-
7113
- sig { returns(T.untyped) }
7114
- def mock_task_with_section; end
7115
-
7116
- sig { void }
7117
- def test_task_with_section; end
7118
-
7119
- sig { returns(T.untyped) }
7120
- def mock_task; end
7121
-
7122
- sig { void }
7123
- def test_task; end
7124
-
7125
- sig { void }
7126
- def test_in_portfolio_more_than_once; end
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
-
7137
- sig { returns(T.untyped) }
7138
- def test_task_to_h_delegates; end
7139
-
7140
- sig { void }
7141
- def expect_default_workspace_name_pulled; end
7142
-
7143
- sig { void }
7144
- def mock_in_portfolio_named_false_no_projects_no_memberships; end
7145
-
7146
- sig { void }
7147
- def test_in_portfolio_named_false_no_projects_no_memberships; end
7148
-
7149
- sig { void }
7150
- def mock_in_portfolio_named_false_no_projects_but_memberships; end
7151
-
7152
- sig { void }
7153
- def test_in_portfolio_named_false_no_projects_but_memberships; end
7154
-
7155
- sig { void }
7156
- def mock_in_portfolio_named_false_projects_wrong_memberships; end
7157
-
7158
- sig { void }
7159
- def test_in_portfolio_named_false_projects_wrong_memberships; end
7160
-
7161
- sig { void }
7162
- def test_date_or_time_field_by_name; end
7163
-
7164
- sig { void }
7165
- def test_h_to_task; end
7166
-
7167
- sig { void }
7168
- def test_all_dependent_tasks_empty; end
7169
-
7170
- sig { void }
7171
- def test_all_dependent_tasks_one; end
7172
-
7173
- sig { void }
7174
- def test_as_cache_key; end
7175
-
7176
- sig { void }
7177
- def class_under_test; end
7178
- end
7179
-
7180
- # Test the Checkoff::CLI class with mv subcommand
7181
- class TestCLIMv < Minitest::Test
7182
6996
  sig { void }
7183
6997
  def expect_workspaces_created; end
7184
6998
 
@@ -7466,99 +7280,6 @@ end
7466
7280
  # Test the Checkoff::Projects class
7467
7281
  class TestProjects < BaseAsana
7468
7282
  extend Forwardable
7469
- TIME_BY_PERIOD = T.let({
7470
- two_am: '02:00:20',
7471
- morning_during_breakfast: '07:30:20',
7472
- morning: '07:33:20',
7473
- eight_thirty_am: '8:30:00',
7474
- ten_am: '10:00:20',
7475
- mid_morning: '10:33:20',
7476
- eleven_thirty_am: '11:30:00',
7477
- afternoon: '14:33:20',
7478
- three_forty_five_pm: '15:45:20',
7479
- four_fifteen_pm: '16:15:20',
7480
- four_forty_five_pm: '16:45:20',
7481
- five_forty_five_pm: '17:45:20',
7482
- six_fifteen_pm: '18:15:00',
7483
- six_forty_five_pm: '18:45:00',
7484
- night: '19:00:20',
7485
- evening: '19:01:20',
7486
- late_evening: '21:33:20',
7487
- late_late_evening: '22:33:20',
7488
- }.freeze, T.untyped)
7489
-
7490
- sig { void }
7491
- def setup_config; end
7492
-
7493
- sig { void }
7494
- def setup_projects_pulled; end
7495
-
7496
- sig { void }
7497
- def sample_projects; end
7498
-
7499
- sig { params(workspace_gid: T.untyped).returns(T.untyped) }
7500
- def setup_projects_queried(workspace_gid: my_workspace_gid); end
7501
-
7502
- sig { params(options: T.untyped).void }
7503
- def expect_tasks_found(options:); end
7504
-
7505
- sig { params(options: T.untyped).void }
7506
- def mock_tasks_from_project(options:); end
7507
-
7508
- sig { void }
7509
- def test_tasks_from_project_not_only_uncompleted; end
7510
-
7511
- sig { void }
7512
- def test_tasks_from_project; end
7513
-
7514
- sig { void }
7515
- def test_active_tasks; end
7516
-
7517
- sig { void }
7518
- def setup_workspace_pulled; end
7519
-
7520
- sig { void }
7521
- def setup_user_task_list_pulled; end
7522
-
7523
- sig { void }
7524
- def mock_project_or_raise_unknown; end
7525
-
7526
- sig { void }
7527
- def test_project_or_raise_unknown; end
7528
-
7529
- sig { returns(T.untyped) }
7530
- def test_project_by_gid; end
7531
-
7532
- sig { void }
7533
- def test_project_or_raise_my_tasks; end
7534
-
7535
- sig { returns(T.untyped) }
7536
- def mock_project_my_tasks; end
7537
-
7538
- sig { void }
7539
- def test_project_my_tasks; end
7540
-
7541
- sig { returns(T.untyped) }
7542
- def test_project_to_h; end
7543
-
7544
- sig { returns(T.untyped) }
7545
- def mock_test_in_period; end
7546
-
7547
- sig { void }
7548
- def test_in_period; end
7549
-
7550
- sig { void }
7551
- def mock_project_ready; end
7552
-
7553
- sig { void }
7554
- def test_project_ready; end
7555
-
7556
- sig { void }
7557
- def class_under_test; end
7558
- end
7559
-
7560
- # Test the Checkoff::Sections class
7561
- class TestSections < BaseAsana
7562
7283
  extend Forwardable
7563
7284
  TIME_BY_PERIOD = T.let({
7564
7285
  two_am: '02:00:20',
@@ -7963,53 +7684,6 @@ end
7963
7684
  # Test the Checkoff::Workspaces class
7964
7685
  class TestWorkspaces < BaseAsana
7965
7686
  extend Forwardable
7966
- TIME_BY_PERIOD = T.let({
7967
- two_am: '02:00:20',
7968
- morning_during_breakfast: '07:30:20',
7969
- morning: '07:33:20',
7970
- eight_thirty_am: '8:30:00',
7971
- ten_am: '10:00:20',
7972
- mid_morning: '10:33:20',
7973
- eleven_thirty_am: '11:30:00',
7974
- afternoon: '14:33:20',
7975
- three_forty_five_pm: '15:45:20',
7976
- four_fifteen_pm: '16:15:20',
7977
- four_forty_five_pm: '16:45:20',
7978
- five_forty_five_pm: '17:45:20',
7979
- six_fifteen_pm: '18:15:00',
7980
- six_forty_five_pm: '18:45:00',
7981
- night: '19:00:20',
7982
- evening: '19:01:20',
7983
- late_evening: '21:33:20',
7984
- late_late_evening: '22:33:20',
7985
- }.freeze, T.untyped)
7986
-
7987
- sig { void }
7988
- def mock_workspace_or_raise_nil; end
7989
-
7990
- sig { void }
7991
- def test_workspace_or_raise_nil; end
7992
-
7993
- sig { void }
7994
- def mock_workspace_or_raise; end
7995
-
7996
- sig { void }
7997
- def test_workspace_or_raise; end
7998
-
7999
- sig { void }
8000
- def expect_default_workspace_gid_config_fetched; end
8001
-
8002
- sig { void }
8003
- def test_default_workspace_gid; end
8004
-
8005
- sig { void }
8006
- def test_default_workspace; end
8007
-
8008
- sig { void }
8009
- def class_under_test; end
8010
- end
8011
-
8012
- class TestAttachments < ClassTest
8013
7687
  extend Forwardable
8014
7688
 
8015
7689
  sig { params(url: T.untyped).void }
@@ -9278,3 +8952,27 @@ class TestAsanaEventFilter < ClassTest
9278
8952
  sig { void }
9279
8953
  def respond_like; end
9280
8954
  end
8955
+
8956
+ class TestPruneCheckoffRbiTestConstants < Minitest::Test
8957
+ SAMPLE = T.let(<<~RBI, T.untyped)
8958
+ module TestDate
8959
+ TIME_BY_PERIOD = T.let({ a: '1' }.freeze, T.untyped)
8960
+ end
8961
+
8962
+ class TestTasks < BaseAsana
8963
+ extend Forwardable
8964
+ TIME_BY_PERIOD = T.let({
8965
+ two_am: '02:00:20',
8966
+ }.freeze, T.untyped)
8967
+
8968
+ sig { void }
8969
+ def foo; end
8970
+ end
8971
+ RBI
8972
+
8973
+ sig { returns(T.untyped) }
8974
+ def test_prunes_subclass_constant; end
8975
+
8976
+ sig { returns(T.untyped) }
8977
+ def test_noop_when_nothing_to_prune; end
8978
+ end
data/sig/checkoff.rbs CHANGED
@@ -499,6 +499,7 @@ module Checkoff
499
499
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
500
500
  # True if the task is in a project which is in the given portfolio
501
501
  #
502
+ # CI quality (pipeline 1902): "in_portfolio_named? return type could not be inferred".
502
503
  # @sg-ignore
503
504
  #
504
505
  # _@param_ `task`
@@ -2933,6 +2934,9 @@ module Checkoff
2933
2934
  def matches?: () -> bool
2934
2935
 
2935
2936
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2937
+ # CI quality (pipeline 1902): "return type could not be inferred" on modified lines
2938
+ # after 7eeb5b1 removed @sg-ignore. Local overcommit may report "Unneeded @sg-ignore";
2939
+ # `== true` alone did not satisfy the CI overcommit Solargraph hook.
2936
2940
  # @sg-ignore
2937
2941
  #
2938
2942
  # _@param_ `task`
@@ -2946,6 +2950,7 @@ module Checkoff
2946
2950
  def matches?: () -> bool
2947
2951
 
2948
2952
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2953
+ # Same CI/local Solargraph drift as UnassignedPFunctionEvaluator#evaluate (pipeline 1902).
2949
2954
  # @sg-ignore
2950
2955
  #
2951
2956
  # _@param_ `task`
@@ -3593,6 +3598,20 @@ module Checkoff
3593
3598
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
3594
3599
  attr_reader client: Asana::Client
3595
3600
  end
3601
+
3602
+ # Remove TIME_BY_PERIOD redeclarations Sord emits on BaseAsana test subclasses.
3603
+ module PruneRbiTestConstants
3604
+ SUBCLASSES: untyped
3605
+
3606
+ # _@param_ `klass`
3607
+ def self.pattern_for: (String klass) -> Regexp
3608
+
3609
+ # _@param_ `path`
3610
+ def self.call: (String path) -> void
3611
+
3612
+ # _@param_ `content`
3613
+ def self.prune_subclasses: (String content) -> String
3614
+ end
3596
3615
  end
3597
3616
 
3598
3617
  # include this to add ability to log at different levels
@@ -5156,4 +5175,12 @@ class TestAsanaEventFilter < ClassTest
5156
5175
  def respond_like_instance_of: () -> void
5157
5176
 
5158
5177
  def respond_like: () -> void
5178
+ end
5179
+
5180
+ class TestPruneCheckoffRbiTestConstants < Minitest::Test
5181
+ SAMPLE: untyped
5182
+
5183
+ def test_prunes_subclass_constant: () -> untyped
5184
+
5185
+ def test_noop_when_nothing_to_prune: () -> untyped
5159
5186
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.246.0
4
+ version: 0.248.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz