class Porcupine::Observable

Public Instance Methods

subscribe(*args, &block) click to toggle source
# File lib/porcupine/observable.rb, line 5
def subscribe(*args, &block)
  raise ArgumentError unless block_given? || args.first

  on_next = if block_given?
              block
            else
              args.shift
            end

  on_error = !block_given? && args.shift

  wrapped = lambda do |value_or_exception|
    if value_or_exception.is_a?(Exception)
      on_error && on_error.call(value_or_exception)
    else
      on_next.call(value_or_exception)
    end
  end

  if on_error
    __getobj__.subscribe(wrapped, on_error, *args)
  else
    __getobj__.subscribe(wrapped)
  end
end