module Her::Model::ORM::SaveMethods

Public Instance Methods

create_or_update() click to toggle source
# File lib/her/model/orm/save_methods.rb, line 31
def create_or_update
  params = to_params
  resource = self

  if @data[:id]
    hooks = [:update, :save]
    method = :put
  else
    hooks = [:create, :save]
    method = :post
  end

  self.class.wrap_in_hooks(resource, *hooks) do |resource, klass|
    klass.request(params.merge(_method: method, _path: request_path)) do |parsed_data|
      self.data = self.class.parse(parsed_data[:data]) if parsed_data[:data].any?
      self.metadata = parsed_data[:metadata]
      self.errors = parsed_data[:errors]

      return false if self.errors.any?
    end
  end

  self
end
save() click to toggle source

Save a resource

@example Save a resource after fetching it

@user = User.find(1)
# Fetched via GET "/users/1"
@user.fullname = "Tobias Fünke"
@user.save
# Called via PUT "/users/1"

@example Save a new resource by creating it

@user = User.new({ fullname: "Tobias Fünke" })
@user.save
# Called via POST "/users"
# File lib/her/model/orm/save_methods.rb, line 20
def save
  create_or_update
end
save!() click to toggle source
# File lib/her/model/orm/save_methods.rb, line 24
def save!
  save
  raise RecordInvalid.new(self.errors) unless self.errors.empty?

  self
end