class Observed::ProcTask

Public Class Methods

new(args, &block) click to toggle source
# File lib/observed/task.rb, line 82
def initialize(args, &block)
  @executor = args[:executor] || fail('Missing a value for :executor')
  @listener = args[:listener] || fail('Missing a value for :listener')
  @logger = args[:logger]
  @block = block
  @next_task = NoOpTask.instance

  if @logger.nil?
    @logger = ::Logger.new(STDERR)
    @logger.level = ::Logger::WARN
  end
end

Public Instance Methods

now(data={}, options=nil) { |result| ... } click to toggle source
# File lib/observed/task.rb, line 94
def now(data={}, options=nil)
  @executor.submit {
    result = @block.call(data, options)
    yield result if block_given?
    notify_listener(data: data, options: options, result: result)
  }
end

Private Instance Methods

notify_listener(args) click to toggle source
# File lib/observed/task.rb, line 104
def notify_listener(args)
  return unless @listener

  data = args[:data]
  options = args[:options]
  result = args[:result]

  @logger.debug "Notifying listeners with the result(#{result}) generated from the input data(#{data}) and the options(#{options})"

  if result.is_a? ::Hash
    if options
      @listener.on_result(result, options)
    else
      @listener.on_result(result)
    end
  elsif result.is_a? ::Array
    if result.size == 1 && options
      @listener.on_result(result, options)
    elsif result.size == 2
      @listener.on_result(*result)
    end
  end
end