module Faceted::HasObject

Public Class Methods

new(args={}) click to toggle source

Instance methods =======================================================

# File lib/faceted/has_object.rb, line 25
def initialize(args={})
  self.excludes = args.delete('excludes') || args.delete(:excludes)
  unless args.empty?
    self.id = args[:id]
    args.symbolize_keys.delete_if{|k,v| v.nil?}.each{|k,v| self.send("#{k}=", v) if self.respond_to?("#{k}=") && ! v.nil? }
    initialize_with_object
    args.symbolize_keys.delete_if{|k,v| v.nil?}.each{|k,v| self.send("#{k}=", v) if self.respond_to?("#{k}=") && ! v.nil? }
  end
  self.errors = []
  self.success = true
end

Public Instance Methods

delete() click to toggle source
# File lib/faceted/has_object.rb, line 37
def delete
  self.success = object.delete
end
excludes() click to toggle source
# File lib/faceted/has_object.rb, line 45
def excludes
  @excludes ||= []
end
excludes=(value) click to toggle source
# File lib/faceted/has_object.rb, line 41
def excludes=(value)
  @excludes = value.nil? ? [] : value.map(&:to_sym)
end
reinitialize_with_object(obj) click to toggle source
# File lib/faceted/has_object.rb, line 49
def reinitialize_with_object(obj)
  obj.reload
  schema_fields.each{ |k| self.send("#{k}=", obj.send(k)) if obj.respond_to?(k) && self.send(:settable_field?, k) }
end
save() click to toggle source
# File lib/faceted/has_object.rb, line 54
def save
  return false unless schema_fields.present?
  schema_fields.each{ |k| self.send(:object).send("#{k}=", self.send(k)) if self.send(:settable_field?, k) }
  self.success = object.save
  self.errors = object.errors && object.errors.full_messages
  self.reinitialize_with_object(object) if self.success
  self.success
end
schema_fields() click to toggle source
# File lib/faceted/has_object.rb, line 63
def schema_fields
  self.class.fields - self.excludes - [:excludes]
end
to_hash() click to toggle source
# File lib/faceted/has_object.rb, line 67
def to_hash
  schema_fields.inject({}) {|h,k| h[k] = self.send(k) if self.respond_to?(k); h}
end

Private Instance Methods

initialize_with_object() click to toggle source
# File lib/faceted/has_object.rb, line 73
def initialize_with_object
  return unless object
  schema_fields.each{|k| self.send("#{k}=", object.send(k)) if object.respond_to?(k) && self.respond_to?("#{k}=") }
end
object() click to toggle source
# File lib/faceted/has_object.rb, line 78
def object
  return unless self.class.klass
  if self.send(find_by).present?
    @object ||= self.class.klass.where(find_by => self.send(find_by)).first
  else
    @object ||= self.class.klass.new
  end
end
object=(obj) click to toggle source
# File lib/faceted/has_object.rb, line 87
def object=(obj)
  @object = obj
  self.id = obj.id if obj.respond_to?(:id) && obj.id.present?
  @object
end
settable_field?(field_name) click to toggle source
# File lib/faceted/has_object.rb, line 93
def settable_field?(field_name)
  self.respond_to?("#{field_name}=") && object.respond_to?("#{field_name}=")
end