Class: MetaModel::Record::Model

Inherits:
Object
  • Object
show all
Defined in:
lib/metamodel/record/model.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Model

Returns a new instance of Model.



8
9
10
11
12
# File 'lib/metamodel/record/model.rb', line 8

def initialize(name)
  @name = name.to_s.camelize
  @properties = []
  @associations = []
end

Instance Attribute Details

#associationsObject (readonly)

Returns the value of attribute associations.



6
7
8
# File 'lib/metamodel/record/model.rb', line 6

def associations
  @associations
end

#nameObject (readonly)

Returns the value of attribute name.



4
5
6
# File 'lib/metamodel/record/model.rb', line 4

def name
  @name
end

#propertiesObject (readonly)

Returns the value of attribute properties.



5
6
7
# File 'lib/metamodel/record/model.rb', line 5

def properties
  @properties
end

Instance Method Details

#build_tableObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/metamodel/record/model.rb', line 66

def build_table
  table = "CREATE TABLE #{table_name}"
  main_sql = @properties.map do |property|
    result = "#{property.name.underscore} #{property.database_type}"
    result << " PRIMARY KEY" if property.is_primary?
    result << " UNIQUE" if property.is_unique?
    result << " DEFAULT #{property.default_value}" if property.has_default_value?
    result
  end
  # foreign_sql = @properties.map do |property|
  #   next unless property.is_foreign?
  #   reference_table_name = property.type.tableize
  #   "FOREIGN KEY(#{property.name}) REFERENCES #{reference_table_name}(privateId)"
  # end

  table + "(private_id INTEGER PRIMARY KEY, #{(main_sql).compact.join(", ")});"
end

#contains?(property) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/metamodel/record/model.rb', line 14

def contains?(property)
  @properties.select { |prop| prop.name == property }.size > 0
end

#foreign_idObject



26
27
28
# File 'lib/metamodel/record/model.rb', line 26

def foreign_id
  "#{name}Id".camelize(:lower)
end

#hash_valueObject



38
39
40
# File 'lib/metamodel/record/model.rb', line 38

def hash_value
  self.hash.to_s(16)
end

#properties_exclude_idObject



18
19
20
# File 'lib/metamodel/record/model.rb', line 18

def properties_exclude_id
  properties_exclude_property "id"
end

#properties_exclude_property(property) ⇒ Object



22
23
24
# File 'lib/metamodel/record/model.rb', line 22

def properties_exclude_property(property)
  @properties.select { |element| element.name != property }
end

#property_exclude_id_key_type_pairs(use_default_value = false) ⇒ Object



58
59
60
# File 'lib/metamodel/record/model.rb', line 58

def property_exclude_id_key_type_pairs(use_default_value = false)
  key_type_pairs_with_property properties_exclude_id, use_default_value
end

#property_exclude_id_key_value_pairs(cast = false) ⇒ Object



50
51
52
# File 'lib/metamodel/record/model.rb', line 50

def property_exclude_id_key_value_pairs(cast = false)
  key_value_pairs_with_property properties_exclude_id, cast
end

#property_key_type_pairs(use_default_value = false) ⇒ Object



54
55
56
# File 'lib/metamodel/record/model.rb', line 54

def property_key_type_pairs(use_default_value = false)
  key_type_pairs_with_property @properties, use_default_value
end

#property_key_type_pairs_without_property(property) ⇒ Object



62
63
64
# File 'lib/metamodel/record/model.rb', line 62

def property_key_type_pairs_without_property(property)
  key_type_pairs_with_property @properties.select { |element| element.name != property }
end

#property_key_value_pairs(cast = false) ⇒ Object



42
43
44
# File 'lib/metamodel/record/model.rb', line 42

def property_key_value_pairs(cast = false)
  key_value_pairs_with_property @properties, cast
end

#property_key_value_pairs_without_property(property) ⇒ Object



46
47
48
# File 'lib/metamodel/record/model.rb', line 46

def property_key_value_pairs_without_property(property)
  key_value_pairs_with_property @properties.select { |element| element.name != property }
end

#relation_nameObject



34
35
36
# File 'lib/metamodel/record/model.rb', line 34

def relation_name
  "#{name}Relation"
end

#table_nameObject



30
31
32
# File 'lib/metamodel/record/model.rb', line 30

def table_name
  name.tableize
end