Module: SymbolicAttribute::Concern::ClassMethods

Defined in:
lib/symbolic_attribute/concern.rb

Instance Method Summary collapse

Instance Method Details

#symbolic_attribute(attr, opts = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/symbolic_attribute/concern.rb', line 11

def symbolic_attribute(attr, opts = {})

  # Getter method
  define_method attr do
    val = read_attribute(attr)
    val.to_sym unless val.blank?
  end

  # Add a class method and validation if :values option key is defined
  if opts.symbolize_keys!.key?(:values)
    class_attr_name = attr.to_s.pluralize
    class_attribute class_attr_name, :instance_reader => false, :instance_writer => false
    send "#{class_attr_name}=", opts.delete(:values).map(&:to_sym)
    validates attr, opts.merge(:inclusion => { :in => proc{|instance| instance.class.send(class_attr_name)} })
  end

end