module Netfira::WebConnect::Models

Public Class Methods

materialize() click to toggle source
# File lib/netfira/web_connect/models.rb, line 6
def self.materialize

  # Scrap any existing definitions
  Models.constants.each do |name|
    klass = Models.const_get(name)
    Models.__send__ :remove_const, name if klass < Model::Record || klass < Model::Relation
  end

  # Load pre-defined models
  Dir[File.expand_path('../models/*.rb', __FILE__)].each { |p| load p }

  table_names = []
  tables_to_localize = []
  tables_to_relate = []

  Model.connection.tables.reject{|x| x == Netfira::WebConnect.schema_migrations_table_name }.each do |table_name|
    unprefixed_table_name = unprefix_table_name(table_name)
    if unprefixed_table_name.nil? or unprefixed_table_name[0] == '_'
      next
    elsif l10n_table_name? table_name
      tables_to_localize << l10n_table_owner_name(unprefixed_table_name)
    elsif unprefixed_table_name =~ /\A(.+)_to_(.+)\z/
      tables_to_relate << [$1, $2]
    else
      table_names << unprefixed_table_name
    end
  end

  table_props = Models::Table.all.map{ |model| [model.name, model] }.to_h

  table_names.each do |name|
    props = table_props[name]
    next unless props
    Model::Record.materialize name.camelize.singularize,
                              tables_to_localize.include?(name),
                              props
  end

  tables_to_relate.each do |names|
    Model::Relation.materialize *names.map{ |x| x.camelize.singularize }
  end

end

Private Class Methods

l10n_table_name?(name) click to toggle source
# File lib/netfira/web_connect/models.rb, line 58
def self.l10n_table_name?(name)
  @l10n_suffix ||= Netfira::WebConnect.db_table_l10n_suffix.to_s
  @l10n_suffix_range ||= (-@l10n_suffix.length)..-1
  @l10n_suffix == name[@l10n_suffix_range]
end
l10n_table_owner_name(name) click to toggle source
# File lib/netfira/web_connect/models.rb, line 64
def self.l10n_table_owner_name(name)
  name[@l10n_table_name_range ||= 0..(-@l10n_suffix.length - 1)] if l10n_table_name? name
end
unprefix_table_name(name) click to toggle source
# File lib/netfira/web_connect/models.rb, line 52
def self.unprefix_table_name(name)
  return unless name.starts_with? Netfira::WebConnect.db_table_prefix.to_s
  @prefix_range ||= (Netfira::WebConnect.db_table_prefix.length)..-1
  name[@prefix_range]
end