Sha256: d3ce518183f66d26fdb3c62beed25256918c6e1f2c1cd0ca5b55e0258b393c6a

Contents?: true

Size: 1.06 KB

Versions: 4

Compression:

Stored size: 1.06 KB

Contents

# Tag for injecting partials. Example tag:
#   {{cms:partial path/to/partial, foo: bar, zip: zoop}}
# This expands into a familiar:
#   <%= render partial: "path/to/partial", locals: {foo: bar, zip: zoop} %>
# Whitelist is can be used to control what partials are renderable.
#
class ComfortableMexicanSofa::Content::Tag::Partial < ComfortableMexicanSofa::Content::Tag

  attr_reader :path, :locals

  def initialize(context:, params: [], source: nil)
    super
    @locals = params.extract_options!
    @path   = params[0]

    unless @path.present?
      raise Error, "Missing path for partial tag"
    end
  end

  # we output erb into rest of the content
  def allow_erb
    true
  end

  def content
    "<%= render partial: \"#{@path}\", locals: #{@locals} %>"
  end

  def render
    whitelist = ComfortableMexicanSofa.config.allowed_partials
    if whitelist.is_a?(Array)
      whitelist.member?(@path) ? content : ""
    else
      content
    end
  end

end

ComfortableMexicanSofa::Content::Renderer.register_tag(
  :partial, ComfortableMexicanSofa::Content::Tag::Partial
)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
comfortable_mexican_sofa-2.0.12 lib/comfortable_mexican_sofa/content/tags/partial.rb
comfortable_mexican_sofa-2.0.11 lib/comfortable_mexican_sofa/content/tags/partial.rb
comfortable_mexican_sofa-2.0.10 lib/comfortable_mexican_sofa/content/tags/partial.rb
comfortable_mexican_sofa-2.0.9 lib/comfortable_mexican_sofa/content/tags/partial.rb