Sha256: 44b3e0794d360ea970e3f79bcd94ec0344f50e974d9a514fdf37b8d5831705d9

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

module Outbox
  module Messages
    class Base
      include MessageClients
      include MessageFields

      # Make a new message. Every message type can be created using a hash,
      # block, or direct assignment.
      #
      #   message = Email.new(
      #     to: 'someone@example.com',
      #     from: 'company@example.com'
      #   )
      #   message = Email.new do
      #     to 'someone@example.com'
      #     from 'company@example.com'
      #   end
      #   message = Email.new
      #   message.to = 'someone@example.com'
      #   message.from = 'company@example.com'
      def initialize(fields = nil, &block)
        @fields = {}
        if self.class.default_client
          @client = self.class.default_client.dup
        else
          @client = nil
        end

        self.fields = self.class.defaults

        if block_given?
          instance_eval(&block)
        else
          self.fields = fields unless fields.nil?
        end
      end

      # Sets the 'audience' for this message. All message types must implement
      # this method. By default, this is an alias for a 'to' field if present.
      def audience=(audience)
        self.to = audience if self.respond_to?(:to=)
      end

      # Sets the 'body' for this message. All message types must implement
      # this method.
      def body=(body)
        raise NotImplementedError, 'Subclasses must implement a body= method'
      end

      # Validates the current message and delivers the message using the
      # defined client.
      def deliver(audience = nil)
        self.audience = audience if audience
        validate_fields
        client.deliver(self)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
outbox-0.2.1 lib/outbox/messages/base.rb
outbox-0.2.0 lib/outbox/messages/base.rb