checkoff 0.98.0 → 0.99.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: 2725cd346d11c05b4742b3dd59d1202064a3a9036ec37c2037332a02f93165eb
4
- data.tar.gz: b02da55d5036d05eee1c3fb58237cf42e68c28b788be66cd0f41a07647b9e6eb
3
+ metadata.gz: f0aa9c88e96e1094d284c59a9c7146ff72f393f2e16442c8e320b3253ab0221d
4
+ data.tar.gz: 7f6021289d7fb0e331cb6b993b10307287c365d9a00d5fbe789e5b6c13972dad
5
5
  SHA512:
6
- metadata.gz: a8a4286f693c686211aa41db250b7d3825b9a846a923e53f7327ca0d94ba714f7b94ebfa8ec55964506721d4912d419318e8c2e94ef147b0ed586151a5b5d252
7
- data.tar.gz: 1c1d1f4a88a447e27f3bc9beaf10ff6fec97f0b55ced249eb7cdfbcd2e36955bb5230fb3991339eecd19f44f6b5d9c2ef646746a6ee175b5d4db2d1964305f00
6
+ metadata.gz: ab4476c149bf918e5d138f71a5d1c5df78192f3fa3fa13e8ef0e8a2d7c7198b34268a78ab14e6009237d3cf0113316f3ff91222d22893606c5ecc1ab31830d55
7
+ data.tar.gz: 4f804bcfc9548b7106fcd80c5764da4250bf024e9dc7f1c2b95460078b89de3a238ba2b28f6d44188cd3fee074a0d348925ef780b751534a0f801f08b74fab24
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.98.0)
15
+ checkoff (0.99.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../function_evaluator'
4
+ require 'checkoff/internal/task_timing'
4
5
 
5
6
  module Checkoff
6
7
  module SelectorClasses
@@ -16,6 +17,7 @@ module Checkoff
16
17
  @selector = selector
17
18
  @tasks = tasks
18
19
  @timelines = timelines
20
+ @task_timing = ::Checkoff::Internal::TaskTiming.new
19
21
  super()
20
22
  end
21
23
 
@@ -44,31 +46,6 @@ module Checkoff
44
46
  raise "Teach me how to handle field #{field_name}"
45
47
  end
46
48
 
47
- # @param task [Asana::Resources::Task]
48
- # @param field_name [Symbol]
49
- #
50
- # @sg-ignore
51
- # @return [Date, Time, nil]
52
- def pull_date_or_time_field_by_name(task, field_name)
53
- if field_name == :due
54
- return Time.parse(task.due_at) unless task.due_at.nil?
55
-
56
- return Date.parse(task.due_on) unless task.due_on.nil?
57
-
58
- return nil
59
- end
60
-
61
- if field_name == :start
62
- return Time.parse(task.start_at) unless task.start_at.nil?
63
-
64
- return Date.parse(task.start_on) unless task.start_on.nil?
65
-
66
- return nil
67
- end
68
-
69
- raise "Teach me how to handle field #{field_name}"
70
- end
71
-
72
49
  # @sg-ignore
73
50
  # @param task [Asana::Resources::Task]
74
51
  # @param custom_field_gid [String]
@@ -138,8 +138,8 @@ module Checkoff
138
138
  end_n_days_from_now_time = (Time.now + (end_num_days_from_now * 24 * 60 * 60))
139
139
 
140
140
  # @type [Date, Time, nil]
141
- task_date_or_time = pull_date_or_time_field_by_name(task, :start) ||
142
- pull_date_or_time_field_by_name(task, :due)
141
+ task_date_or_time = @task_timing.date_or_time_field_by_name(task, :start) ||
142
+ @task_timing.date_or_time_field_by_name(task, :due)
143
143
 
144
144
  return false if task_date_or_time.nil?
145
145
 
@@ -5,27 +5,62 @@ module Checkoff
5
5
  # Utility methods for working with task dates and times
6
6
  class TaskTiming
7
7
  # @param time_class [Class<Time>]
8
- def initialize(time_class: Time)
8
+ # @param date_class [Class<Date>]
9
+ def initialize(time_class: Time, date_class: Date)
9
10
  @time_class = time_class
11
+ @date_class = date_class
10
12
  end
11
13
 
12
14
  # @param task [Asana::Resources::Task]
13
15
  # @return [Time, nil]
14
16
  def start_time(task)
15
- return @time_class.parse(task.start_at) if task.start_at
16
- return @time_class.parse(task.start_on) if task.start_on
17
-
18
- nil
17
+ date_or_time_field_by_name(task, :start)&.to_time
19
18
  end
20
19
 
21
20
  # @param task [Asana::Resources::Task]
22
21
  # @return [Time, nil]
23
22
  def due_time(task)
24
- return @time_class.parse(task.due_at) if task.due_at
25
- return @time_class.parse(task.due_on) if task.due_on
23
+ date_or_time_field_by_name(task, :due)&.to_time
24
+ end
25
+
26
+ # @param task [Asana::Resources::Task]
27
+ # @param field_name [Symbol]
28
+ #
29
+ # @sg-ignore
30
+ # @return [Date, Time, nil]
31
+ def start_date_or_time(task)
32
+ return @time_class.parse(task.start_at) unless task.start_at.nil?
33
+
34
+ return @date_class.parse(task.start_on) unless task.start_on.nil?
26
35
 
27
36
  nil
28
37
  end
38
+
39
+ # @param task [Asana::Resources::Task]
40
+ # @param field_name [Symbol]
41
+ #
42
+ # @sg-ignore
43
+ # @return [Date, Time, nil]
44
+ def due_date_or_time(task)
45
+ return @time_class.parse(task.due_at) unless task.due_at.nil?
46
+
47
+ return @date_class.parse(task.due_on) unless task.due_on.nil?
48
+
49
+ nil
50
+ end
51
+
52
+ # @param task [Asana::Resources::Task]
53
+ # @param field_name [Symbol]
54
+ #
55
+ # @sg-ignore
56
+ # @return [Date, Time, nil]
57
+ def date_or_time_field_by_name(task, field_name)
58
+ return due_date_or_time(task) if field_name == :due
59
+
60
+ return start_date_or_time(task) if field_name == :start
61
+
62
+ raise "Teach me how to handle field #{field_name}"
63
+ end
29
64
  end
30
65
  end
31
66
  end
@@ -27,6 +27,7 @@ module Checkoff
27
27
  # @param workspaces [Checkoff::Workspaces]
28
28
  # @param sections [Checkoff::Sections]
29
29
  # @param time_class [Class<Time>]
30
+ # @param date_class [Class<Date>]
30
31
  # @param asana_task [Class<Asana::Resources::Task>]
31
32
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
32
33
  client: Checkoff::Clients.new(config: config).client,
@@ -35,10 +36,12 @@ module Checkoff
35
36
  sections: Checkoff::Sections.new(config: config,
36
37
  client: client),
37
38
  time_class: Time,
39
+ date_class: Date,
38
40
  asana_task: Asana::Resources::Task)
39
41
  @config = config
40
42
  @sections = sections
41
43
  @time_class = time_class
44
+ @date_class = date_class
42
45
  @asana_task = asana_task
43
46
  @client = client
44
47
  @workspaces = workspaces
@@ -167,7 +170,7 @@ module Checkoff
167
170
 
168
171
  # @return [Checkoff::Internal::TaskTiming]
169
172
  def task_timing
170
- @task_timing ||= Checkoff::Internal::TaskTiming.new(time_class: @time_class)
173
+ @task_timing ||= Checkoff::Internal::TaskTiming.new(time_class: @time_class, date_class: @date_class)
171
174
  end
172
175
 
173
176
  # @return [Checkoff::Internal::TaskHashes]
@@ -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.98.0'
6
+ VERSION = '0.99.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.98.0
4
+ version: 0.99.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz