module Supercast::Operations::Save
Public Class Methods
included(base)
click to toggle source
# File lib/supercast/operations/save.rb, line 57 def self.included(base) base.extend(ClassMethods) end
Public Instance Methods
save(params = {}, opts = {})
click to toggle source
Creates or updates an API resource.
If the resource doesn't yet have an assigned ID and the resource is one that can be created, then the method attempts to create the resource. The resource is updated otherwise.
Attributes¶ ↑
-
params
- Overrides any parameters in the resource's serialized data and includes them in the create or update. If:req_url:
is included in the list, it overrides the update URL used for the create or update. -
opts
- A Hash of additional options (separate from the params / object values) to be added to the request.
# File lib/supercast/operations/save.rb, line 41 def save(params = {}, opts = {}) update_attributes(params) # Now remove any parameters that look like object attributes. params = params.reject { |k, _| respond_to?(k) } values = serialize_params(self).merge(params) # note that id gets removed here our call to #url above has already # generated a uri for this object with an identifier baked in values.delete(:id) resp, opts = request(save_verb, save_url, Hash[object_name => values], opts) initialize_from(resp.data, opts) end
Private Instance Methods
save_url()
click to toggle source
# File lib/supercast/operations/save.rb, line 72 def save_url # This switch essentially allows us "upsert"-like functionality. If the # API resource doesn't have an ID set (suggesting that it's new) and # its class responds to .create (which comes from # Supercast::Operations::Create), then use the URL to create a new # resource. Otherwise, generate a URL based on the object's identifier # for a normal update. if self[:id].nil? && self.class.respond_to?(:create) self.class.resource_url else resource_url end end
save_verb()
click to toggle source
# File lib/supercast/operations/save.rb, line 63 def save_verb # This switch essentially allows us "upsert"-like functionality. If the # API resource doesn't have an ID set (suggesting that it's new) and # its class responds to .create (which comes from # Supercast::Operations::Create), then use the verb to create a new # resource, otherwise use the verb to update a resource. self[:id].nil? && self.class.respond_to?(:create) ? :post : :patch end