blob: fd3688d9c6688fb8a9184c28c6918e96604eeeea [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# useful tags:
# printing
# puts message
# putv variable_to_print_raw
# putp variable_to_pretty_print
# eval and control flow
# set_hash_entry hash key variable_to_set # because sometimes jekyll eval order is different
# fail message # to fail with a message
# stack manipulation:
# push stack x # pushs x to stack and clears x
# pop stack x # pops from stack into x
# useful e.g. in recursive include calls where x might overwritten
require 'pp'
module BrooklynJekyllUtil
class PutsTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
puts "#{@text}"
end
end
class PutvTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
puts "#{@text}: #{context[@text]}"
end
end
class PutpTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
puts "#{@text}:"
PP.pp(context[@text])
nil
end
end
class SetHashEntryTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
args = @text.split(/\W+/)
raise "Need 3 args, the hash, the key, and the var to set" unless args.length == 3
# puts "getting #{args[0]}['#{args[1]}']"
# PP.pp(context[args[0]])
# PP.pp(context[args[0]][args[1]])
context[args[2]] = context[args[0]][args[1]]
nil
end
end
class FailTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
raise "Fail#{@text.length>0 ? ": #{@text}" : ""}"
end
end
class PushTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
args = @text.split(/\W+/)
raise "Need 2 args, the stack and the var" unless args.length == 2
context[args[0]] = [] unless context[args[0]]
context[args[0]].push(context[args[1]])
context[args[1]] = nil
end
end
class PopTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
args = @text.split(/\W+/)
raise "Need 2 args, the stack and the var" unless args.length == 2
context[args[1]] = context[args[0]].pop();
nil
end
end
end
Liquid::Template.register_tag('puts', BrooklynJekyllUtil::PutsTag)
Liquid::Template.register_tag('putv', BrooklynJekyllUtil::PutvTag)
Liquid::Template.register_tag('putp', BrooklynJekyllUtil::PutpTag)
Liquid::Template.register_tag('set_hash_entry', BrooklynJekyllUtil::SetHashEntryTag)
Liquid::Template.register_tag('fail', BrooklynJekyllUtil::FailTag)
Liquid::Template.register_tag('push', BrooklynJekyllUtil::PushTag)
Liquid::Template.register_tag('pop', BrooklynJekyllUtil::PopTag)