class Hanami::View::Exposures
@api private @since 2.1.0
Attributes
exposures[R]
@api private @since 2.1.0
Public Class Methods
new(exposures = {})
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 20 def initialize(exposures = {}) @exposures = exposures end
Public Instance Methods
[](name)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 32 def [](name) exposures[name] end
add(name, proc = nil, **options)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 44 def add(name, proc = nil, **options) exposures[name] = Exposure.new(name, proc, **options) end
bind(obj)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 56 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
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 66 def call(input) # Avoid performance cost of tsorting when we don't need it names = if exposures.values.any?(&:dependencies?) # TODO: this sholud be cachable at time of `#add` tsort else exposures.keys end names .each_with_object({}) { |name, memo| next unless (exposure = self[name]) value = exposure.(input, memo) value = yield(value, exposure) if block_given? memo[name] = value } .tap { |hsh| names.each do |key| hsh.delete(key) if self[key].private? end } end
each(&block)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 38 def each(&block) exposures.each(&block) end
import(name, exposure)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 50 def import(name, exposure) exposures[name] = exposure.dup end
key?(name)
click to toggle source
@api private @since 2.1.0
# File lib/hanami/view/exposures.rb, line 26 def key?(name) exposures.key?(name) end
Private Instance Methods
tsort_each_child(name, &block)
click to toggle source
# File lib/hanami/view/exposures.rb, line 97 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/hanami/view/exposures.rb, line 93 def tsort_each_node(&block) exposures.each_key(&block) end