Sha256: e8893a54b27864e24b0eb7861477f182315f61be31620a6355d307ea063419ed

Contents?: true

Size: 1.29 KB

Versions: 6

Compression:

Stored size: 1.29 KB

Contents

require 'rohbau/index'

module Rohbau
  class DefaultMemoryGateway
    def initialize(memory = Index.new, services = {})
      @memory = memory
      @services = services
    end

    def memory
      @memory
    end

    def add(entity)
      @memory.add entity
    end

    def bulk_add(*entities)
      @memory.bulk_add(*entities)
    end

    def get(uid)
      @memory.get(uid)
    end

    def update(entity)
      @memory.update(entity)
    end

    def delete(uid)
      @memory.delete(uid)
    end

    def bulk_delete(*uids)
      @memory.bulk_delete(*uids)
    end

    def all
      @memory.all
    end

    def size
      @memory.size
    end

    protected

    def service(service_name)
      @services[service_name] || raise(no_service_error service_name)
    end

    def no_service_error(service_name)
      NotImplementedError.new("#{service_name} service in #{self.class}")
    end

    def map(entity_name, entity)
      gateway = gateway_for_entity(entity_name)

      if entity.uid
        result = gateway.update(entity)
      else
        result = gateway.add(entity)
      end

      result.uid
    end

    def unmap(entity_name, uid)
      gateway_for_entity(entity_name).get(uid)
    end

    def gateway_for_entity(entity_name)
      service(:"#{entity_name}_gateway")
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rohbau-0.3.3 lib/rohbau/default_memory_gateway.rb
rohbau-0.3.2 lib/rohbau/default_memory_gateway.rb
rohbau-0.3.1 lib/rohbau/default_memory_gateway.rb
rohbau-0.3.0 lib/rohbau/default_memory_gateway.rb
rohbau-0.2.1 lib/rohbau/default_memory_gateway.rb
rohbau-0.2.0 lib/rohbau/default_memory_gateway.rb