module Outbox::MessageFields

Public Class Methods

included(base) click to toggle source
# File lib/outbox/message_fields.rb, line 3
def self.included(base)
  base.extend Outbox::DefineInheritableMethod
  base.extend ClassMethods
end

Public Instance Methods

[](name) click to toggle source

Read an arbitrary field.

Example:

message['foo'] = '1234'
message['foo'] #=> '1234'
# File lib/outbox/message_fields.rb, line 148
def [](name)
  @fields[name.to_sym]
end
[]=(name, value) click to toggle source

Add an arbitray field.

Example:

message['foo'] = '1234'
message['foo'] #=> '1234'
# File lib/outbox/message_fields.rb, line 158
def []=(name, value)
  @fields[name.to_sym] = value
end
fields(new_fields = nil) click to toggle source

Returns a hash of the defined fields.

class SomeMessageType < Outbox::Messages::Base
  fields :to, :from
end
message = SomeMessageType.new to: 'Bob'
message.from 'John'
message.fields #=> { to: 'Bob', from: 'John' }

Also allows you to set fields if you pass in a hash.

message.fields to: 'Bob', from: 'Sally'
message.fields #=> { to: 'Bob', from: 'Sally' }
# File lib/outbox/message_fields.rb, line 175
def fields(new_fields = nil)
  if new_fields.nil?
    fields = {}
    self.class.fields.each do |field|
      fields[field] = public_send(field)
    end
    fields
  else
    self.fields = new_fields
  end
end
fields=(new_fields) click to toggle source

Assigns the values of the given hash.

message.to = 'Bob'
message.fields = { from: 'Sally' }
message.fields #=> { to: 'Bob', from: 'Sally' }
# File lib/outbox/message_fields.rb, line 192
def fields=(new_fields)
  new_fields.each do |field, value|
    public_send(field, value) if respond_to?(field)
  end
end
validate_fields() click to toggle source

Checks the current values of the fields and raises errors for any validation issues.

# File lib/outbox/message_fields.rb, line 200
def validate_fields
  self.class.required_fields.each do |field|
    value = public_send(field)
    if value.nil? || value.respond_to?(:empty?) && value.empty?
      raise Outbox::MissingRequiredFieldError, "Missing required field: #{field}"
    end
  end
end