class Ag::Adapters::Memory
Public Class Methods
new(source = {})
click to toggle source
# File lib/ag/adapters/memory.rb, line 6 def initialize(source = {}) @source = source @source[:connections] ||= [] @source[:events] ||= [] end
Public Instance Methods
connect(consumer, producer)
click to toggle source
# File lib/ag/adapters/memory.rb, line 12 def connect(consumer, producer) @source[:connections] << Connection.new({ id: SecureRandom.uuid, created_at: Time.now.utc, consumer: consumer, producer: producer, }) end
connected?(consumer, producer)
click to toggle source
# File lib/ag/adapters/memory.rb, line 32 def connected?(consumer, producer) !@source[:connections].detect { |connection| connection.consumer == consumer && connection.producer == producer }.nil? end
consumers(producer, options = {})
click to toggle source
# File lib/ag/adapters/memory.rb, line 39 def consumers(producer, options = {}) @source[:connections].select { |connection| connection.producer == producer }.reverse[options.fetch(:offset, 0), options.fetch(:limit, 30)] end
produce(event)
click to toggle source
# File lib/ag/adapters/memory.rb, line 21 def produce(event) result = Ag::Event.new({ id: SecureRandom.uuid, producer: event.producer, object: event.object, verb: event.verb, }) @source[:events] << result result end
producers(consumer, options = {})
click to toggle source
# File lib/ag/adapters/memory.rb, line 45 def producers(consumer, options = {}) @source[:connections].select { |connection| connection.consumer == consumer }.reverse[options.fetch(:offset, 0), options.fetch(:limit, 30)] end
timeline(consumer, options = {})
click to toggle source
# File lib/ag/adapters/memory.rb, line 51 def timeline(consumer, options = {}) producers = producers(consumer).map(&:producer) Array(@source[:events]).select { |event| producers.include?(event.producer) }.sort_by { |event| -event.created_at.to_f }[options.fetch(:offset, 0), options.fetch(:limit, 30)] end