Module: FeideeUtils::Record::Accessors::ClassMethods

Included in:
FeideeUtils::Record
Defined in:
lib/feidee_utils/record/accessors.rb

Instance Method Summary collapse

Instance Method Details

#define_accessors(field_mappings) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/feidee_utils/record/accessors.rb', line 13

def define_accessors field_mappings
  field_mappings.each do |name, key|
    if method_defined? name
      raise "Accessor #{name} already exists in #{self.name}."
    end
    define_method name do column(key) end
  end
end

#define_entity_accessor(poid_callback_name, target_class_name = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/feidee_utils/record/accessors.rb', line 22

def define_entity_accessor poid_callback_name, target_class_name = nil
  accessor_name = poid_callback_name.to_s.chomp!("_poid")
  if accessor_name == nil
    raise "No trailing 'poid' in callback name #{poid_callback_name}."
  end

  if not target_class_name
    target_class_name = accessor_name
  end
  target_class_name = target_class_name.to_s.clone
  target_class_name.gsub!(/(^|_)(.)/) { $2.upcase }

  define_method accessor_name do
    poid = method(poid_callback_name).call
    self.class.environment.const_get(target_class_name).find_by_id(poid)
  end
end