module HuggORM::Persistence::InstanceMethods

Attributes

data[RW]
uuid[RW]

Public Class Methods

new(data = {}) click to toggle source
# File lib/hugg_orm/persistence.rb, line 131
def initialize(data = {})
  @data = {}
  update_attributes(data) unless data.empty?
end

Public Instance Methods

<=>(o) click to toggle source
# File lib/hugg_orm/persistence.rb, line 216
def <=>(o)
  o.kind_of?(self.class) && @data == o.data ? 0 : nil
end
created?() click to toggle source
# File lib/hugg_orm/persistence.rb, line 196
def created?
  @state == :created
end
destroy() click to toggle source
# File lib/hugg_orm/persistence.rb, line 165
def destroy
  if self.class.destroy(key)
    @data = {}
    @state = :destroyed
  end

  self
end
destroyed?() click to toggle source
# File lib/hugg_orm/persistence.rb, line 188
def destroyed?
  @state == :destroyed
end
dump() click to toggle source
# File lib/hugg_orm/persistence.rb, line 200
def dump
  str = "#{self.class.name}:\n"
  @data.sort.each do |field, value|
    str << "  #{field}: #{value}\n"
  end
  str
end
fetch(*args) click to toggle source
# File lib/hugg_orm/persistence.rb, line 208
def fetch(*args)
  @data.send(:fetch, *args)
end
has_field?(field) click to toggle source
# File lib/hugg_orm/persistence.rb, line 212
def has_field?(field)
  @data.has_key?(field)
end
key() click to toggle source
# File lib/hugg_orm/persistence.rb, line 136
def key
  @data[self.class.key_field]
end
save() click to toggle source
# File lib/hugg_orm/persistence.rb, line 174
def save
  updated_data = self.class.where("#{self.class.primary_key} = ?", [key]).update(@data, true)

  unless updated_data.empty?
    @data = updated_data.first
    @state = :updated
  else
    self.class.new_query.insert(@data)
    @state = :created
  end

  self
end
set_id() click to toggle source
# File lib/hugg_orm/persistence.rb, line 140
def set_id
  # Set id based on key field, but only if id isn't already set and
  # the key method has been overridden and returns data.
  @data[self.class.key_field] = key if @data[self.class.key_field].nil? && key
end
update_attributes(update_data) click to toggle source
# File lib/hugg_orm/persistence.rb, line 146
def update_attributes(update_data)
  # Remove fields not set to be included
  unless self.class.include_fields.empty?
    update_data = self.class.include_fields.each_with_object({}) do |key, hash|
      hash[key] = update_data[key] if update_data.has_key? key
    end
  end

  # Update all fields unless they have been excluded
  update_data.each do |field, value|
    @data[field] = value unless self.class.exclude_fields.include?(field)
  end

  # Set id based on key method.
  set_id

  self
end
updated?() click to toggle source
# File lib/hugg_orm/persistence.rb, line 192
def updated?
  @state == :updated
end