module Migreatest::Rails::Connector

Private Class Methods

included(constant) click to toggle source

called only once by module or class that include it

# File lib/migreatest/rails/connector.rb, line 46
def included constant
  @full_constant = constant.name.demodulize
  @full_parent = has_parent? constant
  if !@full_parent || @full_parent != ActiveRecord
    connect
  end
end

Public Instance Methods

connect(namespace = nil) click to toggle source

to recognize who include (module and class) to connect automatically

# File lib/migreatest/rails/connector.rb, line 11
def connect namespace = nil

  # @full_constant.table_name = resolve_class_name
  # o reload deve ser feito aqui?
  # binding.pry
  # namespace = namespace.to_s
  # db_config = YAML::load_file('config/database.yml')
  # # tentar fazer include aos modelos do projeto dinamicamente por aqui, para tal deve-se pegar todos os modelos, incluir um observador neles, e toda vez que forem chamados esse módulo deve ser incluído, ou o método deve ser chamado.
  # # Um outra solução é incluir este mṕdulo a todos os modelos, sem a intervenção do usuário, neste caso um observador não seria necessário.
  # # ou, talvez tenha que usar os dois, incluir em todas, e quando chamadas executar o método connect
  # # binding.pry
  # if namespace
  #   # try
  #   begin
  #     ActiveRecord::Base
  #       .establish_connection db_config[namespace][::Rails.env]
  #   # catch
  #   rescue => details
  #     $stderr.puts "Could not possible connect to database with namespace \"#{namespace}.\""
  #     $stderr.puts "Details: #{details}."
  #   # throw
  #   # raise
  #   end
  # else
  #   ActiveRecord::Base.establish_connection db_config[::Rails.env]
  # end

  # reload_model!
end

Private Instance Methods

has_parent?(full_constant) click to toggle source
# File lib/migreatest/rails/connector.rb, line 58
def has_parent? full_constant
    parent_name = full_constant.name.deconstantize
    parent_name.constantize unless parent_name.empty?
  end
is_gem?(name) click to toggle source
# File lib/migreatest/rails/connector.rb, line 90
def is_gem? name
  begin
    gem_specification = GEM::Specification.find_by_name(name)
  rescue
    false
  end
end
model_paths() click to toggle source
# File lib/migreatest/rails/connector.rb, line 69
def model_paths
  ::Rails.application.config.paths["app/models"]
end
reload_model!() click to toggle source
# File lib/migreatest/rails/connector.rb, line 63
def reload_model!
  object = @full_parent ? Module.const_get(@full_parent.name.to_sym) : Class
  object.send :remove_const, @full_constant.name.demodulize.to_sym
  require_model_file
end
require_model_file() click to toggle source
# File lib/migreatest/rails/connector.rb, line 73
def require_model_file
  require_model_files.each do |file|
    require file
  end

  # constant_path = @full_constant.name.underscore
  # # module_name = @module.name.underscore
  # # files = model_paths.select do |path|
  # model_paths.each do |path|
  #   # para ficar direito vai ter de pegar a path das gems e colocar no $LOAD_PATH deste conexto
  #   file = File.join(path, "#{constant_path}.rb")
  #   binding.pry
  #   # file if File.exists? file
  #   require file
  # end
end
require_model_files() click to toggle source
# File lib/migreatest/rails/connector.rb, line 98
def require_model_files
  constant_name = @full_constant.name.underscore
  gem_name = @full_parent.name.parametrize
  files = []

  if gem_specification = is_gem?(gem_name)
    files = model_paths.select do |path|
      # ENV["GEM_HOME"]
      binding.pry
      # colocar com as especificações aqui
      # file = File.join(::Rails.root.parent, gem_name, path, "#{constant_name}.rb")
      # if File.exists? file
      #   file
      # else
      #   file = File.join(::Rails.root.parent, gem_name, path, "#{constant_name}.rb")
      #   file if File.exists? file
      # end
    end
  else
    ::Rails.application.config.paths["app/models"].select do |path|
      # binding.pry
    end
  end
end
resolve_class_name() click to toggle source
# File lib/migreatest/rails/connector.rb, line 123
def resolve_class_name
  @full_constant.name.demodulize.underscore.pluralize
end