Class: Happn::SubscriptionRepository

Inherits:
Object
  • Object
show all
Defined in:
lib/happn/subscription_repository.rb

Instance Method Summary collapse

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_allObject



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