Sha256: c3ec6c32e9b36c46cdda0d87a16666e9cbf8f1c7b257067128197f755281cb37

Contents?: true

Size: 1.04 KB

Versions: 5

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

require 'json'
require 'ostruct'
require 'timeout'
# require 'forwardable'
require 'delegate'
require_relative 'task'

module Procrastinator
   # Task wrapper that adds logging to each step.
   #
   # @author Robin Miller
   #
   # @see Task
   class LoggedTask < DelegateClass(Task)
      attr_reader :logger

      alias task __getobj__

      def initialize(task, logger: Logger.new(StringIO.new))
         super task
         @logger = logger || raise(ArgumentError, 'Logger cannot be nil')
      end

      # (see Task#run)
      def run
         task.run

         begin
            @logger.info("Task completed: #{ task }")
         rescue StandardError => e
            warn "Task logging error: #{ e.message }"
         end
      end

      # @param (see Task#fail)
      def fail(error)
         hook = task.fail(error)
         begin
            @logger.error("Task #{ hook }ed: #{ task }")
         rescue StandardError => e
            warn "Task logging error: #{ e.message }"
         end
         hook
      end
   end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
procrastinator-2.0.0 lib/procrastinator/logged_task.rb
procrastinator-1.2.0 lib/procrastinator/logged_task.rb
procrastinator-1.1.0 lib/procrastinator/logged_task.rb
procrastinator-1.0.1 lib/procrastinator/logged_task.rb
procrastinator-1.0.0 lib/procrastinator/logged_task.rb