Sha256: 121d9fb29fd2048dc03a119f5a32f03e6153d8c3d025ca7fe50e9b330127195a
Contents?: true
Size: 1.4 KB
Versions: 14
Compression:
Stored size: 1.4 KB
Contents
# frozen_string_literal: true # Tag for injecting view helpers. Example tag: # {{cms:helper method_name, param_a, param_b, foo: bar}} # This expands into something like this: # <%= method_name("param_a", "param_b", "foo" => "bar") %> # Whitelist is can be used to control what helpers are available. # By default there's a blacklist of methods that should not be called. # class ComfortableMexicanSofa::Content::Tag::Helper < ComfortableMexicanSofa::Content::Tag BLACKLIST = %w[eval class_eval instance_eval render].freeze attr_reader :method_name def initialize(context:, params: [], source: nil) super @method_name = params.shift unless @method_name.present? raise Error, "Missing method name for helper tag" end end # we output erb into rest of the content def allow_erb? true end def content helper_params = params.map do |p| case p when Hash format("%<arg>s", arg: p) else format("%<arg>p", arg: p) end end.join(",") "<%= #{method_name}(#{helper_params}) %>" end def render whitelist = ComfortableMexicanSofa.config.allowed_helpers if whitelist.is_a?(Array) content if whitelist.map!(&:to_s).member?(method_name) else content unless BLACKLIST.member?(method_name) end end end ComfortableMexicanSofa::Content::Renderer.register_tag( :helper, ComfortableMexicanSofa::Content::Tag::Helper )
Version data entries
14 entries across 14 versions & 6 rubygems