Class: Chewy::Journal

Inherits:
Object
  • Object
show all
Defined in:
lib/chewy/journal.rb

Overview

A class to perform journal-related actions for the specified indexes/types.

Examples:

journal = Chewy::Journal.new('places', UsersIndex)
journal.apply(20.minutes.ago)
journal.clean

Instance Method Summary collapse

Constructor Details

#initialize(*only) ⇒ Journal



11
12
13
# File 'lib/chewy/journal.rb', line 11

def initialize(*only)
  @only = only
end

Instance Method Details

#apply(since_time, fetch_limit: 10, **import_options) ⇒ Integer

Applies all changes that were done since the specified time to the specified indexes.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/chewy/journal.rb', line 21

def apply(since_time, fetch_limit: 10, **import_options)
  stage = 1
  since_time -= 1
  count = 0

  total_count = entries(since_time, fetch_limit).total_count

  while count < total_count
    entries = entries(since_time, fetch_limit).to_a.presence or break
    count += entries.size
    groups = reference_groups(entries)
    ActiveSupport::Notifications.instrument 'apply_journal.chewy', stage: stage, groups: groups
    groups.each do |index, references|
      index.import(references, import_options.merge(journal: false))
    end
    stage += 1
    since_time = entries.map(&:created_at).max
  end
  count
end

#clean(until_time = nil, delete_by_query_options: {}) ⇒ Hash

Cleans journal for the specified indexes/types.



46
47
48
49
50
51
52
# File 'lib/chewy/journal.rb', line 46

def clean(until_time = nil, delete_by_query_options: {})
  Chewy::Stash::Journal.clean(
    until_time,
    only: @only,
    delete_by_query_options: delete_by_query_options.merge(refresh: false)
  )
end