Sha256: af821b5c9598c4a3e9a0847b7427a8228cc634a0b2e0e9c26854ed516fe54b8f

Contents?: true

Size: 792 Bytes

Versions: 3

Compression:

Stored size: 792 Bytes

Contents

# frozen_string_literal: true

require "dry/configurable/setting"
require "dry/configurable/settings"

module Dry
  module Configurable
    # Setting compiler used internally by the DSL
    #
    # @api private
    class Compiler
      def call(ast)
        Settings.new.tap do |settings|
          ast.each do |node|
            settings << visit(node)
          end
        end
      end

      # @api private
      def visit(node)
        type, rest = node
        public_send(:"visit_#{type}", rest)
      end

      # @api private
      def visit_setting(node)
        name, opts = node
        Setting.new(name, **opts)
      end

      # @api private
      def visit_nested(node)
        parent, children = node
        visit(parent).nested(call(children))
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dry-configurable-0.15.0 lib/dry/configurable/compiler.rb
dry-configurable-0.14.0 lib/dry/configurable/compiler.rb
dry-configurable-0.13.0 lib/dry/configurable/compiler.rb