checkoff 0.25.0 → 0.26.1

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: 0163bf29ae74fcf0cf1b95a199f088b1ceb3313a8b1429491c3b08c0b662e52e
4
- data.tar.gz: 683ee42666b4ad5594c77b79ec509c5843e88384093715fbc3f0d7d189086ff8
3
+ metadata.gz: 10a2b886559bd9a77cdf03a309825250a99c4e03c251f0c1699b9941aef09e30
4
+ data.tar.gz: cab6c6505b28ee63b79c8b6765efc2401d10f4d4ec53b6b86791283a87f5a065
5
5
  SHA512:
6
- metadata.gz: 2d1a3b432d4b101558595c35b0dda58a2dadc7802bb1976091c50518355b61985287ec6089b1bfeb4f0b3588dc7426488ffcd3f4df1a52f887fb231cd49132d7
7
- data.tar.gz: 68523d9b54bb9d7ab79ee23167a75a1218b6de0673d09ff71f78fad9ddebfa802c110faeb54d84c50be45ed94ea11ccf4d833d7bd87e6d453ab249df1534e2c4
6
+ metadata.gz: e170ab3b7c20cdf9ccb0f6fc89df6277c5bebecaa1da242f58ddeab3dbedc955e097307ad23c11b88d368ae8aeb5fa73e6c0584a05aeaa335232ec753b7235b7
7
+ data.tar.gz: 6ff4dcbeeaa90e46fa67578c44ce68f790de5569b5a3a19c6d7ebf3a9181aa566921b31f4a9afb0504292a274ce4e51c0b5cb0a8480d0be75b435493f4a687dc
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.25.0)
15
+ checkoff (0.26.1)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -33,14 +33,17 @@ module Checkoff
33
33
  end
34
34
 
35
35
  def merge_args_and_task_selectors(args, new_args, task_selector, new_task_selector)
36
- args = args.merge(new_args)
37
- return [args, task_selector] if new_task_selector == []
36
+ final_args = args.merge(new_args)
38
37
 
39
- raise 'Teach me how to merge task selectors' unless task_selector == []
38
+ final_task_selector = if new_task_selector == []
39
+ task_selector
40
+ elsif task_selector == []
41
+ new_task_selector
42
+ else
43
+ [:and, task_selector, new_task_selector]
44
+ end
40
45
 
41
- task_selector = new_task_selector
42
-
43
- [args, task_selector]
46
+ [final_args, final_task_selector]
44
47
  end
45
48
 
46
49
  VARIANTS = {
@@ -100,8 +100,15 @@ module Checkoff
100
100
  raise "Teach me how to handle these remaining keys for #{variant_key}: #{remaining_params}"
101
101
  end
102
102
 
103
- empty_task_selector = []
104
- [{ "custom_fields.#{gid}.is_set" => 'false' }, empty_task_selector]
103
+ api_params = { "custom_fields.#{gid}.is_set" => 'false' }
104
+ # As of 2023-02, the 'is_set' => 'false' seems to not do
105
+ # the intuitive thing on multi-select fields; it either
106
+ # operates as a no-op or operates the same as 'true'; not
107
+ # sure.
108
+ #
109
+ # Let's handle those with a filter afterwards.
110
+ task_selector = [:nil?, [:custom_field_gid_value, gid]]
111
+ [api_params, task_selector]
105
112
  end
106
113
  end
107
114
 
@@ -17,9 +17,35 @@ module Checkoff
17
17
  object.is_a?(Array) && !object.empty? && [fn_name, fn_name.to_s].include?(object[0])
18
18
  end
19
19
 
20
+ def pull_custom_field_or_raise(task, custom_field_gid)
21
+ custom_fields = task.custom_fields
22
+ if custom_fields.nil?
23
+ raise "Could not find custom_fields under task (was 'custom_fields' included in 'extra_fields'?)"
24
+ end
25
+
26
+ matched_custom_field = custom_fields.find { |data| data.fetch('gid') == custom_field_gid }
27
+ if matched_custom_field.nil?
28
+ raise "Could not find custom field with gid #{custom_field_gid} " \
29
+ "in task #{task.gid} with custom fields #{custom_fields}"
30
+ end
31
+
32
+ matched_custom_field
33
+ end
34
+
20
35
  attr_reader :task_selector
21
36
  end
22
37
 
38
+ # :and function
39
+ class AndFunctionEvaluator < FunctionEvaluator
40
+ def matches?
41
+ fn?(task_selector, :and)
42
+ end
43
+
44
+ def evaluate(_task, lhs, rhs)
45
+ lhs && rhs
46
+ end
47
+ end
48
+
23
49
  # :not function
24
50
  class NotFunctionEvaluator < FunctionEvaluator
25
51
  def matches?
@@ -80,6 +106,22 @@ module Checkoff
80
106
  end
81
107
  end
82
108
 
109
+ # :custom_field_gid_value function
110
+ class CustomFieldGidValueFunctionEvaluator < FunctionEvaluator
111
+ def matches?
112
+ fn?(task_selector, :custom_field_gid_value)
113
+ end
114
+
115
+ def evaluate_arg?(_index)
116
+ false
117
+ end
118
+
119
+ def evaluate(task, custom_field_gid)
120
+ custom_field = pull_custom_field_or_raise(task, custom_field_gid)
121
+ custom_field['display_value']
122
+ end
123
+ end
124
+
83
125
  # :custom_field_gid_value_contains_any_gid function
84
126
  class CustomFieldGidValueContainsAnyGidFunctionEvaluator < FunctionEvaluator
85
127
  def matches?
@@ -98,20 +140,6 @@ module Checkoff
98
140
 
99
141
  private
100
142
 
101
- def pull_custom_field_or_raise(task, custom_field_gid)
102
- custom_fields = task.custom_fields
103
- if custom_fields.nil?
104
- raise "Could not find custom_fields under task (was 'custom_fields' included in 'extra_fields'?)"
105
- end
106
-
107
- matched_custom_field = custom_fields.find { |data| data.fetch('gid') == custom_field_gid }
108
- if matched_custom_field.nil?
109
- raise "Could not find custom field with gid #{custom_field_gid} in #{task.gid} with #{custom_fields}"
110
- end
111
-
112
- matched_custom_field
113
- end
114
-
115
143
  def pull_enum_values(custom_field)
116
144
  resource_subtype = custom_field.fetch('resource_subtype')
117
145
  case resource_subtype
@@ -153,7 +181,9 @@ module Checkoff
153
181
  NilPFunctionEvaluator,
154
182
  TagPFunctionEvaluator,
155
183
  CustomFieldValueFunctionEvaluator,
184
+ CustomFieldGidValueFunctionEvaluator,
156
185
  CustomFieldGidValueContainsAnyGidFunctionEvaluator,
186
+ AndFunctionEvaluator,
157
187
  ].freeze
158
188
 
159
189
  def evaluate(task_selector)
@@ -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.25.0'
6
+ VERSION = '0.26.1'
7
7
  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.25.0
4
+ version: 0.26.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-29 00:00:00.000000000 Z
11
+ date: 2023-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport