class Eco::API::UseCases::OozeSamples::RegisterUpdateCase

Use case to update a register @note

- You can define methods `filters` and `search` to change the target entries of the register
- You need to define the `process_ooze` method

This case expects `options[:register_id]`

Public Class Methods

batch_size(size = nil) click to toggle source

@return [Integer] the number of pages to be processed in each batch

# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 10
def batch_size(size = nil)
  @batch_size ||= 25
  return @batch_size unless size
  @batch_size = size
end

Public Instance Methods

main(session, options, usecase, &block) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 20
def main(session, options, usecase, &block)
  super(session, options, usecase) do
    with_each_entry do |ooze|
      process_ooze(&block)
    end
  end
end
process_ooze(ooze = target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 28
def process_ooze(ooze = target)
  raise "You need to define this method"
end

Private Instance Methods

backup_patch!(ooze = target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 121
def backup_patch!(ooze = target)
  unless patch = (patch_doc(ooze) || {})["page"]
    logger.info "No changes to update for #{object_reference(ooze)}."
    return
  end
end
batch_queue() click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 96
def batch_queue
  @batch_queue ||= []
end
batched_search_results() { |results| ... } click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 100
def batched_search_results
  raise "Missing block. It yields in slices of #{self.class.batch_size} results" unless block_given?
  results_preview
  results = []
  apiv2.registers.search(register_id, search_options) do |page_result|
    results << page_result
    if results.length >= self.class.batch_size
      yield(results)
      results = []
    end
  end
  yield(results) unless results.empty?
end
before_loading_new_target(ooze_id) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 34
def before_loading_new_target(ooze_id)
  if pending = queue_shift(ooze_id)
    update_ooze(pending)
  end
end
conf_filters() click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 150
def conf_filters
  return filters if self.respond_to?(:filters)
  []
end
enqueue(object) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 66
def enqueue(object)
  return unless object && object.respond_to?(:id)
  unless object.is_a?(Ecoportal::API::V2::Page) or object.is_a?(Ecoportal::API::V2::Pages::PageStage)
    raise "Queuing is just for entries. Expecting Page or PageStage. Given: #{object.class}"
  end
  if elem = queue_get(object.id)
    msg = "Something is wrong. Native case 'RegisterUpdateCase' is "
    if (elem != object) && dirty?(elem)
      msg << "trying to queue different objects with same page id:\n"
      msg << " • already queued (changes will go): #{object_reference(elem)}\n"
      msg << " • tried to queue (lost changes): #{object_reference(object)}"
      logger.warn msg
    end
  else
    batch_queue << object unless batch_queue.include?(object)
  end
end
new_target(object, warn_pending_changes: false) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 40
def new_target(object, warn_pending_changes: false)
  enqueue(object)
  super(object, warn_pending_changes: warn_pending_changes) do |pending|
    #enqueue(pending)
  end
end
queue_get(id) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 92
def queue_get(id)
  batch_queue.find {|e| e.id == id}
end
queue_shift(id = nil) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 84
def queue_shift(id = nil)
  if id
    batch_queue.delete(queue_get(id))
  else
    batch_queue.shift
  end
end
register_id() click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 159
def register_id
  options.dig(:source, :register_id)
end
results_preview() click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 128
def results_preview
  apiv2.registers.search(register_id, search_options.merge(only_first: true)).tap do |search_results|
    str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
    session.prompt_user("Do you want to proceed (y/N):", explanation: str_results, default: "N", timeout: 10) do |res|
      if res.upcase.start_with?("N")
        puts "..."
        logger.info "Aborting script..."
        exit(0)
      end
    end
  end
end
search_options() click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 141
def search_options
  @search_options ||= {}.tap do |opts|
    opts.merge!(sort: "created_at")
    opts.merge!(dir:  "asc")
    opts.merge!(query:   conf_filters) if conf_search
    opts.merge!(filters: conf_filters)
  end
end
update_oozes(batched_oozes = batch_queue) click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 114
def update_oozes(batched_oozes = batch_queue)
  batched_oozes.each do |ooze|
    update_ooze(ooze)
  end
  batched_oozes.clear
end
with_each_entry() { |ooz| ... } click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 47
def with_each_entry
  batched_search_results do |page_results|
    page_results.each do |page_result|
      if pending = queue_shift(page_result.id)
        if dirty?(pending)
          msg  = "Inconsistent search results. "
          msg << "Launching update on '#{object_reference(pending)}' to be able to queue it back"
          console.warn msg
          update_ooze(pending)
        end
      end
      if ooz = ooze(page_result.id)
        yield(ooz)
      end
    end
    update_oozes
  end
end