Module: ZendeskAPI::Save

Includes:
ResponseHandler
Included in:
Create, Request::Comment, Ticket::Comment, Update
Defined in:
lib/zendesk_api/actions.rb

Instance Method Summary collapse

Instance Method Details

#clear_associationsObject

Removes all cached associations

[View source]

56
57
58
59
60
61
# File 'lib/zendesk_api/actions.rb', line 56

def clear_associations
  self.class.associations.each do |association_data|
    name = association_data[:name]
    instance_variable_set("@#{name}", nil) if instance_variable_defined?("@#{name}")
  end
end

#handle_response(response) ⇒ Object Originally defined in module ResponseHandler

#save(options = {}, &block) ⇒ Object

Saves, returning false if it fails and attaching the errors

[View source]

46
47
48
49
50
51
52
53
# File 'lib/zendesk_api/actions.rb', line 46

def save(options = {}, &block)
  save!(options, &block)
rescue ZendeskAPI::Error::RecordInvalid => e
  @errors = e.errors
  false
rescue ZendeskAPI::Error::ClientError
  false
end

#save!(options = {}) ⇒ Boolean

If this resource hasn't been deleted, then create or save it. Executes a POST if it is a Data#new_record?, otherwise a PUT. Merges returned attributes on success.

Returns:

  • (Boolean)

    Success?

[View source]

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/zendesk_api/actions.rb', line 17

def save!(options = {})
  return false if respond_to?(:destroyed?) && destroyed?

  if new_record? && !options[:force_update]
    method = :post
    req_path = path
  else
    method = :put
    req_path = url || path
  end

  req_path = options[:path] if options[:path]

  save_associations

  @response = @client.connection.send(method, req_path) do |req|
    req.body = attributes_for_save.merge(@global_params)

    yield req if block_given?
  end

  handle_response(@response)

  @attributes.clear_changes
  clear_associations
  true
end

#save_associationsObject

Saves associations Takes into account inlining, collections, and id setting on the parent resource.

[View source]

65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/zendesk_api/actions.rb', line 65

def save_associations
  self.class.associations.each do |association_data|
    association_name = association_data[:name]

    next unless send("#{association_name}_used?") && association = send(association_name)

    inline_creation = association_data[:inline] == :create && new_record?
    changed = association.is_a?(Collection) || association.changed?

    if association.respond_to?(:save) && changed && !inline_creation && association.save
      send("#{association_name}=", association) # set id/ids columns
    end

    if (association_data[:inline] == true || inline_creation) && changed
      attributes[association_name] = association.to_param
    end
  end
end