Class: ActiveRecord::OverflowSignalizer
- Inherits:
-
Object
- Object
- ActiveRecord::OverflowSignalizer
- 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
- #analyse! ⇒ Object
-
#initialize(logger: nil, models: nil, days_count: 60, signalizer: nil) ⇒ OverflowSignalizer
constructor
A new instance of OverflowSignalizer.
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 |