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