class Neo4Apis::CLI::ActiveRecord

Constants

NEO4APIS_CLIENT_CLASS

Public Instance Methods

all_models() click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 49
def all_models
  setup

  Rails.application.eager_load!

  import_models_or_tables(*::ActiveRecord::Base.descendants)
end
all_tables() click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 42
def all_tables
  setup

  import_models_or_tables(*::ActiveRecord::Base.connection.tables)
end
models(*models_or_table_names) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 35
def models(*models_or_table_names)
  setup

  import_models_or_tables(*models_or_table_names)
end
tables(*models_or_table_names) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 28
def tables(*models_or_table_names)
  setup

  import_models_or_tables(*models_or_table_names)
end

Private Instance Methods

active_record_config() click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 119
def active_record_config
  require 'yaml'
  YAML.load(File.read(options[:active_record_config_path]))[options[:active_record_environment]]
end
debug_log(*messages) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 59
def debug_log(*messages)
  return unless options[:debug]

  puts(*messages)
end
import_association?(type) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 114
def import_association?(type)
  options[:"import_#{type}"].nil? ? options[:import_all_associations] : options[:"import_#{type}"]
end
import_models_or_tables(*models_or_table_names) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 65
def import_models_or_tables(*models_or_table_names)
  model_classes = models_or_table_names.map(&method(:get_model))

  puts 'Importing tables: ' + model_classes.map(&:table_name).join(', ')

  model_classes.each do |model_class|
    NEO4APIS_CLIENT_CLASS.model_importer(model_class)
  end

  neo4apis_client.batch do
    model_classes.each do |model_class|
      query = model_class.all

      # Eager load association for faster import
      include_list = include_list_for_model(model_class)
      query = query.includes(*include_list) if include_list.present?

      query.find_each do |object|
        neo4apis_client.import model_class.name.to_sym, object
      end
    end
  end
end
include_list_for_model(model_class) click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 89
def include_list_for_model(model_class)
  model_class.reflect_on_all_associations.map do |association_reflection|
    association_reflection.name.to_sym if import_association?(association_reflection.macro)
  end.compact.tap do |include_list|
    debug_log 'include_list', include_list.inspect
  end
end
neo4apis_client() click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 107
def neo4apis_client
  @neo4apis_client ||= NEO4APIS_CLIENT_CLASS.new(specified_neo4j_session,
                                                 import_belongs_to: import_association?(:belongs_to),
                                                 import_has_one: import_association?(:has_one),
                                                 import_has_many: import_association?(:has_many))
end
setup() click to toggle source
# File lib/neo4apis/cli/activerecord.rb, line 97
def setup
  if File.exist?(options[:startup_environment])
    require options[:startup_environment]
  else
    ::ActiveRecord::Base.establish_connection(active_record_config)
  end
end