Module: PolymorphicModel::ClassMethods

Defined in:
lib/polymorphic_model.rb

Instance Method Summary collapse

Instance Method Details

#define_type(t, options = {}) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/polymorphic_model.rb', line 25

def define_type(t, options = {})
  column = @_polymorphic_column
  @_model_types << t.to_sym
  define_method :"#{t.to_s}?" do
    send(column) == t.to_s
  end

  validates_type
  
  condition_hash = {column => t.to_s}
  if options[:singleton] == true
    validates_uniqueness_of column, :if => :"#{t}?"
    self.class.instance_eval do
      define_method t do
        scope = scoped(:conditions => condition_hash)
        scope.first || (options[:autocreate] ? create!(condition_hash) : scope)
      end
    end
  else
    named_scope(t, :conditions => condition_hash)
  end
end

#typesObject



13
14
15
# File 'lib/polymorphic_model.rb', line 13

def types
  @_model_types.clone.freeze
end

#validates_typeObject



17
18
19
20
21
22
23
# File 'lib/polymorphic_model.rb', line 17

def validates_type
  validates_each @_polymorphic_column, {:on => :save} do |record, attr_name, value|
    unless self.types.include?(value.to_sym)
      record.errors.add_to_base("is undefined type (#{value.to_s}), correct types are: [#{self.types.map(&:to_s).join(', ')}]")
    end
  end
end