module Opium::Model::Persistable

Public Instance Methods

delete( options = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 91
def delete( options = {} )
  self.tap do
    attributes_or_headers( :delete, :delete, options ) do |headers|
      self.class.http_delete id, headers unless new_record?
    end
    self.freeze
  end
end
Also aliased as: destroy
destroy( options = {} )
Alias for: delete
new_record?() click to toggle source
# File lib/opium/model/persistable.rb, line 101
def new_record?
  self.id.nil?
end
persisted?() click to toggle source
# File lib/opium/model/persistable.rb, line 105
def persisted?
  !new_record? && !self.changed?
end
pointer() click to toggle source
# File lib/opium/model/persistable.rb, line 109
def pointer
  @pointer ||= Pointer.new( model_name: model_name, id: id ) unless new_record?
end
save( options = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 63
def save( options = {} )
  create_or_update( options )
rescue => e
  errors.add( :base, e.to_s )
  false
end
save!() click to toggle source
# File lib/opium/model/persistable.rb, line 70
def save!
  create_or_update( validates: true ) || raise( InvalidError, 'failed to save, as model is invalid' )
end
to_parse() click to toggle source
# File lib/opium/model/persistable.rb, line 113
def to_parse
  pointer.to_parse
end
touch() click to toggle source
# File lib/opium/model/persistable.rb, line 87
def touch
  save( validates: false )
end
update( attributes = {} )
Alias for: update_attributes
update!( attributes = {} )
Alias for: update_attributes!
update_attributes( attributes = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 74
def update_attributes( attributes = {} )
  self.attributes = attributes
  save
end
Also aliased as: update
update_attributes!( attributes = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 79
def update_attributes!( attributes = {} )
  self.attributes = attributes
  save!
end
Also aliased as: update!

Private Instance Methods

_create( options = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 129
def _create( options = {} )
  self.attributes = attributes_or_headers( :post, :create, options ) do |headers|
    self.class.http_post self.attributes_to_parse( not_readonly: true ), headers
  end
end
_update( options = {} ) click to toggle source
# File lib/opium/model/persistable.rb, line 135
def _update( options = {} )
  self.attributes = attributes_or_headers( :put, :update, options ) do |headers|
    self.class.http_put id, self.attributes_to_parse( only: changes.keys ), headers
  end
end
attributes_or_headers( method, action, options, &block ) click to toggle source
# File lib/opium/model/persistable.rb, line 145
def attributes_or_headers( method, action, options, &block )
  result = block.call( options.deep_merge self.class.get_header_for( method, action, self ) )
  if options[:sent_headers]
    @_sent_headers = result
    {}
  else
    result
  end 
end
create_or_update( options ) click to toggle source
# File lib/opium/model/persistable.rb, line 119
def create_or_update( options )
  if options[:validates] == false || valid?
    if new_record?
      _create( options )
    else
      _update( options )
    end
  end.present?
end
sent_headers() click to toggle source
# File lib/opium/model/persistable.rb, line 141
def sent_headers
  @_sent_headers || {}
end