class Service

Public Class Methods

call(**args) click to toggle source
# File lib/service.rb, line 6
def self.call(**args)
  new.validate_arguments(@required_args, args)
     .instance_params(args)
     .perform
end
require_args(*args) click to toggle source
# File lib/service.rb, line 2
def self.require_args(*args)
  @required_args = args
end

Public Instance Methods

instance_params(args) click to toggle source
# File lib/service.rb, line 26
def instance_params(args)
  args.each { |key, value| instance_variable_set("@#{key}", value) }

  self
end
validate_arguments(required_args, args) click to toggle source
# File lib/service.rb, line 12
def validate_arguments(required_args, args)
  missing_args = required_args&.map do |required_arg|
    required_arg unless args.include?(required_arg)
  end&.compact

  if missing_args.present?
    raise ArgumentError,
          "Required #{'param'.pluralize(missing_args.count)}
          missing in #{self.class.name}: #{missing_args.join(', ')}"
  end

  self
end