module DryRunnable def dry_run! readonly! class << self prepend Sandbox end log = StringIO.new @dry_run_logger = Logger.new(log) @dry_run_results = { events: [], } begin raise "#{short_type} does not support dry-run" unless can_dry_run? check rescue => e error "Exception during dry-run. #{e.message}: #{e.backtrace.join("\n")}" end @dry_run_results.update( memory: memory, log: log.string, ) end def dry_run? is_a? Sandbox end module Sandbox attr_accessor :results def logger @dry_run_logger end def save valid? end def save! save or raise ActiveRecord::RecordNotSaved end def log(message, options = {}) case options[:level] || 3 when 0..2 sev = Logger::DEBUG when 3 sev = Logger::INFO else sev = Logger::ERROR end logger.log(sev, message) end def create_event(event_hash) if can_create_events? @dry_run_results[:events] << event_hash[:payload] events.build({ user: user, expires_at: new_event_expiration_date }.merge(event_hash)) else error "This Agent cannot create events!" end end end end