Sha256: 07af22c748ae971dbe0db0f1ade993c9537fe6231d5a4ab78802bbf2761fc484

Contents?: true

Size: 961 Bytes

Versions: 1

Compression:

Stored size: 961 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]
        next if reflection.options[:polymorphic]
        CounterCacheUpdate::TableUpdatorService.execute!(reflection: reflection)
      end
    end
  end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
counter_cache_update-0.0.3 app/services/counter_cache_update/update_service.rb