class Eco::API::UseCases::OozeSamples::OozeBaseCase

@attr_reader target [Ecoportal::API::V2::Page] current target ooze.

Constants

DRY_COUNT
SAVE_PATCH

Attributes

options[R]
session[R]
target[R]
usecase[R]

Public Instance Methods

main(session, options, usecase) { || ... } click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 14
def main(session, options, usecase)
  options[:end_get] = false
  raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
  @session = session; @options = options; @usecase = usecase
  @target  = nil
  yield
end
process_ooze(ooze = target) { |ooze| ... } click to toggle source

Write here your script

# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 23
def process_ooze(ooze = target)
  raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
  yield(ooze)
  update_ooze(ooze)
end

Private Instance Methods

apiv2() click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 133
def apiv2
 @apiv2 ||= session.api(version: :oozes)
end
backup_patch!(ooze = target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 108
def backup_patch!(ooze = target)
  unless patch = (patch_doc(ooze) || {})["page"]
    logger.info "No changes to update for #{object_reference(ooze)}."
    return
  end

  patch = patch_doc(ooze)
  # store the request
  File.open(SAVE_PATCH, "w") do |file|
    #file << (patch_doc || {}).to_json
    file << JSON.pretty_generate(patch || {})
  end
  # TODO: ooze_requests folder with subfolders: for each run
  puts "Saved patch at: #{File.expand_path(SAVE_PATCH)}"
end
before_loading_new_target(ooze_id) click to toggle source

Hook method to use before the target is switched

# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 32
def before_loading_new_target(ooze_id)
end
dirty?(object) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 104
def dirty?(object)
  object && patch_doc(object)["page"]
end
dry_count() click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 128
def dry_count
  @dry_count ||= 0
  @dry_count += 1
end
exit_error(msg) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 137
def exit_error(msg)
  logger.error(msg)
  exit(1)
end
new_target(object, warn_pending_changes: true) { |target| ... } click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 92
def new_target(object, warn_pending_changes: true)
  if dirty?(target)
    if warn_pending_changes
      msg =  "You you are switching to a new target #{object_reference(object)}"
      msg += " after doing unsaved changes to #{object_reference(target)}"
      logger.warn msg
    end
    yield(target) if block_given?
  end
  @target = object
end
ooze(ooze_id = nil, stage_id: nil) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 35
def ooze(ooze_id = nil, stage_id: nil)
  return target unless ooze_id
  before_loading_new_target(ooze_id)
  apiv2.pages.get(ooze_id, stage_id: stage_id).tap do |ooze|
    if ooze
      new_target(ooze)
      logger.info("Got #{object_reference(ooze)}")
    else
      exit_error "Could not get ooze '#{ooze_id}'"
    end
  end
end
patch_doc(ooze = target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 124
def patch_doc(ooze = target)
  apiv2.pages.get_body(ooze)
end
stage(id_name = nil, ooze: target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 48
def stage(id_name = nil, ooze: target)
  if ooze_id = ooze && ooze.id
    exit_error "#{object_reference(ooze)} does not have stages!" unless ooze.stages?
  else
    exit_error "There's no target ooze to get retrieve stages from"
  end

  if stg = ooze.stages[id_name] || ooze.stages.get_by_name(id_name)
    return ooze if ooze.respond_to?(:current_stage_id) && (ooze.current_stage_id == stg.id)
    before_loading_new_target(ooze_id)
    return apiv2.pages.get(ooze_id, stage_id: stg.id).tap do |stage|
      if stage
        new_target(stage)
        logger.info("Got #{object_reference(stage)} from #{object_reference(ooze)}")
      else
        exit_error "Could not get stage '#{id_name}' in ooze '#{ooze_id}'"
      end
    end
  end
  exit_error "Stage '#{id_name}' doesn't exist in ooze '#{ooze_id}'"
end
update_ooze(ooze = target) click to toggle source
# File lib/eco/api/usecases/ooze_samples/ooze_base_case.rb, line 70
def update_ooze(ooze = target)
  if !options[:simulate]
    return unless dirty?(ooze)
    apiv2.pages.update(ooze).tap do |response|
      if response.success?
        ooze.consolidate!
        logger.info("Successful update of #{object_reference(ooze)}")
      else
        logger.error("Could not update #{object_reference(ooze)} (created_at: #{ooze.created_at}: #{response.body}")
      end
    end
  else
    unless options.dig(:feedback, :only_stats)
      if patch = (patch_doc(ooze) || {})["page"]
        pp patch
      end
    end
    backup_patch!(ooze)
    exit(0) if dirty?(ooze) && dry_count > DRY_COUNT
  end
end