class Selfies::SelfInit
Generates an accessor or reader for each passed variable
Public Class Methods
access_variables(class_name, accessor, variable_names)
click to toggle source
# File lib/selfies/self_init.rb, line 36 def self.access_variables(class_name, accessor, variable_names) class_name.send( (accessor ? :attr_accessor : :attr_reader), *variable_names ) end
argument_guard(all_variables, arguments)
click to toggle source
# File lib/selfies/self_init.rb, line 43 def self.argument_guard(all_variables, arguments) raise_argumnet_for(arguments) unless correct_argument_count?(all_variables, arguments) end
correct_argument_count?(all_variables, arguments)
click to toggle source
# File lib/selfies/self_init.rb, line 47 def self.correct_argument_count?(all_variables, arguments) expected, given = arguments final_variable = all_variables.last correct_argument_count = given == expected if final_variable.is_a? Hash correct_argument_count ||= given == expected - 1 elsif final_variable == :args at_least = all_variables[0..all_variables.index(:args)].count correct_argument_count ||= given >= at_least end correct_argument_count end
decouple(variable)
click to toggle source
# File lib/selfies/self_init.rb, line 61 def self.decouple(variable) return [variable, nil] unless variable.is_a? Hash variable.keys + variable.values end
generate(class_name, accessor, *variables)
click to toggle source
# File lib/selfies/self_init.rb, line 6 def self.generate(class_name, accessor, *variables) return false unless variables.any? class_name.class_eval do variable_names = SelfInit.variable_names(variables) SelfInit.access_variables(class_name, accessor, variable_names) define_method(:initialize) do |*args| SelfInit.argument_guard(variables, [variable_names.count, args.count]) variables.each_with_index do |variable, index| variable_name, default = SelfInit.decouple(variable) instance_variable_set( "@#{variable_name}", SelfInit.get_value(variable_name, args, index) || default ) end end end end
get_value(variable_name, args, index)
click to toggle source
# File lib/selfies/self_init.rb, line 28 def self.get_value(variable_name, args, index) if variable_name == :args args[index..-1] else args[index] end end
raise_argumnet_for(arguments)
click to toggle source
# File lib/selfies/self_init.rb, line 73 def self.raise_argumnet_for(arguments) expected, given = arguments raise(ArgumentError, "wrong number of arguments (given #{given}, expected #{expected})") end
variable_names(variables)
click to toggle source
# File lib/selfies/self_init.rb, line 67 def self.variable_names(variables) variables.collect do |variable| variable.is_a?(Hash) ? variable.keys.first : variable end end