_plugins/brooklyn_jekyll_util.rb (85 lines of code) (raw):

# # 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)