iravench/ruby_cqrs

View on GitHub
lib/ruby_cqrs/contracts.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'contracts'

module RubyCqrs
  module Validation
    include Contracts
    include Contracts::Modules

    class EventStore
      def self.valid? val
        val.is_a? RubyCqrs::Data::EventStore
      end
    end

    class Event
      def self.valid? val
        val.is_a? RubyCqrs::Domain::Event
      end
    end

    class TypeOfEvent
      def self.valid? val
        val < RubyCqrs::Domain::Event
      end
    end

    class Snapshot
      def self.valid? val
        val.is_a? RubyCqrs::Domain::Snapshot
      end
    end

    class Aggregate
      def self.valid? val
        val.is_a? RubyCqrs::Domain::Aggregate
      end
    end

    class AggregateId
      def self.valid? val
        RubyCqrs::Guid.validate? val
      end
    end

    AggregateChanges = ({ :events => ArrayOf[Event],
                          :aggregate_id => AggregateId,
                          :aggregate_type => String,
                          :expecting_source_version => Or[0, Pos],
                          :expecting_version => Pos })

    AggregateChangesWithSnapshot = ({\
                          :events => ArrayOf[Event],
                          :aggregate_id => AggregateId,
                          :aggregate_type => String,
                          :expecting_source_version => Or[0, Pos],
                          :expecting_version => Pos,
                          :snapshot => {\
                                 :state => Snapshot,
                                 :state_type => String,
                                 :version => Pos }})

    AggregateState = ({\
                          :aggregate_id => AggregateId,
                          :aggregate_type => String,
                          :events => ArrayOf[Event]})

    AggregateStateWithSnapshot = ({\
                        :aggregate_id => AggregateId,
                        :aggregate_type => String,
                        :snapshot => {\
                                 :state => Snapshot,
                                 :version => Pos },
                        :events => ArrayOf[Event]})

    SerializedAggregateState = ({\
                          :aggregate_id => AggregateId,
                          :aggregate_type => String,
                          :events => ArrayOf[{\
                                 :aggregate_id => AggregateId,
                                 :event_type => String,
                                 :version => Pos,
                                 :data => String }]})

    SerializedAggregateStateWithSnapshot = ({\
                        :aggregate_id => AggregateId,
                        :aggregate_type => String,
                        :snapshot => {\
                                 :state_type => String,
                                 :version => Pos,
                                 :data => String },
                        :events => ArrayOf[{\
                                 :aggregate_id => AggregateId,
                                 :event_type => String,
                                 :version => Pos,
                                 :data => String }]})
  end
end