Sha256: 5876e6967597404147231f58f9a0ae727736d746f38f60dbcf5757c568210160

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module Dry::Initializer::Builders
  # @private
  class Initializer
    require_relative 'signature'
    require_relative 'attribute'

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

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

    private

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

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

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

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

    def params_lines
      @definitions.reject(&:option)
        .flat_map { |item| Attribute[item] }
        .map { |line| '  ' << line }
    end

    def options_lines
      @definitions.select(&:option)
        .flat_map { |item| Attribute[item] }
        .map { |line| '  ' << line }
    end

    def end_line
      'end'
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-initializer-3.0.4 lib/dry/initializer/builders/initializer.rb
dry-initializer-3.0.3 lib/dry/initializer/builders/initializer.rb