checkoff 0.226.0 → 0.227.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +10 -10
  3. data/lib/checkoff/cli.rb +9 -9
  4. data/lib/checkoff/custom_fields.rb +3 -3
  5. data/lib/checkoff/events.rb +6 -6
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +10 -10
  7. data/lib/checkoff/internal/asana_event_filter.rb +2 -2
  8. data/lib/checkoff/internal/project_selector_evaluator.rb +2 -2
  9. data/lib/checkoff/internal/project_timing.rb +1 -1
  10. data/lib/checkoff/internal/search_url/parser.rb +3 -3
  11. data/lib/checkoff/internal/search_url/simple_param_converter.rb +1 -1
  12. data/lib/checkoff/internal/section_selector_evaluator.rb +4 -4
  13. data/lib/checkoff/internal/selector_classes/project.rb +2 -2
  14. data/lib/checkoff/internal/selector_classes/task.rb +4 -4
  15. data/lib/checkoff/internal/selector_evaluator.rb +1 -1
  16. data/lib/checkoff/internal/task_hashes.rb +1 -1
  17. data/lib/checkoff/internal/task_selector_evaluator.rb +1 -1
  18. data/lib/checkoff/internal/task_timing.rb +1 -1
  19. data/lib/checkoff/my_tasks.rb +5 -5
  20. data/lib/checkoff/portfolios.rb +6 -6
  21. data/lib/checkoff/project_selectors.rb +8 -8
  22. data/lib/checkoff/projects.rb +13 -13
  23. data/lib/checkoff/resources.rb +6 -6
  24. data/lib/checkoff/section_selectors.rb +7 -7
  25. data/lib/checkoff/sections.rb +21 -21
  26. data/lib/checkoff/subtasks.rb +6 -6
  27. data/lib/checkoff/tags.rb +8 -8
  28. data/lib/checkoff/task_searches.rb +12 -12
  29. data/lib/checkoff/task_selectors.rb +11 -11
  30. data/lib/checkoff/tasks.rb +23 -23
  31. data/lib/checkoff/timelines.rb +6 -6
  32. data/lib/checkoff/version.rb +1 -1
  33. data/lib/checkoff/workspaces.rb +1 -1
  34. data/rbi/checkoff.rbi +2482 -49
  35. data/sig/checkoff.rbs +29 -9
  36. metadata +1 -1
@@ -40,16 +40,16 @@ module Checkoff
40
40
  # @param workspaces [Checkoff::Workspaces]
41
41
  # @param time [Class<Time>]
42
42
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
43
- client: Checkoff::Clients.new(config: config).client,
44
- projects: Checkoff::Projects.new(config: config,
45
- client: client),
46
- workspaces: Checkoff::Workspaces.new(config: config,
47
- client: client),
43
+ client: Checkoff::Clients.new(config:).client,
44
+ projects: Checkoff::Projects.new(config:,
45
+ client:),
46
+ workspaces: Checkoff::Workspaces.new(config:,
47
+ client:),
48
48
  time: Time)
49
49
  @projects = projects
50
50
  @workspaces = workspaces
51
51
  @my_tasks = Checkoff::MyTasks
52
- .new(config: config, projects: projects, client: client)
52
+ .new(config:, projects:, client:)
53
53
  @client = client
54
54
  @time = time
55
55
  end
@@ -62,7 +62,7 @@ module Checkoff
62
62
  # @return [Enumerable<Asana::Resources::Section>]
63
63
  def sections_or_raise(workspace_name, project_name, extra_fields: [])
64
64
  project = project_or_raise(workspace_name, project_name)
65
- sections_by_project_gid(project.gid, extra_fields: extra_fields)
65
+ sections_by_project_gid(project.gid, extra_fields:)
66
66
  end
67
67
  cache_method :sections_or_raise, SHORT_CACHE_TIME
68
68
 
@@ -73,8 +73,8 @@ module Checkoff
73
73
  # @return [Enumerable<Asana::Resources::Section>]
74
74
  def sections_by_project_gid(project_gid, extra_fields: [])
75
75
  fields = (%w[name] + extra_fields).sort.uniq
76
- client.sections.get_sections_for_project(project_gid: project_gid,
77
- options: { fields: fields })
76
+ client.sections.get_sections_for_project(project_gid:,
77
+ options: { fields: })
78
78
  end
79
79
  cache_method :sections_by_project_gid, SHORT_CACHE_TIME
80
80
 
@@ -94,9 +94,9 @@ module Checkoff
94
94
 
95
95
  project = project_or_raise(workspace_name, project_name)
96
96
  if project_name == :my_tasks
97
- my_tasks.tasks_by_section_for_my_tasks(project, only_uncompleted: only_uncompleted, extra_fields: extra_fields)
97
+ my_tasks.tasks_by_section_for_my_tasks(project, only_uncompleted:, extra_fields:)
98
98
  else
99
- tasks_by_section_for_project(project, only_uncompleted: only_uncompleted, extra_fields: extra_fields)
99
+ tasks_by_section_for_project(project, only_uncompleted:, extra_fields:)
100
100
  end
101
101
  end
102
102
 
@@ -108,8 +108,8 @@ module Checkoff
108
108
  def tasks_by_section_gid(section_gid,
109
109
  only_uncompleted: true,
110
110
  extra_fields: [])
111
- options = projects.task_options(extra_fields: extra_fields,
112
- only_uncompleted: only_uncompleted)
111
+ options = projects.task_options(extra_fields:,
112
+ only_uncompleted:)
113
113
  client.tasks.get_tasks(section: section_gid, **options)
114
114
  end
115
115
 
@@ -126,8 +126,8 @@ module Checkoff
126
126
  only_uncompleted: true,
127
127
  extra_fields: [])
128
128
  section = section_or_raise(workspace_name, project_name, section_name)
129
- options = projects.task_options(extra_fields: extra_fields,
130
- only_uncompleted: only_uncompleted)
129
+ options = projects.task_options(extra_fields:,
130
+ only_uncompleted:)
131
131
  # Note: 30 minute cache time on a raw Enumerable from SDK gives
132
132
  # 'Your pagination token has expired' errors. So we go ahead
133
133
  # and eagerly evaluate here so we can enjoy the cache.
@@ -157,7 +157,7 @@ module Checkoff
157
157
  # @return [Asana::Resources::Section]
158
158
  def section_or_raise(workspace_name, project_name, section_name, extra_section_fields: [])
159
159
  s = section(workspace_name, project_name, section_name,
160
- extra_section_fields: extra_section_fields)
160
+ extra_section_fields:)
161
161
  if s.nil?
162
162
  valid_sections = sections_or_raise(workspace_name, project_name,
163
163
  extra_fields: extra_section_fields).map(&:name)
@@ -199,8 +199,8 @@ module Checkoff
199
199
  # @return [Asana::Resources::Section, nil]
200
200
  def section_by_gid(gid)
201
201
  options = {}
202
- Asana::Resources::Section.new(parse(client.get("/sections/#{gid}", options: options)).first,
203
- client: client)
202
+ Asana::Resources::Section.new(parse(client.get("/sections/#{gid}", options:)).first,
203
+ client:)
204
204
  rescue Asana::Errors::NotFound => e
205
205
  debug e
206
206
  nil
@@ -254,8 +254,8 @@ module Checkoff
254
254
  only_uncompleted: true,
255
255
  extra_fields: [])
256
256
  raw_tasks = projects.tasks_from_project(project,
257
- only_uncompleted: only_uncompleted,
258
- extra_fields: extra_fields)
257
+ only_uncompleted:,
258
+ extra_fields:)
259
259
  active_tasks = projects.active_tasks(raw_tasks)
260
260
  by_section(active_tasks, project.gid)
261
261
  end
@@ -267,7 +267,7 @@ module Checkoff
267
267
  def by_section(tasks, project_gid)
268
268
  by_section = {}
269
269
  # @sg-ignore
270
- sections = client.sections.get_sections_for_project(project_gid: project_gid,
270
+ sections = client.sections.get_sections_for_project(project_gid:,
271
271
  options: { fields: ['name'] })
272
272
  sections.each_entry { |section| by_section[section_key(section.name)] = [] }
273
273
  tasks.each { |task| file_task_by_section(by_section, task, project_gid) }
@@ -17,12 +17,12 @@ module Checkoff
17
17
 
18
18
  extend Forwardable
19
19
 
20
- # @param config [Hash]
20
+ # @param config [Hash,Checkoff::Internal::EnvFallbackConfigLoader]
21
21
  # @param projects [Checkoff::Projects]
22
22
  # @param clients [Checkoff::Clients]
23
23
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
24
- projects: Checkoff::Projects.new(config: config),
25
- clients: Checkoff::Clients.new(config: config))
24
+ projects: Checkoff::Projects.new(config:),
25
+ clients: Checkoff::Clients.new(config:))
26
26
  @projects = projects
27
27
  @client = clients.client
28
28
  end
@@ -75,11 +75,11 @@ module Checkoff
75
75
  only_uncompleted: true)
76
76
  # @type [Hash]
77
77
  all_options = projects.task_options(extra_fields: extra_fields + %w[is_rendered_as_separator],
78
- only_uncompleted: only_uncompleted)
78
+ only_uncompleted:)
79
79
  options = all_options.fetch(:options, {})
80
- client.tasks.get_subtasks_for_task(task_gid: task_gid,
80
+ client.tasks.get_subtasks_for_task(task_gid:,
81
81
  # per_page: 100, # stub doesn't have this arg available
82
- options: options)
82
+ options:)
83
83
  end
84
84
  cache_method :subtasks_by_gid, LONG_CACHE_TIME
85
85
 
data/lib/checkoff/tags.rb CHANGED
@@ -30,10 +30,10 @@ module Checkoff
30
30
  # @param projects [Checkoff::Projects]
31
31
  # @param workspaces [Checkoff::Workspaces]
32
32
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
33
- clients: Checkoff::Clients.new(config: config),
33
+ clients: Checkoff::Clients.new(config:),
34
34
  client: clients.client,
35
- projects: Checkoff::Projects.new(config: config, client: client),
36
- workspaces: Checkoff::Workspaces.new(config: config, client: client))
35
+ projects: Checkoff::Projects.new(config:, client:),
36
+ workspaces: Checkoff::Workspaces.new(config:, client:))
37
37
  @workspaces = T.let(workspaces, Checkoff::Workspaces)
38
38
  @projects = T.let(projects, Checkoff::Projects)
39
39
  @client = T.let(client, Asana::Client)
@@ -52,7 +52,7 @@ module Checkoff
52
52
  tag_gid = tag.gid
53
53
 
54
54
  tasks_by_tag_gid(workspace_name, tag_gid,
55
- only_uncompleted: only_uncompleted, extra_fields: extra_fields)
55
+ only_uncompleted:, extra_fields:)
56
56
  end
57
57
 
58
58
  # @param workspace_name [String]
@@ -62,13 +62,13 @@ module Checkoff
62
62
  #
63
63
  # @return [Enumerable<Asana::Resources::Task>]
64
64
  def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: [])
65
- options = projects.task_options(extra_fields: extra_fields,
66
- only_uncompleted: only_uncompleted)
65
+ options = projects.task_options(extra_fields:,
66
+ only_uncompleted:)
67
67
  params = build_params(options)
68
68
  Asana::Resources::Collection.new(parse(client.get("/tags/#{tag_gid}/tasks",
69
- params: params, options: options[:options])),
69
+ params:, options: options[:options])),
70
70
  type: Asana::Resources::Task,
71
- client: client)
71
+ client:)
72
72
  end
73
73
 
74
74
  # @param workspace_name [String]
@@ -33,7 +33,7 @@ module Checkoff
33
33
  # @!parse
34
34
  # extend CacheMethod::ClassMethods
35
35
 
36
- # @param config [Hash<Symbol, Object>]
36
+ # @param config [Hash<Symbol, Object>,Checkoff::Internal::EnvFallbackConfigLoader]
37
37
  # @param workspaces [Checkoff::Workspaces]
38
38
  # @param task_selectors [Checkoff::TaskSelectors]
39
39
  # @param projects [Checkoff::Projects]
@@ -42,10 +42,10 @@ module Checkoff
42
42
  # @param search_url_parser [Checkoff::Internal::SearchUrl::Parser]
43
43
  # @param asana_resources_collection_class [Class<Asana::Resources::Collection>]
44
44
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
45
- workspaces: Checkoff::Workspaces.new(config: config),
46
- task_selectors: Checkoff::TaskSelectors.new(config: config),
47
- projects: Checkoff::Projects.new(config: config),
48
- clients: Checkoff::Clients.new(config: config),
45
+ workspaces: Checkoff::Workspaces.new(config:),
46
+ task_selectors: Checkoff::TaskSelectors.new(config:),
47
+ projects: Checkoff::Projects.new(config:),
48
+ clients: Checkoff::Clients.new(config:),
49
49
  client: clients.client,
50
50
  search_url_parser: Checkoff::Internal::SearchUrl::Parser.new,
51
51
  asana_resources_collection_class: Asana::Resources::Collection)
@@ -74,8 +74,8 @@ module Checkoff
74
74
  # @sg-ignore
75
75
  api_params, task_selector = @search_url_parser.convert_params(url)
76
76
  debug { "Task search params: api_params=#{api_params}, task_selector=#{task_selector}" }
77
- raw_task_search(api_params, workspace_gid: workspace.gid, task_selector: task_selector,
78
- extra_fields: extra_fields)
77
+ raw_task_search(api_params, workspace_gid: workspace.gid, task_selector:,
78
+ extra_fields:)
79
79
  end
80
80
  cache_method :task_search, SHORT_CACHE_TIME
81
81
 
@@ -94,11 +94,11 @@ module Checkoff
94
94
  workspace_gid:, extra_fields: [], task_selector: [],
95
95
  fetch_all: true)
96
96
  # @sg-ignore
97
- tasks = api_task_search_request(api_params, workspace_gid: workspace_gid, extra_fields: extra_fields)
97
+ tasks = api_task_search_request(api_params, workspace_gid:, extra_fields:)
98
98
 
99
99
  if fetch_all && tasks.count == 100
100
100
  # @sg-ignore
101
- tasks = iterated_raw_task_search(api_params, workspace_gid: workspace_gid, extra_fields: extra_fields)
101
+ tasks = iterated_raw_task_search(api_params, workspace_gid:, extra_fields:)
102
102
  end
103
103
 
104
104
  debug { "#{tasks.count} raw tasks returned" }
@@ -131,9 +131,9 @@ module Checkoff
131
131
  options = calculate_api_options(extra_fields)
132
132
  @asana_resources_collection_class.new(parse(client.get(path,
133
133
  params: api_params,
134
- options: options)),
134
+ options:)),
135
135
  type: Asana::Resources::Task,
136
- client: client)
136
+ client:)
137
137
  end
138
138
 
139
139
  # Perform a search using the Asana Task Search API and use manual pagination to
@@ -171,7 +171,7 @@ module Checkoff
171
171
 
172
172
  # @type [Array<Asana::Resources::Task>]
173
173
  task_batch = raw_task_search(new_api_params,
174
- workspace_gid: workspace_gid, extra_fields: extra_fields + ['created_at'],
174
+ workspace_gid:, extra_fields: extra_fields + ['created_at'],
175
175
  fetch_all: false).to_a
176
176
  oldest = task_batch.to_a.last
177
177
 
@@ -21,18 +21,18 @@ module Checkoff
21
21
  SHORT_CACHE_TIME = MINUTE
22
22
 
23
23
  # @sg-ignore
24
- # @param [Hash] config
24
+ # @param [Hash,Checkoff::Internal::EnvFallbackConfigLoader] config
25
25
  # @param [Asana::Client] client
26
26
  # @param [Checkoff::Tasks] tasks
27
27
  # @param [Checkoff::Timelines] timelines
28
28
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
29
- client: Checkoff::Clients.new(config: config).client,
30
- tasks: Checkoff::Tasks.new(config: config,
31
- client: client),
32
- timelines: Checkoff::Timelines.new(config: config,
33
- client: client),
34
- custom_fields: Checkoff::CustomFields.new(config: config,
35
- client: client))
29
+ client: Checkoff::Clients.new(config:).client,
30
+ tasks: Checkoff::Tasks.new(config:,
31
+ client:),
32
+ timelines: Checkoff::Timelines.new(config:,
33
+ client:),
34
+ custom_fields: Checkoff::CustomFields.new(config:,
35
+ client:))
36
36
  @config = config
37
37
  @tasks = tasks
38
38
  @timelines = timelines
@@ -44,8 +44,8 @@ module Checkoff
44
44
  # task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
45
45
  # @return [Boolean]
46
46
  def filter_via_task_selector(task, task_selector)
47
- evaluator = TaskSelectorEvaluator.new(task: task, tasks: tasks, timelines: timelines,
48
- custom_fields: custom_fields)
47
+ evaluator = TaskSelectorEvaluator.new(task:, tasks:, timelines:,
48
+ custom_fields:)
49
49
  evaluator.evaluate(task_selector)
50
50
  end
51
51
 
@@ -89,7 +89,7 @@ module Checkoff
89
89
  extra_fields = ['custom_fields']
90
90
  projects = Checkoff::Projects.new
91
91
  project = projects.project_or_raise(workspace_name, project_name)
92
- raw_tasks = projects.tasks_from_project(project, extra_fields: extra_fields)
92
+ raw_tasks = projects.tasks_from_project(project, extra_fields:)
93
93
  tasks = raw_tasks.filter { |task| task_selectors.filter_via_task_selector(task, task_selector) }
94
94
  # avoid n+1 queries generating the full task formatting
95
95
  puts JSON.pretty_generate(tasks.map(&:to_h))
@@ -42,15 +42,15 @@ module Checkoff
42
42
  # @param date_class [Class<Date>]
43
43
  # @param asana_task [Class<Asana::Resources::Task>]
44
44
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
45
- client: Checkoff::Clients.new(config: config).client,
46
- workspaces: Checkoff::Workspaces.new(config: config,
47
- client: client),
48
- sections: Checkoff::Sections.new(config: config,
49
- client: client),
50
- portfolios: Checkoff::Portfolios.new(config: config,
51
- client: client),
52
- custom_fields: Checkoff::CustomFields.new(config: config,
53
- client: client),
45
+ client: Checkoff::Clients.new(config:).client,
46
+ workspaces: Checkoff::Workspaces.new(config:,
47
+ client:),
48
+ sections: Checkoff::Sections.new(config:,
49
+ client:),
50
+ portfolios: Checkoff::Portfolios.new(config:,
51
+ client:),
52
+ custom_fields: Checkoff::CustomFields.new(config:,
53
+ client:),
54
54
  time_class: Time,
55
55
  date_class: Date,
56
56
  asana_task: Asana::Resources::Task)
@@ -130,7 +130,7 @@ module Checkoff
130
130
  end
131
131
  return nil if task_gid.nil?
132
132
 
133
- task_by_gid(task_gid, only_uncompleted: only_uncompleted, extra_fields: extra_fields)
133
+ task_by_gid(task_gid, only_uncompleted:, extra_fields:)
134
134
  end
135
135
  cache_method :task, LONG_CACHE_TIME
136
136
 
@@ -145,7 +145,7 @@ module Checkoff
145
145
  # @sg-ignore
146
146
  t = tasks(workspace_name,
147
147
  project_name,
148
- section_name: section_name,
148
+ section_name:,
149
149
  only_uncompleted: false)
150
150
  task_for_gid = t.find { |task| task.name == task_name }
151
151
  task_for_gid&.gid
@@ -162,12 +162,12 @@ module Checkoff
162
162
  def task_by_gid(task_gid,
163
163
  extra_fields: [],
164
164
  only_uncompleted: true)
165
- all_options = projects.task_options(extra_fields: extra_fields,
166
- only_uncompleted: only_uncompleted)
165
+ all_options = projects.task_options(extra_fields:,
166
+ only_uncompleted:)
167
167
  # @type [Hash]
168
168
  options = all_options.fetch(:options, {})
169
169
  options[:completed_since] = all_options[:completed_since] unless all_options[:completed_since].nil?
170
- client.tasks.find_by_id(task_gid, options: options)
170
+ client.tasks.find_by_id(task_gid, options:)
171
171
  rescue Asana::Errors::NotFound => e
172
172
  debug e
173
173
  nil
@@ -186,7 +186,7 @@ module Checkoff
186
186
  assignee_gid: default_assignee_gid)
187
187
  @asana_task.create(client,
188
188
  assignee: assignee_gid,
189
- workspace: workspace_gid, name: name)
189
+ workspace: workspace_gid, name:)
190
190
  end
191
191
 
192
192
  # Return user-accessible URL for a task
@@ -254,7 +254,7 @@ module Checkoff
254
254
 
255
255
  dependent_tasks << dependent_task
256
256
  dependent_tasks += all_dependent_tasks(dependent_task,
257
- extra_task_fields: extra_task_fields)
257
+ extra_task_fields:)
258
258
  end
259
259
  dependent_tasks
260
260
  end
@@ -281,7 +281,7 @@ module Checkoff
281
281
  #
282
282
  # @return [Asana::Resources::Task]
283
283
  def h_to_task(task_data)
284
- task_hashes.h_to_task(task_data, client: client)
284
+ task_hashes.h_to_task(task_data, client:)
285
285
  end
286
286
 
287
287
  # True if the task is in a project which is in the given portfolio
@@ -332,8 +332,8 @@ module Checkoff
332
332
  # @return [Checkoff::Internal::TaskTiming]
333
333
  def task_timing
334
334
  @task_timing ||= Checkoff::Internal::TaskTiming.new(time_class: @time_class, date_class: @date_class,
335
- client: client,
336
- custom_fields: custom_fields)
335
+ client:,
336
+ custom_fields:)
337
337
  end
338
338
 
339
339
  # @return [Checkoff::Internal::TaskHashes]
@@ -353,12 +353,12 @@ module Checkoff
353
353
  if section_name == :unspecified
354
354
  project = projects.project_or_raise(workspace_name, project_name)
355
355
  projects.tasks_from_project(project,
356
- only_uncompleted: only_uncompleted,
357
- extra_fields: extra_fields)
356
+ only_uncompleted:,
357
+ extra_fields:)
358
358
  else
359
359
  @sections.tasks(workspace_name, project_name, section_name,
360
- only_uncompleted: only_uncompleted,
361
- extra_fields: extra_fields)
360
+ only_uncompleted:,
361
+ extra_fields:)
362
362
  end
363
363
  end
364
364
  cache_method :tasks, SHORT_CACHE_TIME
@@ -24,7 +24,7 @@ module Checkoff
24
24
  LONG_CACHE_TIME = MINUTE * 15
25
25
  SHORT_CACHE_TIME = MINUTE
26
26
 
27
- # @param config [Hash]
27
+ # @param config [Hash,Checkoff::Internal::EnvFallbackConfigLoader]
28
28
  # @param workspaces [Checkoff::Workspaces]
29
29
  # @param sections [Checkoff::Sections]
30
30
  # @param tasks [Checkoff::Tasks]
@@ -32,11 +32,11 @@ module Checkoff
32
32
  # @param clients [Checkoff::Clients]
33
33
  # @param client [Asana::Client]
34
34
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
35
- workspaces: Checkoff::Workspaces.new(config: config),
36
- sections: Checkoff::Sections.new(config: config),
37
- tasks: Checkoff::Tasks.new(config: config),
38
- portfolios: Checkoff::Portfolios.new(config: config),
39
- clients: Checkoff::Clients.new(config: config),
35
+ workspaces: Checkoff::Workspaces.new(config:),
36
+ sections: Checkoff::Sections.new(config:),
37
+ tasks: Checkoff::Tasks.new(config:),
38
+ portfolios: Checkoff::Portfolios.new(config:),
39
+ clients: Checkoff::Clients.new(config:),
40
40
  client: clients.client)
41
41
  @workspaces = workspaces
42
42
  @sections = sections
@@ -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.226.0'
7
+ VERSION = '0.227.0'
8
8
  end
@@ -26,7 +26,7 @@ module Checkoff
26
26
  # @param client [Asana::Client]
27
27
  # @param asana_workspace [Class<Asana::Resources::Workspace>]
28
28
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana),
29
- client: Checkoff::Clients.new(config: config).client,
29
+ client: Checkoff::Clients.new(config:).client,
30
30
  asana_workspace: Asana::Resources::Workspace)
31
31
  @config = config
32
32
  @client = client