Sha256: d6ccad5bf89981f2e08c12b9ed3fec0fe5ed7214c935c5f94bd632794af6a03a

Contents?: true

Size: 1.39 KB

Versions: 9

Compression:

Stored size: 1.39 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,
                   :version => 1 }

      @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 publishing_user_id
      @headers[:user_id]
    end

    def publishing_user_id= value
      @headers[:user_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
      @headers[:version]
    end

    def version= value
      @headers[:version] = value
    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

9 entries across 9 versions & 1 rubygems

Version Path
euston-1.2.9-java lib/euston/command.rb
euston-1.2.9 lib/euston/command.rb
euston-1.2.8 lib/euston/command.rb
euston-1.2.8-java lib/euston/command.rb
euston-1.2.7-java lib/euston/command.rb
euston-1.2.7 lib/euston/command.rb
euston-1.2.6 lib/euston/command.rb
euston-1.2.5-java lib/euston/command.rb
euston-1.2.5 lib/euston/command.rb