Module: ZendeskAPI::Save

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

Instance Method Summary collapse

Methods included from ResponseHandler

#handle_response

Instance Method Details

#clear_associationsObject

Removes all cached associations



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

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

Saves, returning false if it fails and attaching the errors



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.



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.



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
      self.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