Sha256: 0db92388e91c88fe7972bcc2026eceee5674bcca1dd2778ac1a293019dc84e13
Contents?: true
Size: 1.29 KB
Versions: 3
Compression:
Stored size: 1.29 KB
Contents
require "tsort" require "dry/view/exposure" module Dry module View class Exposures include TSort attr_reader :exposures def initialize(exposures = {}) @exposures = exposures end def key?(name) exposures.key?(name) end def [](name) exposures[name] end def each(&block) exposures.each(&block) end def add(name, proc = nil, **options) exposures[name] = Exposure.new(name, proc, options) end def import(name, exposure) exposures[name] = exposure.dup end def bind(obj) bound_exposures = exposures.each_with_object({}) { |(name, exposure), memo| memo[name] = exposure.bind(obj) } self.class.new(bound_exposures) end def locals(input) tsort.each_with_object({}) { |name, memo| memo[name] = self[name].(input, memo) if exposures.key?(name) }.each_with_object({}) { |(name, val), memo| memo[name] = val unless self[name].private? } end private def tsort_each_node(&block) exposures.each_key(&block) end def tsort_each_child(name, &block) self[name].dependency_names.each(&block) if exposures.key?(name) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-view-0.5.3 | lib/dry/view/exposures.rb |
dry-view-0.5.2 | lib/dry/view/exposures.rb |
dry-view-0.5.1 | lib/dry/view/exposures.rb |