module SparkApi::Models::Concerns::Savable

Public Instance Methods

create!(arguments = {}) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 23
def create!(arguments = {})
  results = connection.post self.path, post_data.merge(params_for_save), arguments
  update_attributes_after_create(results.first)
  reset_dirty
  params_for_save.clear
  true
end
params_for_save() click to toggle source

extra params to be passed when saving

# File lib/spark_api/models/concerns/savable.rb, line 45
def params_for_save
  @params_for_save ||= {}
end
post_data() click to toggle source

update/create hash (can be overridden)

# File lib/spark_api/models/concerns/savable.rb, line 50
def post_data
  { resource_pluralized => [ attributes ] }
end
save(arguments = {}) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 7
def save(arguments = {})
  self.errors = [] # clear the errors hash
  begin
    return save!(arguments)
  rescue BadResourceRequest => e
    self.errors << {:code => e.code, :message => e.message}
    SparkApi.logger.warn("Failed to save resource #{self}: #{e.message}")
  rescue NotFound => e
    SparkApi.logger.error("Failed to save resource #{self}: #{e.message}")
  end
  false
end
save!(arguments = {}) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 19
def save!(arguments = {})
  persisted? ? update!(arguments) : create!(arguments)
end
update!(arguments = {}) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 36
def update!(arguments = {})
  return true unless changed? && persisted?
  connection.put resource_uri, dirty_attributes, arguments
  reset_dirty
  params_for_save.clear
  true
end
update_attributes(attrs = {}, options = {}) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 31
def update_attributes(attrs = {}, options = {})
  load(attrs, options)
  save!
end

Private Instance Methods

update_attributes_after_create(result) click to toggle source
# File lib/spark_api/models/concerns/savable.rb, line 56
def update_attributes_after_create(result)
  attributes['Id'] = result['Id'] ? result['Id'] : parse_id(result['ResourceUri'])
  result.delete('Id')
  attributes.merge! result
end