module Syncromesh::SimplePoller

Public Class Methods

read(subscriber) click to toggle source
# File lib/syncromesh.rb, line 110
def self.read(subscriber)
  update_store do |store|
    data = store[subscriber][:data] rescue []
    store[subscriber] = {data: [], last_read_at: Time.now}
    data
  end
end
subscribe() click to toggle source
# File lib/syncromesh.rb, line 102
def self.subscribe
  subscriber = SecureRandom.hex(10)
  update_store do |store|
    store[subscriber] = {data: [], last_read_at: Time.now}
  end
  subscriber
end
update_store() { |data| ... } click to toggle source
# File lib/syncromesh.rb, line 127
def self.update_store
  store = PStore.new('syncromesh-simple-poller-store')
  store.transaction do
    data = store[:data] || {}
    data.delete_if do |subscriber, subscriber_store|
      subscriber_store[:last_read_at] < Time.now-Syncromesh.seconds_polled_data_will_be_retained
    end
    result = yield data
    store[:data] = data
    result
  end
end
write(event, data) click to toggle source
# File lib/syncromesh.rb, line 118
def self.write(event, data)
  update_store do |store|
    store.each do |subscriber, subscriber_store|
      subscriber_store[:data] << [event, data]
    end
  end

end