class DefInitialize::Mixin
Public Class Methods
new(args_str, readers: :private, writers: nil)
click to toggle source
# File lib/def_initialize.rb, line 9 def initialize(args_str, readers: :private, writers: nil) accessors_options = { readers_mode: readers, writers_mode: writers } # Create empty method just to inspect its parameters. module_eval <<-CODE, __FILE__, __LINE__ + 1 def initialize(#{args_str}); end CODE parameters = instance_method(:initialize).parameters accessors, rows = [], [] parameters .each do |(_type, name)| next if !name || name.to_s.start_with?('_') accessors << ":#{name}" rows << "@#{name} = #{name}" end module_eval <<-CODE, __FILE__, __LINE__ + 1 def initialize(#{args_str}) #{rows.join("\n")} end #{AccessorsBuilder.build(accessors, accessors_options)} CODE end