class MetaModel::Record::Model

Attributes

associations[R]
name[R]
properties[R]

Public Class Methods

new(name) click to toggle source
# File lib/metamodel/record/model.rb, line 8
def initialize(name)
  @name = name.to_s.camelize
  @properties = []
  @associations = []
end

Public Instance Methods

build_table() click to toggle source
# 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) click to toggle source
# File lib/metamodel/record/model.rb, line 14
def contains?(property)
  @properties.select { |prop| prop.name == property }.size > 0
end
foreign_id() click to toggle source
# File lib/metamodel/record/model.rb, line 26
def foreign_id
  "#{name}Id".camelize(:lower)
end
hash_value() click to toggle source
# File lib/metamodel/record/model.rb, line 38
def hash_value
  self.hash.to_s(16)
end
properties_exclude_id() click to toggle source
# File lib/metamodel/record/model.rb, line 18
def properties_exclude_id
  properties_exclude_property "id"
end
properties_exclude_property(property) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_name() click to toggle source
# File lib/metamodel/record/model.rb, line 34
def relation_name
  "#{name}Relation"
end
table_name() click to toggle source
# File lib/metamodel/record/model.rb, line 30
def table_name
  name.tableize
end

Private Instance Methods

key_type_pairs_with_property(properties, use_default_value = false) click to toggle source
# File lib/metamodel/record/model.rb, line 96
def key_type_pairs_with_property(properties, use_default_value = false)
  properties.enum_for(:each_with_index).map do |property, index|
    has_default_value = property.has_default_value?
    default_value = property.type_without_optional == "String" ? "\"#{property.default_value}\"" : property.default_value

    result = "#{property.name}: #{property.type.to_s}#{if has_default_value then " = " + "#{default_value}" end}"
    result = "#{property.name}: #{property.type.to_s} = #{property.type_without_optional}DefaultValue" if use_default_value
    result
  end.join(", ")
end
key_value_pairs_with_property(properties, cast = false) click to toggle source
# File lib/metamodel/record/model.rb, line 86
def key_value_pairs_with_property(properties, cast = false)
  properties.map do |property|
    if cast
      "#{property.name}: #{property.type_without_optional}(#{property.name})"
    else
      "#{property.name}: #{property.name}"
    end
  end.join(", ")
end