class Diecut::TemplateReducer
Public Class Methods
new(tokens)
click to toggle source
# File lib/diecut/template-reducer.rb, line 3 def initialize(tokens) @tokens = tokens end
Public Instance Methods
fields()
click to toggle source
# File lib/diecut/template-reducer.rb, line 7 def fields process([], [@tokens]) if @fields.nil? @fields.keys end
leaf_fields()
click to toggle source
# File lib/diecut/template-reducer.rb, line 27 def leaf_fields leaves_and_nodes if @leaf_fields.nil? return @leaf_fields end
leaves_and_nodes()
click to toggle source
# File lib/diecut/template-reducer.rb, line 37 def leaves_and_nodes @node_fields, @leaf_fields = fields.partition.with_index do |field, idx| fields.drop(idx + 1).any? do |other| field.zip(other).all? {|l,r| l==r} end end end
node_fields()
click to toggle source
# File lib/diecut/template-reducer.rb, line 32 def node_fields leaves_and_nodes if @node_fields.nil? return @node_fields end
partials()
click to toggle source
# File lib/diecut/template-reducer.rb, line 17 def partials process([], [@tokens]) if @partials.nil? @partials.keys end
process(prefix, tokens)
click to toggle source
# File lib/diecut/template-reducer.rb, line 56 def process(prefix, tokens) @fields ||= {} @partials ||= {} @unknown ||= [] @sections ||= {} tokens.each do |token| case token[0] when :multi process(prefix, token[1..-1]) when :static when :mustache case token[1] when :etag, :utag process(prefix, [token[2]]) when :section, :inverted_section @sections[prefix + token[2][2]] = true process(prefix, [token[2]]) process(prefix + token[2][2], [token[4]]) when :partial @partials[[token[2], prefix]] = true when :fetch @fields[prefix + token[2]] = true else @unknown << token end else @unknown << token end end end
sections()
click to toggle source
# File lib/diecut/template-reducer.rb, line 12 def sections process([], [@tokens]) if @sections.nil? @sections.keys end
unknown()
click to toggle source
# File lib/diecut/template-reducer.rb, line 22 def unknown process([], [@tokens]) if @unknown.nil? @unknown end
validate()
click to toggle source
XXX Used as a section and as a field is different from used as a field and as parent of a field. Tricky tricky
# File lib/diecut/template-reducer.rb, line 48 def validate not_sections = node_fields.find_all {|node| !sections.include?(node)} unless not_sections.empty? warn "These fields are referenced directly, and as the parent of another field:\n" + not_sections.map{|sec| sec.join(".")}.join("\n") end end