module NliPipeline::AbstractUtil

Abstract Utilities for handling class instantiation similar to open struct, but enforces some arguments

Public Class Methods

included(parent) click to toggle source

override include to automatically extend classmethods i.e. functions in the module ClassMethods becom class methods when the AbstractUtil is included

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 11
def self.included(parent)
  parent.extend(ClassMethods)
end

Public Instance Methods

add_attrs(**kwargs) click to toggle source

keys become instance variable names value is set using corresponding value in kwargs all instance variables have getters, but not setters add attributes to class

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 28
def add_attrs(**kwargs)
  kwargs.each do |k, v|
    instance_variable_set("@#{k}", v)
    self.class.class_eval { attr_reader k.to_sym }
  end
  puts(to_s.yellow) if @debug
end
drop_forbidden_args_message(**kwargs) click to toggle source

support method for init_with_attrs to warn user about unused kwargs

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 37
def drop_forbidden_args_message(**kwargs)
  forbidden_args = self.class.get_forbidden_kwargs(**kwargs)
  show_warning = !forbidden_args.empty? && kwargs[:debug]
  puts("Warning, dropping args #{forbidden_args} to #{self.class}".red) if show_warning
end
init_with_attrs(**kwargs) click to toggle source

similar to openstruct initialize assigns all keyword arguments as instance variables but uses attr_reader, not attr_accessor

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 46
def init_with_attrs(**kwargs)
  sanitized_args = self.class.get_allowed_kwargs(**kwargs)
  drop_forbidden_args_message(**kwargs)
  unless self.class.required_args?(**kwargs)
    # raise SystemWrapper::ConfigError.new()
    msg = "#{self.class}.#{caller_locations(1, 1)[0].label}"\
      " requires arguments: #{self.class.required_args}"
    raise ArgumentError, msg
  end
  # merge passed args with default values for args
  merged_args = self.class.supported_args.merge(sanitized_args)
  add_attrs(**merged_args)
end
raise_unless_all(**kwargs) click to toggle source

@raise [ArgumentError] unless all values in kwargs are truthy @return [Boolean]

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 17
def raise_unless_all(**kwargs)
  message = "All #{kwargs} must be truthy to use"\
    " #{self.class}.#{caller_locations(1, 1)[0].label}"
  raise ArgumentError, message unless kwargs.values.all?
  true
end
to_s() click to toggle source

override default to_s for nice formatting of instance vars

# File lib/nli_pipeline/abstract_util/init_attrs.rb, line 61
def to_s
  format_instance_vars = lambda do |x, y|
    x + format("\n%<key>-30s: %<value>s", key: y, value: instance_variable_get(y.to_sym))
  end
  vars = instance_variables.reduce('', &format_instance_vars)
  "\n#{self.class} config#{vars}\n"
end