class Reacto::Subscriptions::SimpleSubscription

Attributes

subscriptions[R]

Public Class Methods

new( open: NO_ACTION, value: NO_ACTION, error: DEFAULT_ON_ERROR, close: NO_ACTION ) click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 11
def initialize(
  open: NO_ACTION,
  value: NO_ACTION,
  error: DEFAULT_ON_ERROR,
  close: NO_ACTION
)
  @open = open
  @value = value
  @error = error
  @close = close

  @subscribed = true
  @subscriptions = []
  @resources = []
end

Public Instance Methods

add(subscription) click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 38
def add(subscription)
  return unless subscribed?

  @subscriptions << subscription
end
add_resource(resource) click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 44
def add_resource(resource)
  return unless subscribed?

  @resources << resource
end
on_close() click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 72
def on_close
  return unless subscribed?

  @close.call
  @subscriptions.each(&:on_close)
  unsubscribe
end
on_error(e) click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 64
def on_error(e)
  return unless subscribed?

  @error.call(e)
  @subscriptions.each { |s| s.on_error(e) }
  unsubscribe
end
on_open() click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 50
def on_open
  return unless subscribed?

  @open.call
  @subscriptions.each(&:on_open)
end
on_value(v) click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 57
def on_value(v)
  return unless subscribed?

  @value.call(v)
  @subscriptions.each { |s| s.on_value(v) }
end
subscribed?() click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 27
def subscribed?
  @subscribed
end
unsubscribe() click to toggle source
# File lib/reacto/subscriptions/simple_subscription.rb, line 31
def unsubscribe
  @subscriptions.each(&:unsubscribe)
  @subscribed = false
  @resources.each(&:cleanup)
  @resources = []
end