class Dry::Types::Printer::Composition

@api private

Public Class Methods

new(printer, composition_class) click to toggle source
# File lib/dry/types/printer/composition.rb, line 9
def initialize(printer, composition_class)
  @printer = printer
  @composition_class = composition_class
  freeze
end

Public Instance Methods

visit(composition) { |"#{composition_name}<#{constructors}#{opts}>"| ... } click to toggle source
# File lib/dry/types/printer/composition.rb, line 15
def visit(composition)
  visit_constructors(composition) do |constructors|
    @printer.visit_options(composition.options, composition.meta) do |opts|
      yield "#{@composition_class.composition_name}<#{constructors}#{opts}>"
    end
  end
end

Private Instance Methods

visit_constructor(type, &block) click to toggle source
# File lib/dry/types/printer/composition.rb, line 33
def visit_constructor(type, &block)
  case type
  when @composition_class
    visit_constructors(type, &block)
  else
    @printer.visit(type, &block)
  end
end
visit_constructors(composition) { |"#{left} #{operator} #{right}"| ... } click to toggle source
# File lib/dry/types/printer/composition.rb, line 25
def visit_constructors(composition)
  visit_constructor(composition.left) do |left|
    visit_constructor(composition.right) do |right|
      yield "#{left} #{@composition_class.operator} #{right}"
    end
  end
end