Sha256: 14901a5e1d66a6719431f45e5c534bf9cca3e53ad17e2b204589ed737520d651

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

require "sandthorn/version"
require "sandthorn/errors"
require "sandthorn/aggregate_root"
require "sandthorn/event_stores"
require 'yaml'
require 'securerandom'

module Sandthorn
  class << self
    extend Forwardable

    def_delegators :configuration, :event_stores

    def default_event_store
      event_stores.default_store
    end

    def default_event_store=(store)
      event_stores.default_store = store
    end

    def configure
      yield(configuration) if block_given?
    end

    def configuration
      @configuration ||= Configuration.new
    end

    def generate_aggregate_id
      SecureRandom.uuid
    end

    def save_events aggregate_events, aggregate_id, aggregate_type
      event_store_for(aggregate_type).save_events aggregate_events, aggregate_id, *aggregate_type
    end

    def all aggregate_type
      event_store_for(aggregate_type).all(aggregate_type)
    end

    def find aggregate_id, aggregate_type
      event_store_for(aggregate_type).find(aggregate_id, aggregate_type)
    end

    def save_snapshot(aggregate)
      raise "Not Implemented"
    end

    def find_event_store(name)
      event_stores.by_name(name)
    end

    private

    def event_store_for(aggregate_type)
      event_store = event_stores.by_name(aggregate_type.event_store).tap do |store|
        yield(store) if block_given?
      end
    end

    def missing_key(key)
      raise ArgumentError, "missing keyword: #{key}"
    end

    class Configuration
      extend Forwardable

      def_delegators :default_store, :event_stores, :default_store=

      def initialize
        yield(self) if block_given?
      end

      def event_stores
        @event_stores ||= EventStores.new
      end

      def event_store=(store)
        @event_stores = EventStores.new(store)
      end

      def map_types= data
        @event_stores.map_types data
      end

      alias_method :event_stores=, :event_store=
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sandthorn-1.1.0 lib/sandthorn.rb