Sha256: 25bda9e5cf76e63993351ba434497758775bed4be79eb64b9f46755712e6b071
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
# frozen_string_literal: true module HoTModuLe class Fragment def initialize(fragment, attribute_bindings, html_module:) @fragment = fragment @attribute_bindings = attribute_bindings @html_module = html_module end # NOTE: for some reason, the Nokogiri traverse method yields node children first, then the # parent node. That doesn't work for our case. We want to go strictly in source order. So this # is our own implementation of that. def traverse(node, &block) yield(node) node.children.each { |child| traverse(child, &block) } end def process(fragment = @fragment) traverse(fragment) do |node| process_attribute_bindings(node) end end def process_attribute_bindings(node) node.attributes.each do |name, attr_node| @attribute_bindings.each do |attribute_binding| next unless attribute_binding.matcher.match?(name) break unless attribute_binding.method.(attribute: attr_node, node: node) end rescue Exception => e # rubocop:disable Lint/RescueException raise e.class, e.message.lines.first, ["#{@html_module}:#{attr_node.line}", *e.backtrace] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hot_module-1.0.0.alpha1 | lib/hot_module/fragment.rb |