Class: MassiveRecord::ORM::Relations::Metadata

Inherits:
Object
  • Object
show all
Defined in:
lib/massive_record/orm/relations/metadata.rb

Overview

The master of metadata related to a relation. For instance; references_one :employee, :foreign_key => “person_id”, :class_name => “Person”

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Metadata

Returns a new instance of Metadata.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/massive_record/orm/relations/metadata.rb', line 14

def initialize(name, options = {})
  options.to_options!
  self.name = name
  self.foreign_key = options[:foreign_key]
  if options.has_key? :store_in
    self.store_in = options[:store_in]
  elsif options.has_key? :store_foreign_key_in
    self.store_foreign_key_in = options[:store_foreign_key_in]
  end
  self.class_name = options[:class_name]
  self.find_with = options[:find_with]
  self.records_starts_from = options[:records_starts_from] if options[:records_starts_from]
  self.polymorphic = options[:polymorphic]
end

Instance Attribute Details

#class_nameObject



59
60
61
# File 'lib/massive_record/orm/relations/metadata.rb', line 59

def class_name
  (@class_name || calculate_class_name).to_s
end

#find_withObject

Returns the value of attribute find_with.



11
12
13
# File 'lib/massive_record/orm/relations/metadata.rb', line 11

def find_with
  @find_with
end

#foreign_keyObject



42
43
44
# File 'lib/massive_record/orm/relations/metadata.rb', line 42

def foreign_key
  (@foreign_key || calculate_foreign_key).to_s
end

#nameObject



30
31
32
# File 'lib/massive_record/orm/relations/metadata.rb', line 30

def name
  @name.to_s if @name
end

#polymorphicObject



86
87
88
# File 'lib/massive_record/orm/relations/metadata.rb', line 86

def polymorphic
  !!@polymorphic
end

#records_starts_fromObject

Returns the value of attribute records_starts_from.



12
13
14
# File 'lib/massive_record/orm/relations/metadata.rb', line 12

def records_starts_from
  @records_starts_from
end

#relation_typeObject



34
35
36
37
38
39
40
# File 'lib/massive_record/orm/relations/metadata.rb', line 34

def relation_type
  if @relation_type
    relation_type = @relation_type.to_s
    relation_type += "_polymorphic" if polymorphic?
    relation_type
  end
end

#store_inObject



67
68
69
# File 'lib/massive_record/orm/relations/metadata.rb', line 67

def store_in
  @store_in.to_s if @store_in
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



100
101
102
# File 'lib/massive_record/orm/relations/metadata.rb', line 100

def ==(other)
  other.instance_of?(self.class) && other.hash == hash
end

#foreign_key_setterObject



46
47
48
# File 'lib/massive_record/orm/relations/metadata.rb', line 46

def foreign_key_setter
  foreign_key+'='
end

#hashObject



105
106
107
# File 'lib/massive_record/orm/relations/metadata.rb', line 105

def hash
  name.hash
end

#new_relation_proxy(proxy_owner) ⇒ Object



95
96
97
# File 'lib/massive_record/orm/relations/metadata.rb', line 95

def new_relation_proxy(proxy_owner)
  proxy_class_name.constantize.new(:proxy_owner => proxy_owner, :metadata => self)
end

#persisting_foreign_key?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/massive_record/orm/relations/metadata.rb', line 81

def persisting_foreign_key?
  !!store_in && !records_starts_from
end

#polymorphic?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/massive_record/orm/relations/metadata.rb', line 90

def polymorphic?
  polymorphic
end

#polymorphic_type_columnObject



50
51
52
53
# File 'lib/massive_record/orm/relations/metadata.rb', line 50

def polymorphic_type_column
  type_column = foreign_key.gsub(/_id$/, '')
  type_column + "_type"
end

#polymorphic_type_column_setterObject



55
56
57
# File 'lib/massive_record/orm/relations/metadata.rb', line 55

def polymorphic_type_column_setter
  polymorphic_type_column+'='
end

#proxy_target_classObject



63
64
65
# File 'lib/massive_record/orm/relations/metadata.rb', line 63

def proxy_target_class
  class_name.constantize
end

#represents_a_collection?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/massive_record/orm/relations/metadata.rb', line 111

def represents_a_collection?
  relation_type == 'references_many'
end

#store_foreign_key_inObject



71
72
73
74
# File 'lib/massive_record/orm/relations/metadata.rb', line 71

def store_foreign_key_in
  ActiveSupport::Deprecation.warn("store_foreign_key_in is deprecated. Use store_in instead!")
  store_in
end

#store_foreign_key_in=(column_family) ⇒ Object



76
77
78
79
# File 'lib/massive_record/orm/relations/metadata.rb', line 76

def store_foreign_key_in=(column_family)
  ActiveSupport::Deprecation.warn("store_foreign_key_in is deprecated. Use store_in instead!")
  self.store_in = column_family
end