class EacRubyUtils::CommonConstructor
def args_count
def args_count (args_count_min..args_count_max) end
def args_count_max
def args_count_max args.count end
def args_count_min
def args_count_min args.count - default_values.count end
def default_values
def default_values options[:default] || [] end
def initialize(*args, &after_set_block)
def initialize(*args, &after_set_block) args_processed = self.class.parse_args_options(args) @args = args_processed.args @options = args_processed.options @after_set_block = after_set_block end
def parse_arg_options_process_arg(result, arg)
def parse_arg_options_process_arg(result, arg) if arg.is_a?(::Hash) result.options = arg true else result.args << arg false end end
def parse_args_options(args)
def parse_args_options(args) result = ::OpenStruct.new(args: [], options: {}) options_reached = false args.each do |arg| raise "Options reached and there is more arguments (Arguments: #{args})" if options_reached options_reached = parse_arg_options_process_arg(result, arg) end result end
def setup_class(klass)
def setup_class(klass) setup_class_attr_readers(klass) setup_class_attr_writers(klass) setup_class_initialize(klass) end
def setup_class_attr_readers(klass)
def setup_class_attr_readers(klass) klass.send(:attr_reader, *args) klass.send(:public, *args) end
def setup_class_attr_writers(klass)
def setup_class_attr_writers(klass) klass.send(:attr_writer, *args) klass.send(:private, *args.map { |a| "#{a}=" }) end
def setup_class_initialize(klass)
def setup_class_initialize(klass) common_constructor = self klass.include(::ActiveSupport::Callbacks) klass.define_callbacks :initialize klass.send(:define_method, :initialize) do |*args| Initialize.new(common_constructor, args, self).run end end