Module: Outbox::MessageFields::ClassMethods
- Defined in:
- lib/outbox/message_fields.rb
Instance Method Summary collapse
-
#defaults(defaults = nil) ⇒ Object
Sets default values for defined fields.
-
#field(name, options = {}) ⇒ Object
Defines a ‘field’ which is a point of data for this type of data.
-
#fields(*names) ⇒ Object
Returns the defined fields for this message type.
-
#required_fields(*names) ⇒ Object
(also: #required_field)
Returns an array of the required fields for a message type.
Instance Method Details
#defaults(defaults = nil) ⇒ Object
Sets default values for defined fields.
Email.defaults from: '[email protected]'
= Email.new
.from #=> '[email protected]'
13 14 15 16 17 18 19 20 21 |
# File 'lib/outbox/message_fields.rb', line 13 def defaults(defaults = nil) @defaults ||= {} if defaults.nil? @defaults else @defaults.merge!(defaults) end end |
#field(name, options = {}) ⇒ Object
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
= SomeMessageType.new do
to 'Bob'
end
.to #=> 'Bob'
.to = 'John'
.to #=> 'John'
.to = nil
.validate_fields #=> raises Outbox::MissingRequiredFieldError
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/outbox/message_fields.rb', line 84 def field(name, = {}) name = name.to_sym = Outbox::Accessor.new() fields.push(name) required_fields.push(name) if [:required] unless [:accessor] == false define_field_reader(name) unless [:reader] == false define_field_writer(name) unless [:writer] == false end end |
#fields(*names) ⇒ Object
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
= SomeMessageType.new do
to 'Bob'
from 'John'
end
.to #=> 'Bob'
.from #=> 'John'
.from = nil
.validate_fields #=> raises Outbox::MissingRequiredFieldError
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/outbox/message_fields.rb', line 46 def fields(*names) if names.empty? @fields ||= [] else = names.last.is_a?(Hash) ? names.pop : {} names.flatten.each do |name| field(name, ) end end end |
#required_fields(*names) ⇒ Object Also known as: required_field
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]
111 112 113 114 115 116 117 118 119 120 |
# File 'lib/outbox/message_fields.rb', line 111 def required_fields(*names) if names.empty? @required_fields ||= [] else = names.last.is_a?(Hash) ? names.pop : {} [:required] = true names << fields(*names) end end |