Class: Workarea::IndexReleaseSchedulePreviews

Inherits:
Object
  • Object
show all
Defined in:
app/services/workarea/index_release_schedule_previews.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(release: nil, starts_at: nil, ends_at: nil) ⇒ IndexReleaseSchedulePreviews

Returns a new instance of IndexReleaseSchedulePreviews.



5
6
7
8
9
# File 'app/services/workarea/index_release_schedule_previews.rb', line 5

def initialize(release: nil, starts_at: nil, ends_at: nil)
  @release = release
  @starts_at = starts_at
  @ends_at = ends_at
end

Instance Attribute Details

#ends_atObject (readonly)

Returns the value of attribute ends_at.



3
4
5
# File 'app/services/workarea/index_release_schedule_previews.rb', line 3

def ends_at
  @ends_at
end

#releaseObject (readonly)

Returns the value of attribute release.



3
4
5
# File 'app/services/workarea/index_release_schedule_previews.rb', line 3

def release
  @release
end

#starts_atObject (readonly)

Returns the value of attribute starts_at.



3
4
5
# File 'app/services/workarea/index_release_schedule_previews.rb', line 3

def starts_at
  @starts_at
end

Instance Method Details

#affected_modelsObject



21
22
23
# File 'app/services/workarea/index_release_schedule_previews.rb', line 21

def affected_models
  affected_releases.flat_map(&:changesets).flat_map(&:releasable).compact
end

#affected_releasesObject



11
12
13
14
15
16
17
18
19
# File 'app/services/workarea/index_release_schedule_previews.rb', line 11

def affected_releases
  result = Release
    .scheduled(after: starts_at, before: ends_at)
    .includes(:changesets)
    .to_a

  result << release if release.present?
  result.uniq
end

#performObject



25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/workarea/index_release_schedule_previews.rb', line 25

def perform
  affected_releases.each do |release|
    affected_models.each do |releasable|
      Search::Storefront.new(releasable.in_release(release)).destroy

      # Different models have different indexing workers, running callbacks
      # ensures the appropriate worker is triggered
      releasable.run_callbacks(:save_release_changes)
    end
  end
end