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