Module: OrientDB::AR::Relations

Included in:
Base
Defined in:
lib/orientdb-ar/relations.rb

Instance Method Summary collapse

Instance Method Details

#embedds_many(klass, options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/orientdb-ar/relations.rb', line 24

def embedds_many(klass, options = {})
  klass = klass_for klass
  name = options[:name].to_s || field_name_for(klass, false)

  field name, [OrientDB::FIELD_TYPES[:embedded_list], klass.oclass]

  class_eval <<-eorb, __FILE__, __LINE__ + 1
    def #{name}                                         # def addresses
      self[:#{name}]                                    #   self[:addresses]
    end                                                 # end
  eorb

  class_eval <<-eorb, __FILE__, __LINE__ + 1
    def #{name}=(value)                                 # def addresses=(value)
      self[:#{name}]                                    #   self[:addresses]
    end                                                 # end
  eorb

  class_eval <<-eorb, __FILE__, __LINE__ + 1
    def add_#{name.singularize}(value)                  # def add_address(value)
      self[:#{name}] ||= []                             #   self[:addresses] ||= []
      self[:#{name}] << value                           #   self[:addresses] << value
      #{name}                                           #   addresses
    end                                                 # end
  eorb
end

#embedds_one(klass, options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/orientdb-ar/relations.rb', line 4

def embedds_one(klass, options = {})
  klass = klass_for klass
  name = options[:name].to_s || field_name_for(klass, true)

  field name, [OrientDB::FIELD_TYPES[:embedded], klass.oclass]

  class_eval <<-eorb, __FILE__, __LINE__ + 1
    def #{name}                                                          # def address
      self[:#{name}]                                                     #   self[:address]
    end                                                                  # end
  eorb

  class_eval <<-eorb, __FILE__, __LINE__ + 1
    def #{name}=(value)                                                  # def address=(value)
      self[:#{name}] = value                                             #   self[:address] = value.odocument
      #{name}                                                            #   address
    end                                                                  # end
  eorb
end