Sha256: b94d4b51637f7f69e6ae52588755ed383ed4f14109180dee952059c1e87893cf

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module Dry
  module Initializer
    module 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 { Attribute[_1] }.map { "  #{_1}" }
        end

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

        def end_line
          "end"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-initializer-3.2.0 lib/dry/initializer/builders/initializer.rb
dry-initializer-3.1.1 lib/dry/initializer/builders/initializer.rb