Sha256: a8fbd40066cd3fae7370d068d22e83d29a4f4cb398c42766aeaab52af3d8fb05
Contents?: true
Size: 1.59 KB
Versions: 3
Compression:
Stored size: 1.59 KB
Contents
# frozen_string_literal: true require 'monitor' module FiniteMachine # A class responsibile for storage of event subscribers class Subscribers include Enumerable include MonitorMixin # Initialize a subscribers collection # # @api public def initialize super @subscribers = [] end # Iterate over subscribers # # @api public def each(&block) @subscribers.each(&block) end # Return index of the subscriber # # @api public def index(subscriber) @subscribers.index(subscriber) end # Check if anyone is subscribed # # @return [Boolean] # # @api public def empty? @subscribers.empty? end # Add listener to subscribers # # @param [Array[#trigger]] observers # # @return [undefined] # # @api public def subscribe(*observers) synchronize do observers.each { |observer| @subscribers << observer } end end # Visit subscribers and notify # # @param [HookEvent] hook_event # the callback event to notify about # # @return [undefined] # # @api public def visit(hook_event, *data) each { |subscriber| synchronize { hook_event.notify(subscriber, *data) } } end # Number of subscribed listeners # # @return [Integer] # # @api public def size synchronize { @subscribers.size } end # Reset subscribers # # @return [self] # # @api public def reset @subscribers.clear self end end # Subscribers end # FiniteMachine
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
finite_machine-0.13.0 | lib/finite_machine/subscribers.rb |
finite_machine-0.12.1 | lib/finite_machine/subscribers.rb |
finite_machine-0.12.0 | lib/finite_machine/subscribers.rb |