class Dry::View::Exposures

@api private

Attributes

exposures[R]

Public Class Methods

new(exposures = {}) click to toggle source
# File lib/dry/view/exposures.rb, line 16
def initialize(exposures = {})
  @exposures = exposures
end

Public Instance Methods

[](name) click to toggle source
# File lib/dry/view/exposures.rb, line 24
def [](name)
  exposures[name]
end
add(name, proc = nil, **options) click to toggle source
# File lib/dry/view/exposures.rb, line 32
def add(name, proc = nil, **options)
  exposures[name] = Exposure.new(name, proc, **options)
end
bind(obj) click to toggle source
# File lib/dry/view/exposures.rb, line 40
def bind(obj)
  bound_exposures = exposures.each_with_object({}) { |(name, exposure), memo|
    memo[name] = exposure.bind(obj)
  }

  self.class.new(bound_exposures)
end
call(input) { |value, exposure| ... } click to toggle source
# File lib/dry/view/exposures.rb, line 48
def call(input)
  # rubocop:disable Style/MultilineBlockChain
  tsort.each_with_object({}) { |name, memo|
    next unless (exposure = self[name])

    value = exposure.(input, memo)
    value = yield(value, exposure) if block_given?

    memo[name] = value
  }.each_with_object({}) { |(name, value), memo|
    memo[name] = value unless self[name].private?
  }
  # rubocop:enable Style/MultilineBlockChain
end
each(&block) click to toggle source
# File lib/dry/view/exposures.rb, line 28
def each(&block)
  exposures.each(&block)
end
import(name, exposure) click to toggle source
# File lib/dry/view/exposures.rb, line 36
def import(name, exposure)
  exposures[name] = exposure.dup
end
key?(name) click to toggle source
# File lib/dry/view/exposures.rb, line 20
def key?(name)
  exposures.key?(name)
end

Private Instance Methods

tsort_each_child(name, &block) click to toggle source
# File lib/dry/view/exposures.rb, line 69
def tsort_each_child(name, &block)
  self[name].dependency_names.each(&block) if exposures.key?(name)
end
tsort_each_node(&block) click to toggle source
# File lib/dry/view/exposures.rb, line 65
def tsort_each_node(&block)
  exposures.each_key(&block)
end