class Hammy::AbstractServiceObject

Public Class Methods

build(*args, **kargs) click to toggle source
# File lib/hammy/abstract_service_object.rb, line 6
def self.build(*args, **kargs)
  new(*args, **kargs).klass
end
new(*args, **kargs) click to toggle source
# File lib/hammy/abstract_service_object.rb, line 10
def initialize(*args, **kargs)
  @args = args
  @kargs = kargs
end

Public Instance Methods

initial_instance_variables(_args, _kargs) click to toggle source
# File lib/hammy/abstract_service_object.rb, line 64
def initial_instance_variables(_args, _kargs)
  {}
end
klass() click to toggle source
Calls superclass method
# File lib/hammy/abstract_service_object.rb, line 15
def klass
  this = self

  Class.new do
    eigenclass = class << self; self; end
    eigenclass.class_eval do
      define_method(:method_missing) do |method, *args, **kargs, &block|
        return super(method, *args, **kargs, &block) unless this.valid_action?(self, method)

        new(args, kargs).send(method)
      end

      define_method(:respond_to_missing?) do |method, include_private = false|
        this.valid_action?(self, method) || super(method, include_private)
      end
    end

    define_method(:initialize) do |args, kargs|
      this.validate_args!(args, kargs)

      this.initial_instance_variables(args, kargs).each do |var, value|
        instance_variable_set(var, value)
      end
    end

    this.public_getters.each do |getter|
      attr_reader(getter)
    end

    protected

    this.protected_getters.each do |getter|
      attr_reader(getter)
    end

    private

    this.private_getters.each do |getter|
      attr_reader(getter)
    end
  end
end
private_getters() click to toggle source
# File lib/hammy/abstract_service_object.rb, line 76
def private_getters
  []
end
protected_getters() click to toggle source
# File lib/hammy/abstract_service_object.rb, line 72
def protected_getters
  []
end
public_getters() click to toggle source
# File lib/hammy/abstract_service_object.rb, line 68
def public_getters
  []
end
valid_action?(klass, method) click to toggle source
# File lib/hammy/abstract_service_object.rb, line 58
def valid_action?(klass, method)
  klass.instance_methods(false).include?(method)
end
validate_args!(args, kargs) click to toggle source
# File lib/hammy/abstract_service_object.rb, line 62
def validate_args!(args, kargs); end