liquid_interpolatable.rb 1.4KB

    module LiquidInterpolatable extend ActiveSupport::Concern def interpolate_options(options, payload) case options.class.to_s when 'String' interpolate_string(options, payload) when 'ActiveSupport::HashWithIndifferentAccess', 'Hash' duped_options = options.dup duped_options.each do |key, value| duped_options[key] = interpolate_options(value, payload) end when 'Array' options.collect do |value| interpolate_options(value, payload) end end end def interpolate_string(string, payload) Liquid::Template.parse(string).render!(payload, registers: {agent: self}) end require 'uri' # Percent encoding for URI conforming to RFC 3986. # Ref: http://tools.ietf.org/html/rfc3986#page-12 module Filters def uri_escape(string) CGI::escape string end end Liquid::Template.register_filter(LiquidInterpolatable::Filters) module Tags class Credential < Liquid::Tag def initialize(tag_name, name, tokens) super @credential_name = name.strip end def render(context) credential = context.registers[:agent].credential(@credential_name) raise "No user credential named '#{@credential_name}' defined" if credential.nil? credential end end end Liquid::Template.register_tag('credential', LiquidInterpolatable::Tags::Credential) end