Class: ActiveRecord::OverflowSignalizer

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord/overflow_signalizer.rb,
lib/activerecord/overflow_signalizer/version.rb

Defined Under Namespace

Classes: UnsupportedType

Constant Summary collapse

DAY =
24 * 60 * 60
DEFAULT_AVG =
100_000
MAX_VALUE =
{
  'integer' => 2_147_483_647,
  'bigint' => 9_223_372_036_854_775_807
}.freeze
VERSION =
'0.1.1'.freeze

Instance Method Summary collapse

Constructor Details

#initialize(logger: nil, models: nil, days_count: 60, signalizer: nil) ⇒ OverflowSignalizer

Returns a new instance of OverflowSignalizer.



22
23
24
25
26
27
# File 'lib/activerecord/overflow_signalizer.rb', line 22

def initialize(logger: nil, models: nil, days_count: 60, signalizer: nil)
  @logger = logger || ActiveRecord::Base.logger
  @models = models || ActiveRecord::Base.descendants
  @days_count = days_count
  @signalizer = signalizer
end

Instance Method Details

#analyse!Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/activerecord/overflow_signalizer.rb', line 29

def analyse!
  @models.group_by(&:table_name).each do |table, models|
    model = models.first
    next if model.abstract_class? || model.last.nil?
    pk = model.columns.select { |c| c.name == model.primary_key }.first
    max = MAX_VALUE.fetch(pk.sql_type) { |type| raise UnsupportedType, type }
    if overflow_soon?(max, model)
      signalize(table, model.last.public_send(pk.name), max)
    end
  end
end