lib/inventory_refresh/save_collection/base.rb
require "inventory_refresh/logging"
require "inventory_refresh/save_collection/saver/batch"
require "inventory_refresh/save_collection/saver/concurrent_safe_batch"
require "inventory_refresh/save_collection/saver/default"
module InventoryRefresh::SaveCollection
class Base
class << self
include InventoryRefresh::Logging
# Saves one InventoryCollection object into the DB.
#
# @param ems [ExtManagementSystem] manger owning the InventoryCollection object
# @param inventory_collection [InventoryRefresh::InventoryCollection] InventoryCollection object we want to save
def save_inventory_object_inventory(ems, inventory_collection)
return if skip?(inventory_collection)
logger.debug("----- BEGIN ----- Saving collection #{inventory_collection} of size #{inventory_collection.size} to"\
" the database, for the manager: '#{ems.name}'...")
if inventory_collection.custom_save_block.present?
logger.debug("Saving collection #{inventory_collection} using a custom save block")
inventory_collection.custom_save_block.call(ems, inventory_collection)
else
save_inventory(inventory_collection)
end
logger.debug("----- END ----- Saving collection #{inventory_collection}, for the manager: '#{ems.name}'...Complete")
inventory_collection.saved = true
end
private
# Returns true and sets collection as saved, if the collection should be skipped.
#
# @param inventory_collection [InventoryRefresh::InventoryCollection] InventoryCollection object we want to save
# @return [Boolean] True if processing of the collection should be skipped
def skip?(inventory_collection)
if inventory_collection.noop?
logger.debug("Skipping #{inventory_collection} processing because it will do no operation.")
inventory_collection.saved = true
return true
end
false
end
# Saves one InventoryCollection object into the DB using a configured saver_strategy class.
#
# @param inventory_collection [InventoryRefresh::InventoryCollection] InventoryCollection object we want to save
def save_inventory(inventory_collection)
saver_class = "InventoryRefresh::SaveCollection::Saver::#{inventory_collection.saver_strategy.to_s.camelize}"
saver_class.constantize.new(inventory_collection).save_inventory_collection!
end
end
end
end