123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::Tasks::AbstractTasks

Do not use. This class is for internal use only.
Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: activerecord/lib/active_record/tasks/abstract_tasks.rb

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(db_config) ⇒ AbstractTasks

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 10

def initialize(db_config)
  @db_config = db_config
  @configuration_hash = db_config.configuration_hash
end

Class Attribute Details

.using_database_configurations?Boolean (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 6

def self.using_database_configurations?
  true
end

Instance Attribute Details

#configuration_hash (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 41

attr_reader :db_config, :configuration_hash

#db_config (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 41

attr_reader :db_config, :configuration_hash

Instance Method Details

#charset

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 15

def charset
  connection.encoding
end

#check_current_protected_environment!(db_config, migration_class)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 23

def check_current_protected_environment!(db_config, migration_class)
  with_temporary_pool(db_config, migration_class) do |pool|
    migration_context = pool.migration_context
    current = migration_context.current_environment
    stored  = migration_context.last_stored_environment

    if migration_context.protected_environment?
      raise ActiveRecord::ProtectedEnvironmentError.new(stored)
    end

    if stored && stored != current
      raise ActiveRecord::EnvironmentMismatchError.new(current: current, stored: stored)
    end
  rescue ActiveRecord::NoDatabaseError
  end
end

#collation

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 19

def collation
  connection.collation
end

#configuration_hash_without_database (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 51

def configuration_hash_without_database
  configuration_hash.merge(database: nil)
end

#connection (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 43

def connection
  ActiveRecord::Base.lease_connection
end

#establish_connection(config = db_config) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 47

def establish_connection(config = db_config)
  ActiveRecord::Base.establish_connection(config)
end

#run_cmd(cmd, *args, **opts) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 55

def run_cmd(cmd, *args, **opts)
  fail run_cmd_error(cmd, args) unless Kernel.system(cmd, *args, opts)
end

#run_cmd_error(cmd, args) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 59

def run_cmd_error(cmd, args)
  msg = +"failed to execute:\n"
  msg << "#{cmd} #{args.join(' ')}\n\n"
  msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n"
  msg
end

#with_temporary_pool(db_config, migration_class, clobber: false) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/tasks/abstract_tasks.rb', line 66

def with_temporary_pool(db_config, migration_class, clobber: false)
  original_db_config = migration_class.connection_db_config
  pool = migration_class.connection_handler.establish_connection(db_config, clobber: clobber)

  yield pool
ensure
  migration_class.connection_handler.establish_connection(original_db_config, clobber: clobber)
end