Aucune description http://j1x-huginn.herokuapp.com

liquid_interpolatable.rb 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. module LiquidInterpolatable
  2. extend ActiveSupport::Concern
  3. def interpolate_options(options, payload = {})
  4. case options
  5. when String
  6. interpolate_string(options, payload)
  7. when ActiveSupport::HashWithIndifferentAccess, Hash
  8. options.inject(ActiveSupport::HashWithIndifferentAccess.new) { |memo, (key, value)| memo[key] = interpolate_options(value, payload); memo }
  9. when Array
  10. options.map { |value| interpolate_options(value, payload) }
  11. else
  12. options
  13. end
  14. end
  15. def interpolated_options(payload = {})
  16. key = [options, payload]
  17. @interpolated_options_cache ||= {}
  18. @interpolated_options_cache[key] ||= interpolate_options(options, payload)
  19. @interpolated_options_cache[key]
  20. end
  21. def interpolate_string(string, payload)
  22. Liquid::Template.parse(string).render!(payload, registers: {agent: self})
  23. end
  24. require 'uri'
  25. # Percent encoding for URI conforming to RFC 3986.
  26. # Ref: http://tools.ietf.org/html/rfc3986#page-12
  27. module Filters
  28. def uri_escape(string)
  29. CGI::escape string
  30. end
  31. end
  32. Liquid::Template.register_filter(LiquidInterpolatable::Filters)
  33. module Tags
  34. class Credential < Liquid::Tag
  35. def initialize(tag_name, name, tokens)
  36. super
  37. @credential_name = name.strip
  38. end
  39. def render(context)
  40. credential = context.registers[:agent].credential(@credential_name)
  41. raise "No user credential named '#{@credential_name}' defined" if credential.nil?
  42. credential
  43. end
  44. end
  45. end
  46. Liquid::Template.register_tag('credential', LiquidInterpolatable::Tags::Credential)
  47. end