Class: Upkeep::Subscriptions::ActiveRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/upkeep/subscriptions/active_registry.rb

Instance Method Summary collapse

Constructor Details

#initialize(reverse_index: ReverseIndex.new) ⇒ ActiveRegistry

Returns a new instance of ActiveRegistry.



8
9
10
11
12
# File 'lib/upkeep/subscriptions/active_registry.rb', line 8

def initialize(reverse_index: ReverseIndex.new)
  @mutex = Mutex.new
  @subscriptions = {}
  @reverse_index = reverse_index
end

Instance Method Details

#countObject



69
70
71
# File 'lib/upkeep/subscriptions/active_registry.rb', line 69

def count
  @mutex.synchronize { @subscriptions.size }
end

#covers?(persistent_count) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/upkeep/subscriptions/active_registry.rb', line 65

def covers?(persistent_count)
  count >= persistent_count
end

#entries_for(changes) ⇒ Object



54
55
56
# File 'lib/upkeep/subscriptions/active_registry.rb', line 54

def entries_for(changes)
  @mutex.synchronize { @reverse_index.entries_for(changes) }
end

#fetch(id) ⇒ Object



25
26
27
# File 'lib/upkeep/subscriptions/active_registry.rb', line 25

def fetch(id)
  @mutex.synchronize { @subscriptions[id] }
end

#register(subscription, entries: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/upkeep/subscriptions/active_registry.rb', line 14

def register(subscription, entries: nil)
  @mutex.synchronize do
    @subscriptions[subscription.id] = subscription
    if entries
      @reverse_index.index_entries(entries, subscription: subscription)
    else
      @reverse_index.index(subscription)
    end
  end
end

#resetObject



58
59
60
61
62
63
# File 'lib/upkeep/subscriptions/active_registry.rb', line 58

def reset
  @mutex.synchronize do
    @subscriptions = {}
    @reverse_index = ReverseIndex.new
  end
end

#subscriptionsObject



29
30
31
# File 'lib/upkeep/subscriptions/active_registry.rb', line 29

def subscriptions
  @mutex.synchronize { @subscriptions.values }
end

#summaryObject



73
74
75
76
77
# File 'lib/upkeep/subscriptions/active_registry.rb', line 73

def summary
  @mutex.synchronize do
    @reverse_index.summary.merge(subscriptions: @subscriptions.size)
  end
end

#touch(id, metadata:) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/upkeep/subscriptions/active_registry.rb', line 44

def touch(id, metadata:)
  @mutex.synchronize do
    subscription = @subscriptions[id]
    return false unless subscription

    @subscriptions[id] = subscription.with(metadata: subscription..merge())
    true
  end
end

#unregister(ids) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/upkeep/subscriptions/active_registry.rb', line 33

def unregister(ids)
  ids = Array(ids)
  @mutex.synchronize do
    ids.each do |id|
      next unless @subscriptions.delete(id)

      @reverse_index.delete_subscription(id)
    end
  end
end