class Dry::Initializer::Builders::Initializer

@private

def self.[](config)

def self.[](config)
  new(config).call
end

def call

def call
  lines.flatten.compact.join("\n")
end

def define_line

def define_line
  "private def __dry_initializer_initialize__(#{Signature[@config]})"
end

def end_line

def end_line
  "end"
end

def initialize(config)

def initialize(config)
  @config = config
  @definitions = config.definitions.values
end

def lines

def lines
  [
    undef_line,
    define_line,
    params_lines,
    options_lines,
    end_line
  ]
end

def options_lines

def options_lines
  @definitions.select(&:option).flat_map { Attribute[_1] }.map { "  #{_1}" }
end

def params_lines

def params_lines
  @definitions.reject(&:option).flat_map { Attribute[_1] }.map { "  #{_1}" }
end

def undef_line

def undef_line
  "undef :__dry_initializer_initialize__" \
    " if private_method_defined? :__dry_initializer_initialize__"
end