Module: Syncromesh::SimplePoller

Defined in:
lib/syncromesh.rb

Class Method Summary collapse

Class Method Details

.read(subscriber) ⇒ Object



110
111
112
113
114
115
116
# 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

.subscribeObject



102
103
104
105
106
107
108
# 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_storeObject



127
128
129
130
131
132
133
134
135
136
137
138
# 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) ⇒ Object



118
119
120
121
122
123
124
125
# 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