class Heartwood::ServiceObject::Base

Public Class Methods

attr_with_default(name, default_value) click to toggle source
# File lib/heartwood/service_object/base.rb, line 42
def self.attr_with_default(name, default_value)
  attr_accessor name
  attrs_with_defaults << [name, default_value]
end
attrs_with_defaults() click to toggle source

—————————————- Attributes With Default Values

# File lib/heartwood/service_object/base.rb, line 38
def self.attrs_with_defaults
  @attrs_with_defaults ||= []
end
call(options = {}) click to toggle source

—————————————- Base Calling Methods

# File lib/heartwood/service_object/base.rb, line 49
def self.call(options = {})
  new(options).call
end
new(options = {}) click to toggle source
# File lib/heartwood/service_object/base.rb, line 5
def initialize(options = {})
  verify_options(options)
  process_options(options)
  process_required_attrs(options)
  process_attrs_with_defaults(options)
end
optional_attr(*names) click to toggle source
# File lib/heartwood/service_object/base.rb, line 30
def self.optional_attr(*names)
  attr_accessor(*names)
  optional_attrs << names
  optional_attrs.flatten!.uniq!
end
optional_attrs() click to toggle source

—————————————- Optional Attributes

# File lib/heartwood/service_object/base.rb, line 26
def self.optional_attrs
  @optional_attrs ||= []
end
required_attr(*names) click to toggle source
# File lib/heartwood/service_object/base.rb, line 18
def self.required_attr(*names)
  attr_accessor(*names)
  required_attrs << names
  required_attrs.flatten!.uniq!
end
required_attrs() click to toggle source

—————————————- Required Attributes

# File lib/heartwood/service_object/base.rb, line 14
def self.required_attrs
  @required_attrs ||= []
end

Public Instance Methods

call() click to toggle source
# File lib/heartwood/service_object/base.rb, line 53
def call
  raise 'The call method is missing in the service object.'
end

Private Instance Methods

process_attrs_with_defaults(_options) click to toggle source
# File lib/heartwood/service_object/base.rb, line 69
def process_attrs_with_defaults(_options)
  self.class.attrs_with_defaults.each do |name, default_value|
    send("#{name}=", default_value) if send(name).blank?
  end
end
process_options(options) click to toggle source
# File lib/heartwood/service_object/base.rb, line 75
def process_options(options)
  options.each do |name, value|
    begin
      send("#{name}=", value) if send(name).blank?
    rescue NoMethodError
      raise "Option not permitted: #{name}"
    end
  end
end
process_required_attrs(_options) click to toggle source

—————————————- Private Methods

# File lib/heartwood/service_object/base.rb, line 61
def process_required_attrs(_options)
  self.class.required_attrs.each do |name|
    if send(name).nil?
      raise ArgumentError, "Missing required option: #{name}"
    end
  end
end
verify_options(options) click to toggle source
# File lib/heartwood/service_object/base.rb, line 85
def verify_options(options)
  return true if options.is_a?(Hash)
  raise ArgumentError, 'Must pass options as a hash.'
end