Class: Happn::SubscriptionRepository
- Inherits:
-
Object
- Object
- Happn::SubscriptionRepository
- Defined in:
- lib/happn/subscription_repository.rb
Instance Method Summary collapse
- #find_all ⇒ Object
- #find_subscriptions_for(event) ⇒ Object
-
#initialize(logger) ⇒ SubscriptionRepository
constructor
A new instance of SubscriptionRepository.
- #register(query, projector, &block) ⇒ Object
Constructor Details
#initialize(logger) ⇒ SubscriptionRepository
Returns a new instance of SubscriptionRepository.
4 5 6 7 |
# File 'lib/happn/subscription_repository.rb', line 4 def initialize(logger) @subscriptions = {} @logger = logger end |
Instance Method Details
#find_all ⇒ Object
23 24 25 |
# File 'lib/happn/subscription_repository.rb', line 23 def find_all flatten(@subscriptions) end |
#find_subscriptions_for(event) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/happn/subscription_repository.rb', line 27 def find_subscriptions_for(event) possible_event_statuses = ["all", event.status.to_s] possible_event_emitters = ["all", event.emitter.to_s] possible_event_names = ["all", event.name.to_s] possible_event_kinds = ["all", event.kind.to_s] subscriptions = [] possible_event_statuses.each do | status | possible_event_emitters.each do | emitter | possible_event_kinds.each do | kind | possible_event_names.each do | name | subscriptions += @subscriptions.dig(status, emitter, kind, name) || [] end end end end subscriptions end |
#register(query, projector, &block) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/happn/subscription_repository.rb', line 9 def register(query, projector, &block) subscription = Subscription.new(query, projector, &block) emitter = query.emitter.to_s kind = query.kind.to_s name = query.name.to_s status = query.status.to_s @subscriptions[status] ||= {} @subscriptions[status][emitter] ||= {} @subscriptions[status][emitter][kind] ||= {} @subscriptions[status][emitter][kind][name] ||= [] @subscriptions[status][emitter][kind][name].push(subscription) @logger.info("Subscribe projector '#{projector.class}' to query : [#{status}][#{emitter}][#{kind}][#{name}]") end |