module Outbox::MessageFields::ClassMethods
Constants
- DYNAMIC_MODULE_NAME
Public Instance Methods
defaults(defaults = nil)
click to toggle source
Sets default values for defined fields.
Email.defaults from: 'bob@example.com' message = Email.new message.from #=> 'bob@example.com'
# File lib/outbox/message_fields.rb, line 16 def defaults(defaults = nil) @defaults ||= {} @defaults.merge!(defaults) if defaults @defaults end
Also aliased as: defaults=
field(name, options = {})
click to toggle source
Defines a ‘field’ which is a point of data for this type of data. Optionally you can set it to be required, or wether or not you want accessors defined for you. If you define your own accessors, make sure the reader also accepts a value that can be set, so it’ll work with the block definition.
class SomeMessageType < Outbox::Messages::base field :to, required: true field :body, accessor: false def body(value = nil) value ? self.body = value : @body end def body=(value) @body = parse_body(value) end end message = SomeMessageType.new do to 'Bob' end message.to #=> 'Bob' message.to = 'John' message.to #=> 'John' message.to = nil message.validate_fields #=> raises Outbox::MissingRequiredFieldError
# File lib/outbox/message_fields.rb, line 84 def field(name, options = {}) name = name.to_sym options = Outbox::Accessor.new(options) fields.push(name) required_fields.push(name) if options[:required] unless options[:accessor] == false define_field_reader(name) unless options[:reader] == false define_field_writer(name) unless options[:writer] == false end end
fields(*names)
click to toggle source
Returns the defined fields for this message type.
class SomeMessageType < Outbox::Messages::Base field :to field :from end SomeMessageType.fields #=> [:to, :from]
Also allows you to define multiple fields at once.
class SomeMessageType < Outbox::Messages::Base fields :to, :from, required: true end message = SomeMessageType.new do to 'Bob' from 'John' end message.to #=> 'Bob' message.from #=> 'John' message.from = nil message.validate_fields #=> raises Outbox::MissingRequiredFieldError
# File lib/outbox/message_fields.rb, line 46 def fields(*names) if names.empty? @fields ||= [] else options = names.last.is_a?(Hash) ? names.pop : {} names.flatten.each do |name| field(name, options) end end end
required_fields(*names)
click to toggle source
Returns an array of the required fields for a message type.
class SomeMessageType < Outbox::Messages::Base field :to, required: true fields :from, :subject end SomeMessageType.required_fields #=> [:to]
Also can be used an alias for defining fields that are required.
class SomeMessageType < Outbox::Messages::Base required_fields :to, :from end SomeMessageType.required_fields #=> [:to, :from]
# File lib/outbox/message_fields.rb, line 111 def required_fields(*names) if names.empty? @required_fields ||= [] else options = names.last.is_a?(Hash) ? names.pop : {} options[:required] = true names << options fields(*names) end end
Also aliased as: required_field
Protected Instance Methods
define_field_reader(name)
click to toggle source
# File lib/outbox/message_fields.rb, line 125 def define_field_reader(name) define_inheritable_method(DYNAMIC_MODULE_NAME, name) do |value = nil| if value.nil? @fields[name] else @fields[name] = value end end end
define_field_writer(name)
click to toggle source
# File lib/outbox/message_fields.rb, line 135 def define_field_writer(name) define_inheritable_method(DYNAMIC_MODULE_NAME, "#{name}=") do |value| @fields[name] = value end end