checkoff 0.175.0 → 0.176.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: ad196605a8e7b9fb2a14a28040f8f7ee261f13aed5fa6aec8cfde037c174943d
4
- data.tar.gz: da12083f2d30e975a21464877c8ad47b63c63ea25f05d5599a1944d03c889dbd
3
+ metadata.gz: '009e431ea6abee485edb629966f1412508a9f376750b84ab1db639bb7a252735'
4
+ data.tar.gz: 439f1735a8f14aa173d9fe7dce52d264e1473ed25b447bc4173055a536a03bae
5
5
  SHA512:
6
- metadata.gz: b5a8ff3e8f5598e6392c7528057e7d0077bf95f10cab13faaaff4e09a78be8582d64426f27262f01d2568159ef35213ad2fbc2a4b564144f464a9b112ec5aeac
7
- data.tar.gz: 968285c9e60e3543ea60a858c0ab845e889b68fe41b2839f37a4163c893ef79449382299c2e413342740419b7812d7f70e2b3cd07d87f613fad7ad80f671e192
6
+ metadata.gz: d9f2bf902b971678c75fbaa3ed182ddcaeff35c808df829ada02869efb197d91bfa3624d2410ede703b45b8d1e029f4ac105fad4cd1ec8cccc61cd7a71e0bb50
7
+ data.tar.gz: e21848eb4e6b57b48c661676cac5f33de827f90b378e102e1d4c16a9ceb081f11f5f34aab95c121236697ef5a770bb55e3595d39cabcfc63b4bb617ba96d2e16
data/Gemfile.lock CHANGED
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- checkoff (0.175.0)
15
+ checkoff (0.176.0)
16
16
  activesupport
17
17
  asana (> 0.10.0)
18
18
  cache_method
@@ -23,7 +23,7 @@ PATH
23
23
  GEM
24
24
  remote: https://rubygems.org/
25
25
  specs:
26
- activesupport (7.1.2)
26
+ activesupport (7.1.3)
27
27
  base64
28
28
  bigdecimal
29
29
  concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -50,7 +50,7 @@ GEM
50
50
  concurrent-ruby
51
51
  childprocess (4.1.0)
52
52
  coderay (1.1.3)
53
- concurrent-ruby (1.2.2)
53
+ concurrent-ruby (1.2.3)
54
54
  connection_pool (2.4.1)
55
55
  crack (0.4.5)
56
56
  rexml
@@ -114,7 +114,7 @@ GEM
114
114
  mime-types (3.5.1)
115
115
  mime-types-data (~> 3.2015)
116
116
  mime-types-data (3.2023.1205)
117
- minitest (5.20.0)
117
+ minitest (5.21.1)
118
118
  minitest-profile (0.0.2)
119
119
  minitest-reporters (1.6.1)
120
120
  ansi
@@ -18,12 +18,15 @@ module Checkoff
18
18
 
19
19
  # @param filters [Array<Hash>, nil] The filters to match against
20
20
  # @param clients [Checkoff::Clients]
21
+ # @param tasks [Checkoff::Tasks]
21
22
  # @param client [Asana::Client]
22
23
  def initialize(filters:,
23
24
  clients: Checkoff::Clients.new,
25
+ tasks: Checkoff::Tasks.new,
24
26
  client: clients.client)
25
27
  @filters = filters
26
28
  @client = client
29
+ @tasks = tasks
27
30
  end
28
31
 
29
32
  # @param asana_event [Hash] The event that Asana sent
@@ -85,27 +88,42 @@ module Checkoff
85
88
  asana_event.fetch('parent', {})['gid'] == value
86
89
  when 'checkoff:resource.gid'
87
90
  asana_event.fetch('resource', {})['gid'] == value
91
+ when 'checkoff:fetched.section.gid'
92
+ fields = ['memberships.section.gid', 'assignee', 'assignee_section']
93
+ task = uncached_fetch_task(key, asana_event, fields)
94
+ task_data = @tasks.task_to_h(task)
95
+ task_data.fetch('membership_by_section_gid').keys.include?(value)
88
96
  when 'checkoff:fetched.completed'
89
- # @type [Hash{String => String}]
90
- # @sg-ignore
91
- resource = asana_event.fetch('resource')
92
- # @type [String]
93
- resource_type = resource.fetch('resource_type')
94
- unless resource_type == 'task'
95
- raise "Teach me how to check #{key.inspect} on resource type #{resource_type.inspect}"
96
- end
97
-
98
- task_gid = resource.fetch('gid')
99
- options = {
100
- fields: ['completed_at'],
101
- }
102
- task = @client.tasks.find_by_id(task_gid, options: options)
97
+ fields = ['completed_at']
98
+ task = uncached_fetch_task(key, asana_event, fields)
103
99
  task_completed = !task.completed_at.nil?
104
100
  task_completed == value
105
101
  else
106
102
  raise "Unknown filter key #{key}"
107
103
  end
108
104
  end
105
+
106
+ # @param key [String]
107
+ # @param asana_event [Hash]
108
+ # @param fields [Array<String>]
109
+ #
110
+ # @return [Asana::Resources::Task]
111
+ def uncached_fetch_task(key, asana_event, fields)
112
+ # @type [Hash{String => String}]
113
+ # @sg-ignore
114
+ resource = asana_event.fetch('resource')
115
+ # @type [String]
116
+ resource_type = resource.fetch('resource_type')
117
+ unless resource_type == 'task'
118
+ raise "Teach me how to check #{key.inspect} on resource type #{resource_type.inspect}"
119
+ end
120
+
121
+ task_gid = resource.fetch('gid')
122
+ options = {
123
+ fields: fields,
124
+ }
125
+ @client.tasks.find_by_id(task_gid, options: options)
126
+ end
109
127
  end
110
128
  end
111
129
  end
@@ -12,7 +12,7 @@ module Checkoff
12
12
  task_hash = task.to_h
13
13
  task_hash['unwrapped'] = {}
14
14
  unwrap_custom_fields(task_hash)
15
- unwrap_memberships(task_hash)
15
+ unwrap_all_memberships(task_hash)
16
16
  task_hash['task'] = task.name
17
17
  task_hash
18
18
  end
@@ -39,15 +39,32 @@ module Checkoff
39
39
  task_hash['unwrapped']['custom_fields'] = unwrapped_custom_fields
40
40
  end
41
41
 
42
+ # @param [Hash<String, Hash, Array>] task_hash
43
+ # @param [Array<Hash>] memberships
44
+ #
45
+ # @return [void]
46
+ def add_user_task_list(task_hash, memberships)
47
+ return unless task_hash.key? 'assignee_section'
48
+
49
+ assignee_section = task_hash.fetch('assignee_section')
50
+ # @type [Hash]
51
+ assignee = task_hash.fetch('assignee')
52
+ memberships << {
53
+ 'section' => assignee_section.dup,
54
+ 'project' => {
55
+ 'gid' => assignee.fetch('gid'),
56
+ 'name' => :my_tasks,
57
+ },
58
+ }
59
+ end
60
+
42
61
  # @param task_hash [Hash]
43
62
  # @param resource [String]
63
+ # @param memberships [Array<Hash>]
44
64
  # @param key [String]
45
65
  #
46
66
  # @return [void]
47
- def unwrap_membership(task_hash, resource, key)
48
- # @sg-ignore
49
- # @type [Array<Hash>]
50
- memberships = task_hash.fetch('memberships', [])
67
+ def unwrap_memberships(task_hash, memberships, resource, key)
51
68
  # @sg-ignore
52
69
  # @type [Hash]
53
70
  unwrapped = task_hash.fetch('unwrapped')
@@ -58,11 +75,15 @@ module Checkoff
58
75
 
59
76
  # @param task_hash [Hash]
60
77
  # @return [void]
61
- def unwrap_memberships(task_hash)
62
- unwrap_membership(task_hash, 'section', 'gid')
63
- unwrap_membership(task_hash, 'section', 'name')
64
- unwrap_membership(task_hash, 'project', 'gid')
65
- unwrap_membership(task_hash, 'project', 'name')
78
+ def unwrap_all_memberships(task_hash)
79
+ # @sg-ignore
80
+ # @type [Array<Hash>]
81
+ memberships = task_hash.fetch('memberships', []).dup
82
+ add_user_task_list(task_hash, memberships)
83
+ unwrap_memberships(task_hash, memberships, 'section', 'gid')
84
+ unwrap_memberships(task_hash, memberships, 'section', 'name')
85
+ unwrap_memberships(task_hash, memberships, 'project', 'gid')
86
+ unwrap_memberships(task_hash, memberships, 'project', 'name')
66
87
  end
67
88
  end
68
89
  end
@@ -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.175.0'
6
+ VERSION = '0.176.0'
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.175.0
4
+ version: 0.176.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: 2024-01-15 00:00:00.000000000 Z
11
+ date: 2024-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport