Sha256: a46e26574436549137dc643d4498ead476459cbe513ee2980effa2c4cc140413

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

module Euston
  class Command
    include ActiveModel::Validations

    def initialize body, dispatch_at = nil
      @headers = { :id => Uuid.generate,
                   :type => self.class.to_s.split('::').pop.underscore.to_sym }

      @body = body
      @headers[:dispatch_at] = dispatch_at unless dispatch_at.nil?
    end

    def headers
      @headers.merge :version => version
    end

    def id
      @headers[:id]
    end

    def id= value
      @headers[:id] = value
    end

    def read_attribute_for_validation key
      match = /^__(.*)/.match(key.to_s)

      if match.nil?
        @body[key]
      else
        headers[match[1].to_sym]
      end
    end

    def type
      @headers[:type]
    end

    def to_hash
      { :headers => headers, :body => @body }
    end

    def version
      1
    end

    attr_reader :body

    validates :__id,        :presence => true, :format => { :with => /^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$/ }
    validates :__type,      :presence => true
    validates :__version,   :presence => true, :numericality => { :greater_than => 0, :only_integer => true }
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
euston-1.2.3 lib/euston/command.rb
euston-1.2.3-java lib/euston/command.rb