Class: Announcer::Instance
- Inherits:
-
Object
- Object
- Announcer::Instance
show all
- Includes:
- Mixins::Serializable, Plugins::ComponentMixin
- Defined in:
- lib/announcer/instance.rb
Overview
Instance
Represents an instance of the Announcer. Allows multiple Instances to be created with separate configuration, subscriptions, etc. Primarily intended to help testing, but there are practical use-cases as well.
Constant Summary
Mixins::Serializable::MAGIC, Mixins::Serializable::VERSION
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#_serializable_args, #_serializable_package, #_serialize_arg, included, #serialize
Constructor Details
#initialize(name = nil) ⇒ Instance
Returns a new instance of Instance.
26
27
28
29
30
31
32
33
|
# File 'lib/announcer/instance.rb', line 26
def initialize(name=nil)
if name
@name = name.to_sym
Announcer._register_instance(self) if @name
end
_load_default_config
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
23
24
25
|
# File 'lib/announcer/instance.rb', line 23
def name
@name
end
|
#publishers ⇒ Object
Returns the value of attribute publishers.
24
25
26
|
# File 'lib/announcer/instance.rb', line 24
def publishers
@publishers
end
|
Class Method Details
.load_from_serialized(name) ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/announcer/instance.rb', line 35
def self.load_from_serialized(name)
if name
Announcer.instance(name)
else
raise Errors::InstanceError, "Can't deserialize an unnamed Instance"
end
end
|
Instance Method Details
#_register_subscription(subscription) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/announcer/instance.rb', line 83
def _register_subscription(subscription)
if _subscriptions_by_identifiers[subscription.identifier]
raise Errors::SubscriptionError, "duplicate identifier: #{subscription.identifier.inspect}"
else
_subscriptions_by_identifiers[subscription.identifier] = subscription
end
_registered_subscriptions_to(subscription.event_name)
.push(subscription)
.sort! { |x, y| x.priority <=> y.priority }
end
|
#config(&block) ⇒ Object
43
44
45
46
47
48
49
50
|
# File 'lib/announcer/instance.rb', line 43
def config(&block)
(@__config ||= Config.new).tap { |config|
if block_given?
config.define(&block)
_process_config
end
}
end
|
#find_publisher(publisher) ⇒ Object
74
75
76
77
|
# File 'lib/announcer/instance.rb', line 74
def find_publisher(publisher)
klass = Publishers.load(publisher)
publishers && publishers.find { |pub| pub.is_a?(klass) }
end
|
#find_subscription(identifier) ⇒ Object
70
71
72
|
# File 'lib/announcer/instance.rb', line 70
def find_subscription(identifier)
_subscriptions_by_identifiers[identifier]
end
|
#has_publisher?(publisher) ⇒ Boolean
79
80
81
|
# File 'lib/announcer/instance.rb', line 79
def has_publisher?(publisher)
!!find_publisher(publisher)
end
|
#plugin(*args) ⇒ Object
52
53
54
|
# File 'lib/announcer/instance.rb', line 52
def plugin(*args)
config { plugin(*args) }
end
|
#publish(*args) ⇒ Object
56
57
58
59
|
# File 'lib/announcer/instance.rb', line 56
def publish(*args)
raise Errors::NoPublishersDefinedError unless publishers && !publishers.empty?
_args_to_event(*args).publish
end
|
#subscribe_to(event_name, params = {}, &block) ⇒ Object
61
62
63
|
# File 'lib/announcer/instance.rb', line 61
def subscribe_to(event_name, params={}, &block)
Subscription.new(event_name, params.merge(instance: self), &block)
end
|
#subscriptions_to(event_or_name) ⇒ Object
65
66
67
68
|
# File 'lib/announcer/instance.rb', line 65
def subscriptions_to(event_or_name)
event_name = event_or_name.is_a?(Event) ? event_or_name.name : event_or_name.to_sym
_registered_subscriptions_to(event_name).dup
end
|