class CodeKindly::Utils::ActiveRecord

Constants

RAILS

Public Class Methods

active_record_classes_by_connection() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 13
def active_record_classes_by_connection
  deprecate :active_record_classes_by_connection,
            :classes_by_connection,
            :'0.1.0'
  classes_by_connection
end
classes_by_connection() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 20
def classes_by_connection
  @classes_by_connection ||= find_classes_by_connection
end
clear_scope(scope) click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 24
def clear_scope(scope)
  if scope.count.zero?
    puts 'Nothing to clear'
    return
  end
  puts "Clearing #{scope.count} #{scope.name} records"
  scope.delete_all
end
config(name = nil) click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 33
def config(name = nil)
  configs[name || default_name]
end
configs() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 37
def configs # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
  @configs ||= ::ActiveRecord::Base.configurations
  if @configs.class.name == 'ActiveRecord::DatabaseConfigurations' # rubocop:disable Style/ClassEqualityComparison
    @configs = @configs.configs_for.each_with_object({}) do |config, hash|
      hash[config.env_name] = config.config
    end
  end
  return @configs unless @configs == {}
  return @configs unless RAILS.respond_to?(:root)

  file = RAILS.root.join('config', 'database.yml')
  return @configs unless ::File.readable?(file)

  @configs = YAML.load(::File.read(file)) # rubocop:disable Security/YAMLLoad
end
configurations() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 53
def configurations
  deprecate :configurations, :configs, :'0.1.0'
  configs
end
default_connection_class(connection = nil) click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 58
def default_connection_class(connection = nil)
  connection ||= default_name
  @default_connection_class ||= {}.with_indifferent_access
  @default_connection_class[connection] ||= begin
    it = classes_by_connection.fetch(connection, []).first
    key = classes_by_connection.keys.first
    it ||= classes_by_connection.fetch(key).first
    it
  end
end

Private Class Methods

application_active_record_class?(klass) click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 71
def application_active_record_class?(klass)
  return false unless klass < ::ActiveRecord::Base
  return false     if klass.abstract_class
  return false     if klass.name =~ /ActiveRecord::/
  return false     if Presence.blank?(klass.name)

  true
rescue NoMethodError
  false
end
default_name() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 82
def default_name
  @default_name ||= RAILS.try(:env) || configs.keys.first || 'default'
end
find_classes() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 86
def find_classes
  load_classes_in_development
  ObjectSpace.each_object(Class).select do |klass|
    application_active_record_class?(klass)
  end.sort_by(&:name)
end
find_classes_by_connection() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 93
def find_classes_by_connection # rubocop:disable Metrics/AbcSize
  sets = {}.with_indifferent_access
  find_classes.each do |klass|
    config_name = configs.keys.select do |k|
      configs[k]['database'] == klass.connection.current_database
    end.first
    config_name ||= default_name
    sets[config_name] ||= []
    sets[config_name] << klass
  end
  sets
end
load_classes_in_development() click to toggle source
# File lib/code_kindly/utils/active_record.rb, line 106
def load_classes_in_development
  return unless RAILS.try(:env).try(:development?)

  ::Dir.glob(RAILS.root.join('app/models/**/*.rb').to_s) do |f|
    klass = ::File.basename(f, '.rb').classify
    next if Kernel.const_defined? klass

    require f
  end
end