checkoff 0.102.0 → 0.104.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d8549d02934007d479b28d83262a32e060e6ada2033f5d5c9743210bf599e68
4
- data.tar.gz: 86f5d4ba266d1d60af237d428c50b0065e80ce233d8ed964e7af9cc2396e6ae3
3
+ metadata.gz: b6d308b4ca05ee88bf3b380772496d9c621cc7b9f521b4cf19eb1351395ed2b2
4
+ data.tar.gz: eb14bb0c6f4dabd72e083ce67a5c3c821be931ac268f3202445714da9ae713aa
5
5
  SHA512:
6
- metadata.gz: 6e7d47b7d64ee0008783db1a0a460bc0a1865f361920ff136c85e95df6f1d4cf36f88fda44ce50cb0f7f81e5117800feef82874320d6453e4b525f734721fc2d
7
- data.tar.gz: 9c376fe5b386897f379f0b575423078fa0d4495ae953f05a5aeab6d794e3be6eac36a235f4d44d7e80313824de8110e246e7069abf3399f88c0a931eb709b60f
6
+ metadata.gz: 28983082df6a4c00e31fb3f458a6bafc0241920d4f1b5657e6ce3613d86127b0df6561defde8669a9ead845e2ef7d77c10ec1d45603c55d17fe735c5d3d5e716
7
+ data.tar.gz: dc877bc157ed76157327c2e094ff69ff4074275eaa9df93ec9d3fdf8bc67969c4402503ee9435bcf1305f489f0d7ab22f0b43129e69b0abe9e06064b4683f8e7
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.102.0)
15
+ checkoff (0.104.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Checkoff
4
+ module Internal
5
+ # Determine whether a task is due within a relative date range
6
+ class ReadyBetweenRelative
7
+ # @param config [Hash<Symbol, Object>]
8
+ # @param clients [Checkoff::Clients]
9
+ # @param task_timing [Checkoff::Internal::TaskTiming]
10
+ # @param tasks [Checkoff::Tasks]
11
+ def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
12
+ clients: Checkoff::Clients.new(config: config),
13
+ task_timing: ::Checkoff::Internal::TaskTiming.new,
14
+ tasks: ::Checkoff::Tasks.new(config: config,
15
+ client: clients.client))
16
+ @task_timing = task_timing
17
+ @tasks = tasks
18
+ end
19
+
20
+ # @param task [Asana::Resources::Task]
21
+ # @param beginning_num_days_from_now [Integer]
22
+ # @param end_num_days_from_now [Integer]
23
+ # @param ignore_dependencies [Boolean]
24
+ #
25
+ # @return [Boolean]
26
+ def ready_between_relative?(task,
27
+ beginning_num_days_from_now,
28
+ end_num_days_from_now,
29
+ ignore_dependencies: false)
30
+ beginning_n_days_from_now_time = (Time.now + (beginning_num_days_from_now * 24 * 60 * 60))
31
+ end_n_days_from_now_time = (Time.now + (end_num_days_from_now * 24 * 60 * 60))
32
+
33
+ # @type [Date, Time, nil]
34
+ ready_date_or_time = @task_timing.date_or_time_field_by_name(task, :ready)
35
+
36
+ return false if ready_date_or_time.nil?
37
+
38
+ in_range = ready_in_range?(ready_date_or_time,
39
+ beginning_n_days_from_now_time,
40
+ end_n_days_from_now_time)
41
+
42
+ return false unless in_range
43
+
44
+ return false if !ignore_dependencies && @tasks.incomplete_dependencies?(task)
45
+
46
+ true
47
+ end
48
+
49
+ private
50
+
51
+ # @param ready_date_or_time [Date, Time]
52
+ # @param start_time [Time]
53
+ # @param end_time [Time]
54
+ def ready_in_range?(ready_date_or_time, start_time, end_time)
55
+ if ready_date_or_time.is_a?(Time)
56
+ ready_date_or_time > start_time && ready_date_or_time <= end_time
57
+ else
58
+ ready_date_or_time > start_time.to_date && ready_date_or_time <= end_time.to_date
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -15,54 +15,6 @@ module Checkoff
15
15
 
16
16
  private
17
17
 
18
- # @param project [Asana::Resources::Project]
19
- # @param field_name [Symbol]
20
- #
21
- # @sg-ignore
22
- # @return [Date, nil]
23
- def pull_date_field_by_name(project, field_name)
24
- if field_name == :modified
25
- return Time.parse(project.modified_at).to_date unless project.modified_at.nil?
26
-
27
- return nil
28
- end
29
-
30
- if field_name == :due
31
- return Time.parse(project.due_at).to_date unless project.due_at.nil?
32
-
33
- return Date.parse(project.due_on) unless project.due_on.nil?
34
-
35
- return nil
36
- end
37
-
38
- raise "Teach me how to handle field #{field_name}"
39
- end
40
-
41
- # @param project [Asana::Resources::Project]
42
- # @param field_name [Symbol]
43
- #
44
- # @sg-ignore
45
- # @return [Date, Time, nil]
46
- def pull_date_or_time_field_by_name(project, field_name)
47
- if field_name == :due
48
- return Time.parse(project.due_at) unless project.due_at.nil?
49
-
50
- return Date.parse(project.due_on) unless project.due_on.nil?
51
-
52
- return nil
53
- end
54
-
55
- if field_name == :start
56
- return Time.parse(project.start_at) unless project.start_at.nil?
57
-
58
- return Date.parse(project.start_on) unless project.start_on.nil?
59
-
60
- return nil
61
- end
62
-
63
- raise "Teach me how to handle field #{field_name}"
64
- end
65
-
66
18
  # @sg-ignore
67
19
  # @param project [Asana::Resources::Project]
68
20
  # @param custom_field_gid [String]
@@ -18,54 +18,6 @@ module Checkoff
18
18
 
19
19
  private
20
20
 
21
- # @param project [Asana::Resources::Project]
22
- # @param field_name [Symbol]
23
- #
24
- # @sg-ignore
25
- # @return [Date, nil]
26
- def pull_date_field_by_name(project, field_name)
27
- if field_name == :modified
28
- return Time.parse(project.modified_at).to_date unless project.modified_at.nil?
29
-
30
- return nil
31
- end
32
-
33
- if field_name == :due
34
- return Time.parse(project.due_at).to_date unless project.due_at.nil?
35
-
36
- return Date.parse(project.due_on) unless project.due_on.nil?
37
-
38
- return nil
39
- end
40
-
41
- raise "Teach me how to handle field #{field_name}"
42
- end
43
-
44
- # @param project [Asana::Resources::Project]
45
- # @param field_name [Symbol]
46
- #
47
- # @sg-ignore
48
- # @return [Date, Time, nil]
49
- def pull_date_or_time_field_by_name(project, field_name)
50
- if field_name == :due
51
- return Time.parse(project.due_at) unless project.due_at.nil?
52
-
53
- return Date.parse(project.due_on) unless project.due_on.nil?
54
-
55
- return nil
56
- end
57
-
58
- if field_name == :start
59
- return Time.parse(project.start_at) unless project.start_at.nil?
60
-
61
- return Date.parse(project.start_on) unless project.start_on.nil?
62
-
63
- return nil
64
- end
65
-
66
- raise "Teach me how to handle field #{field_name}"
67
- end
68
-
69
21
  # @sg-ignore
70
22
  # @param project [Asana::Resources::Project]
71
23
  # @param custom_field_gid [String]
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../function_evaluator'
4
- require 'checkoff/internal/task_timing'
5
4
 
6
5
  module Checkoff
7
6
  module SelectorClasses
@@ -17,35 +16,11 @@ module Checkoff
17
16
  @selector = selector
18
17
  @tasks = tasks
19
18
  @timelines = timelines
20
- @task_timing = ::Checkoff::Internal::TaskTiming.new
21
19
  super()
22
20
  end
23
21
 
24
22
  private
25
23
 
26
- # @param task [Asana::Resources::Task]
27
- # @param field_name [Symbol]
28
- #
29
- # @sg-ignore
30
- # @return [Date, nil]
31
- def pull_date_field_by_name(task, field_name)
32
- if field_name == :modified
33
- return Time.parse(task.modified_at).to_date unless task.modified_at.nil?
34
-
35
- return nil
36
- end
37
-
38
- if field_name == :due
39
- return Time.parse(task.due_at).to_date unless task.due_at.nil?
40
-
41
- return Date.parse(task.due_on) unless task.due_on.nil?
42
-
43
- return nil
44
- end
45
-
46
- raise "Teach me how to handle field #{field_name}"
47
- end
48
-
49
24
  # @sg-ignore
50
25
  # @param task [Asana::Resources::Task]
51
26
  # @param custom_field_gid [String]
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'task/function_evaluator'
4
+ require 'checkoff/internal/ready_between_relative'
5
+ require 'checkoff/internal/task_timing'
4
6
 
5
7
  module Checkoff
6
8
  module SelectorClasses
@@ -134,51 +136,10 @@ module Checkoff
134
136
  #
135
137
  # @return [Boolean]
136
138
  def evaluate(task, beginning_num_days_from_now, end_num_days_from_now, ignore_dependencies: false)
137
- ready_between_relative?(task,
138
- beginning_num_days_from_now, end_num_days_from_now,
139
- ignore_dependencies: ignore_dependencies)
140
- end
141
-
142
- private
143
-
144
- # @param task [Asana::Resources::Task]
145
- # @param beginning_num_days_from_now [Integer]
146
- # @param end_num_days_from_now [Integer]
147
- # @param ignore_dependencies [Boolean]
148
- #
149
- # @return [Boolean]
150
- def ready_between_relative?(task,
151
- beginning_num_days_from_now,
152
- end_num_days_from_now,
153
- ignore_dependencies: false)
154
- beginning_n_days_from_now_time = (Time.now + (beginning_num_days_from_now * 24 * 60 * 60))
155
- end_n_days_from_now_time = (Time.now + (end_num_days_from_now * 24 * 60 * 60))
156
-
157
- # @type [Date, Time, nil]
158
- ready_date_or_time = @task_timing.date_or_time_field_by_name(task, :ready)
159
-
160
- return false if ready_date_or_time.nil?
161
-
162
- in_range = ready_in_range?(ready_date_or_time,
163
- beginning_n_days_from_now_time,
164
- end_n_days_from_now_time)
165
-
166
- return false unless in_range
167
-
168
- return false if !ignore_dependencies && @tasks.incomplete_dependencies?(task)
169
-
170
- true
171
- end
172
-
173
- # @param ready_date_or_time [Date, Time]
174
- # @param start_time [Time]
175
- # @param end_time [Time]
176
- def ready_in_range?(ready_date_or_time, start_time, end_time)
177
- if ready_date_or_time.is_a?(Time)
178
- ready_date_or_time > start_time && ready_date_or_time <= end_time
179
- else
180
- ready_date_or_time > start_time.to_date && ready_date_or_time <= end_time.to_date
181
- end
139
+ ready_between_relative = Checkoff::Internal::ReadyBetweenRelative.new(tasks: @tasks)
140
+ ready_between_relative.ready_between_relative?(task,
141
+ beginning_num_days_from_now, end_num_days_from_now,
142
+ ignore_dependencies: ignore_dependencies)
182
143
  end
183
144
  end
184
145
 
@@ -200,7 +161,9 @@ module Checkoff
200
161
  #
201
162
  # @return [Boolean]
202
163
  def evaluate(task, field_name, num_days)
203
- date = pull_date_field_by_name(task, field_name)
164
+ task_timing = Checkoff::Internal::TaskTiming.new
165
+
166
+ date = task_timing.date_or_time_field_by_name(task, field_name)&.to_date
204
167
 
205
168
  return false if date.nil?
206
169
 
@@ -229,7 +192,8 @@ module Checkoff
229
192
  #
230
193
  # @return [Boolean]
231
194
  def evaluate(task, field_name, num_days)
232
- date = pull_date_field_by_name(task, field_name)
195
+ task_timing = Checkoff::Internal::TaskTiming.new
196
+ date = task_timing.date_or_time_field_by_name(task, field_name)&.to_date
233
197
 
234
198
  return false if date.nil?
235
199
 
@@ -49,6 +49,13 @@ module Checkoff
49
49
  nil
50
50
  end
51
51
 
52
+ # @param task [Asana::Resources::Task]
53
+ #
54
+ # @return [Time, nil]
55
+ def modified_time(task)
56
+ return @time_class.parse(task.modified_at) unless task.modified_at.nil?
57
+ end
58
+
52
59
  # @param task [Asana::Resources::Task]
53
60
  # @param field_name [Symbol]
54
61
  #
@@ -59,6 +66,8 @@ module Checkoff
59
66
 
60
67
  return start_date_or_time(task) if field_name == :start
61
68
 
69
+ return modified_time(task) if field_name == :modified
70
+
62
71
  return start_date_or_time(task) || due_date_or_time(task) if field_name == :ready
63
72
 
64
73
  raise "Teach me how to handle field #{field_name}"
@@ -3,5 +3,5 @@
3
3
  # Command-line and gem client for Asana (unofficial)
4
4
  module Checkoff
5
5
  # Version of library
6
- VERSION = '0.102.0'
6
+ VERSION = '0.104.0'
7
7
  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.102.0
4
+ version: 0.104.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
@@ -134,6 +134,7 @@ files:
134
134
  - lib/checkoff/internal/config_loader.rb
135
135
  - lib/checkoff/internal/create-class.sh
136
136
  - lib/checkoff/internal/project_selector_evaluator.rb
137
+ - lib/checkoff/internal/ready_between_relative.rb
137
138
  - lib/checkoff/internal/search_url.rb
138
139
  - lib/checkoff/internal/search_url/custom_field_param_converter.rb
139
140
  - lib/checkoff/internal/search_url/custom_field_variant.rb