module Faceted::Model::ModelClassMethods

Class methods ============================================================

Public Instance Methods

build_association_from(field) click to toggle source
# File lib/faceted/model.rb, line 12
def build_association_from(field)
  bare_name = field.gsub(/_id$/, '')
  if field =~ /_id$/
    klass = eval "#{scope}#{bare_name.classify}"
    fields << bare_name.to_sym
    define_method :"#{bare_name}" do
      klass.new(:id => self.send(field))
    end
  end
end
create(params={}) click to toggle source
# File lib/faceted/model.rb, line 23
def create(params={})
  obj = self.new(params)
  obj.save
  obj
end
field(name, args={}) click to toggle source
# File lib/faceted/model.rb, line 29
def field(name, args={})
  fields << name
  define_method :"#{name}" do
    val = instance_variable_get("@#{name}")
    val.nil? ? args[:default] : val
  end
  unless args[:read_only]
    define_method :"#{name}=" do |val|
      instance_variable_set("@#{name}", val)
    end
  end
  build_association_from(name.to_s) if name.to_s.include?("id") && ! args[:skip_association]
end
fields() click to toggle source
# File lib/faceted/model.rb, line 43
def fields
  @fields ||= [:id, :excludes]
end
from(object, args={}) click to toggle source
# File lib/faceted/model.rb, line 47
def from(object, args={})
  materialize([object], args).first
end
materialize(objects=[], args={}) click to toggle source
# File lib/faceted/model.rb, line 51
def materialize(objects=[], args={})
   objects.compact.inject([]) do |a, object|
     interface = self.new(args)
     interface.send(:object=, object)
     interface.send(:initialize_with_object)
     a << interface
   end
 end
scope() click to toggle source
# File lib/faceted/model.rb, line 60
def scope
  parent.to_s == "Object" ? "::" : "#{parent.to_s}::"
end