Class: Attio::Task
- Inherits:
-
APIResource
- Object
- APIResource
- Attio::Task
- Defined in:
- lib/attio/resources/task.rb
Overview
Represents a task in Attio
Constant Summary
Constants inherited from APIResource
Instance Attribute Summary
Attributes inherited from APIResource
Class Method Summary collapse
-
.create(content: nil, format: "plaintext", **params) ⇒ Object
Override create to handle required content parameter.
-
.list(**params) ⇒ Object
(also: all)
Custom list implementation to handle query params properly.
-
.resource_path ⇒ String
API endpoint path for tasks.
-
.update(id, **params) ⇒ Object
Override update to use PATCH with data wrapper.
Instance Method Summary collapse
-
#complete!(**opts) ⇒ Object
Convenience method to mark task as completed.
-
#deadline_at ⇒ Object
Parse deadline_at as Time.
-
#destroy(**opts) ⇒ Object
Override destroy to use the correct task ID.
-
#save(**opts) ⇒ Object
Override save to handle task-specific attributes.
Methods inherited from APIResource
#==, #[], #[]=, api_operations, attr_attio, #changed, #changed?, #changed_attributes, #changes, #each, execute_request, #fetch, #hash, id_param_name, #initialize, #inspect, #key?, #keys, #persisted?, prepare_params_for_create, prepare_params_for_update, #reset_changes!, resource_name, #revert!, #to_h, #to_json, #update_attributes, #update_from, validate_id!, #values
Constructor Details
This class inherits a constructor from Attio::APIResource
Class Method Details
.create(content: nil, format: "plaintext", **params) ⇒ Object
Override create to handle required content parameter
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/attio/resources/task.rb', line 32 def self.create(content: nil, format: "plaintext", **params) raise ArgumentError, "Content is required" if content.nil? || content.to_s.empty? request_params = { data: { content: content, # API expects 'content' format: format, # Format is required is_completed: params[:is_completed] || false, linked_records: params[:linked_records] || [], assignees: params[:assignees] || [] } } # deadline_at must be present (null or valid date) request_params[:data][:deadline_at] = params[:deadline_at] # Remove the params that we've already included in request_params opts = params.except(:content, :format, :deadline_at, :is_completed, :linked_records, :assignees) response = execute_request(:POST, resource_path, request_params, opts) new(response["data"] || response, opts) end |
.list(**params) ⇒ Object Also known as: all
Custom list implementation to handle query params properly
18 19 20 21 22 23 24 25 |
# File 'lib/attio/resources/task.rb', line 18 def self.list(**params) # Query params should be part of the request, not opts query_params = params.slice(:limit, :offset, :sort, :linked_object, :linked_record_id, :assignee, :is_completed) opts = params.except(:limit, :offset, :sort, :linked_object, :linked_record_id, :assignee, :is_completed) response = execute_request(:GET, resource_path, query_params, opts) ListObject.new(response, self, params, opts) end |
.resource_path ⇒ String
API endpoint path for tasks
13 14 15 |
# File 'lib/attio/resources/task.rb', line 13 def self.resource_path "tasks" end |
.update(id, **params) ⇒ Object
Override update to use PATCH with data wrapper
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/attio/resources/task.rb', line 56 def self.update(id, **params) validate_id!(id) request_params = { data: params.slice(:content, :format, :deadline_at, :is_completed, :linked_records, :assignees).compact } # Remove the params that we've already included in request_params opts = params.except(:content, :format, :deadline_at, :is_completed, :linked_records, :assignees) response = execute_request(:PATCH, "#{resource_path}/#{id}", request_params, opts) new(response["data"] || response, opts) end |
Instance Method Details
#complete!(**opts) ⇒ Object
Convenience method to mark task as completed
89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/attio/resources/task.rb', line 89 def complete!(**opts) raise InvalidRequestError, "Cannot complete a task without an ID" unless persisted? params = { data: { is_completed: true } } response = self.class.send(:execute_request, :PATCH, resource_path, params, opts) update_from(response["data"] || response) self end |
#deadline_at ⇒ Object
Parse deadline_at as Time
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/attio/resources/task.rb', line 74 def deadline_at value = @attributes[:deadline_at] return nil if value.nil? case value when Time value when String Time.parse(value) else value end end |
#destroy(**opts) ⇒ Object
Override destroy to use the correct task ID
120 121 122 123 124 125 126 127 128 129 |
# File 'lib/attio/resources/task.rb', line 120 def destroy(**opts) raise InvalidRequestError, "Cannot destroy a task without an ID" unless persisted? task_id = extract_task_id self.class.send(:execute_request, :DELETE, "#{self.class.resource_path}/#{task_id}", {}, opts) @attributes.clear @changed_attributes.clear @id = nil true end |
#save(**opts) ⇒ Object
Override save to handle task-specific attributes
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/attio/resources/task.rb', line 104 def save(**opts) raise InvalidRequestError, "Cannot save a task without an ID" unless persisted? params = { data: changed_attributes.slice(:content, :deadline_at, :is_completed, :linked_records, :assignees).compact } return self unless params[:data].any? response = self.class.send(:execute_request, :PATCH, resource_path, params, opts) update_from(response["data"] || response) reset_changes! self end |