Class: Matte::IncludeMixins

Inherits:
Object
  • Object
show all
Defined in:
lib/matte.rb,
lib/matte.rb

Overview

statically includes mixins in HTML.

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ IncludeMixins

Returns a new instance of IncludeMixins.



46
47
48
# File 'lib/matte.rb', line 46

def initialize options = {}
    @conf = options
end

Instance Method Details

#call(document) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/matte.rb', line 50

def call document
    Matte.find_all_sexps(document, [:matte, :placeholder]).each do |placeholder|
        placeholder_name = placeholder[2]
        body = [:multi]
        # include all mixins with same name
        Matte.find_all_sexps(document, [:matte, :mixin, placeholder_name]).each do |mixin|
            body << mixin[3]
            mixin.clear
            mixin << :multi
        end

        placeholder.clear
        placeholder.push :multi, body
    end

    # if there are any remaining mixins without corresponding placeholder, error
    raise Temple::InvalidExpression.new "found mixin without corresponding placeholder" unless Matte.find_all_sexps(document, [:matte, :mixin]).empty?
    
    document
end