Module: Embedded::Model

Defined in:
lib/embedded/model.rb

Instance Method Summary collapse

Instance Method Details

#embeddedObject



9
10
11
# File 'lib/embedded/model.rb', line 9

def embedded
  Embedded::Scope.new(self.all,embedded_attributes)
end

#embedded_column_names(embeddable_attr, attributes) ⇒ Object



3
4
5
6
7
# File 'lib/embedded/model.rb', line 3

def embedded_column_names(embeddable_attr, attributes)
  attributes.inject({}) do |hash, a|
    hash.merge(:"#{embeddable_attr}_#{a}" => a)
  end
end

#embeds(embeddable_attr, options = {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/embedded/model.rb', line 13

def embeds(embeddable_attr, options = {})
  cattr_accessor :embedded_attributes
  self.embedded_attributes ||= {}
  self.embedded_attributes[embeddable_attr] = options

  attributes = options[:attrs]
  columns = embedded_column_names(embeddable_attr,attributes)
  clazz = options[:class_name] ? options[:class_name].constantize : embeddable_attr.to_s.camelcase.constantize

  self.send(:define_method, embeddable_attr) do
    values = columns.inject({}) do |hash,(k,v)|
      hash.merge(v=>read_attribute(k))
    end
    clazz.new(values)
  end

  self.send(:define_method, :"#{embeddable_attr}=") do |v|
    columns.each do |k,a|
      self.write_attribute(k, v.send(a))
    end
  end
end