Sha256: 96f7e2d6180df41c820295cdacb48173490a4238594834073bf42f9c2dae84f2

Contents?: true

Size: 912 Bytes

Versions: 3

Compression:

Stored size: 912 Bytes

Contents

class CounterCacheUpdate::UpdateService < ServicePattern::Service
  attr_reader :use_progress_bar

  def initialize(use_progress_bar: false)
    @use_progress_bar = use_progress_bar
  end

  def execute!
    Rails.application.eager_load!

    if use_progress_bar
      require "progress_bar"
      @progress_bar = ProgressBar.new(model_classes.size)
    end

    update_relationships!
    ServicePattern::Response.new(success: true)
  end

private

  def update_relationships!
    model_classes.each do |model_class|
      @progress_bar&.increment!

      model_class.reflections.each do |_name, reflection|
        next unless reflection.macro.to_sym == :belongs_to
        next unless reflection.options[:counter_cache]
        CounterCacheUpdate::TableUpdatorService.execute!(reflection: reflection)
      end
    end
  end

  def model_classes
    @model_classes ||= ActiveRecord::Base.descendants
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
counter_cache_update-0.0.2 app/services/counter_cache_update/update_service.rb
counter_cache_update-0.0.1 app/services/counter_cache_update/update_service.rb
counter_cache_update-0.0.0 app/services/counter_cache_update/update_service.rb