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