Module: Neo4Apis::ModelResolver

Included in:
CLI::ActiveRecord
Defined in:
lib/neo4apis/model_resolver.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(included_class) ⇒ Object



5
6
7
# File 'lib/neo4apis/model_resolver.rb', line 5

def self.included(included_class)
  included_class.send(:include, TableResolver)
end

Instance Method Details

#apply_identified_model_associations!(model_class) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/neo4apis/model_resolver.rb', line 29

def apply_identified_model_associations!(model_class)
  model_class.columns.each do |column|
    match = column.match(/^(.+)_id$/i) || column.match(/^(.+)id$/i)
    next if not match

    begin
      base = match[1].gsub(/ +/, '_').tableize

      if identify_table_name(tables, base.classify) && model_class.name != base.classify
        debug_log "Defining: belongs_to #{base.singularize.to_sym.inspect}, foreign_key: #{column.name.inspect}, class_name: #{base.classify.inspect}"
        model_class.belongs_to base.singularize.to_sym, foreign_key: column.name, class_name: base.classify
      end
    rescue UnfoundTableError
      nil
    end
  end
end

#apply_identified_primary_key!(model_class) ⇒ Object



52
53
54
55
56
# File 'lib/neo4apis/model_resolver.rb', line 52

def apply_identified_primary_key!(model_class)
  identity = ::ActiveRecord::Base.connection.primary_key(model_class.table_name)
  identity ||= identify_primary_key(model_class.column_names, model_class.name)
  model_class.primary_key = identity if identity
end

#apply_identified_table_name!(model_class) ⇒ Object



47
48
49
50
# File 'lib/neo4apis/model_resolver.rb', line 47

def apply_identified_table_name!(model_class)
  identity = identify_table_name(tables, model_class.name)
  model_class.table_name = identity if identity
end

#get_model(model_or_table_name) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/neo4apis/model_resolver.rb', line 9

def get_model(model_or_table_name)
  get_model_class(model_or_table_name).tap do |model_class|
    if options[:identify_model]
      apply_identified_table_name!(model_class)
      apply_identified_primary_key!(model_class)
      apply_identified_model_associations!(model_class)
    end
  end
end

#get_model_class(model_or_table_name) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/neo4apis/model_resolver.rb', line 19

def get_model_class(model_or_table_name)
  return model_or_table_name if model_or_table_name.is_a?(Class) && model_or_table_name.ancestors.include?(::ActiveRecord::Base)

  model_class = model_or_table_name.gsub(/\s+/, '_')
  model_class = model_or_table_name.classify unless model_or_table_name.match(/^[A-Z]/)
  model_class.constantize
rescue NameError
  Object.const_set(model_class, Class.new(::ActiveRecord::Base))
end