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
Calls superclass method
Eco::API::UseCases::OozeSamples::OozeBaseCase#main
# 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
conf_search()
click to toggle source
# File lib/eco/api/usecases/ooze_samples/register_update_case.rb, line 155 def conf_search return search if self.respond_to?(:search) 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
Calls superclass method
Eco::API::UseCases::OozeSamples::OozeBaseCase#new_target
# 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