module Light::Services::Parameters

Attributes

parameters[RW]
parameters[RW]

Getters

Public Class Methods

included(base) click to toggle source
# File lib/light/services/parameters.rb, line 6
def self.included(base)
  base.extend ClassMethods
  base.class_eval do
    class << self
      attr_accessor :parameters
    end
  end
end

Private Instance Methods

all_parameters() click to toggle source
# File lib/light/services/parameters.rb, line 34
def all_parameters
  return @_all_parameters if defined?(@_all_parameters)
  @_all_parameters = self.class.ancestors.select { |klass| klass.ancestors.include?(::Light::Services::Base) }
                         .map(&:parameters).compact.flatten.uniq
end
generate_parameters_methods() click to toggle source
# File lib/light/services/parameters.rb, line 70
def generate_parameters_methods
  parameters.keys.each do |parameter_name|
    define_singleton_method parameter_name do
      parameters[parameter_name]
    end

    define_singleton_method "#{parameter_name}=" do |value|
      parameters[parameter_name] = value
    end
  end
end
initialize_params() click to toggle source
# File lib/light/services/parameters.rb, line 23
def initialize_params
  self.parameters = {}

  all_parameters.each do |options|
    validate_parameter(options)
    store_parameter(options)
  end

  generate_parameters_methods
end
parameter_required?(options) click to toggle source
# File lib/light/services/parameters.rb, line 50
def parameter_required?(options)
  !args.key?(options[:name]) && options[:required] && !options[:allow_nil]
end
parameter_wrong_type?(options) click to toggle source
# File lib/light/services/parameters.rb, line 54
def parameter_wrong_type?(options)
  value = args[options[:name]]

  wrong_type    = options[:type]&.none? { |type| value.is_a?(type) }
  not_allow_nil = !options[:allow_nil] || (options[:allow_nil] && !value.nil?)

  wrong_type && not_allow_nil
end
store_parameter(options) click to toggle source
# File lib/light/services/parameters.rb, line 63
def store_parameter(options)
  parameter_name = options[:name]
  parameter_value = args[parameter_name]

  parameters[parameter_name] = parameter_value
end
validate_parameter(options) click to toggle source
# File lib/light/services/parameters.rb, line 40
def validate_parameter(options)
  if parameter_required?(options)
    raise Light::Services::ParamRequired, "Parameter \"#{options[:name]}\" is required"
  end

  return unless parameter_wrong_type?(options)

  raise Light::Services::ParamType, "Type of \"#{options[:name]}\" must be \"#{options[:type]}\""
end