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