Sha256: 02722b5ccb2e0c7c718015800a13c7ae9ab7944758f01fda6717f8fa26959ff1

Contents?: true

Size: 1.81 KB

Versions: 1

Compression:

Stored size: 1.81 KB

Contents

module Locomotive
  module Steam
    module Liquid
      module Tags

        class Snippet < ::Liquid::Include

          def render(context)
            name    = @template_name.gsub(/[\"\']/, '')
            snippet = context.registers[:mounting_point].snippets[name]

            raise ::Liquid::StandardError.new("Unknown snippet \"#{name}\"") if snippet.nil?

            partial   = self.parse_template(snippet)

            variable  = context[@variable_name || @template_name[1..-2]]

            context.stack do
              @attributes.each do |key, value|
                context[key] = context[value]
              end

              output = (if variable.is_a?(Array)
                variable.collect do |variable|
                  context[@template_name[1..-2]] = variable
                  partial.render(context)
                end
              else
                context[@template_name[1..-2]] = variable
                partial.render(context)
              end)

              Locomotive::Steam::Logger.info "  Steamed snippet #{name}"

              output
            end
          end

          protected

          def parse_template(snippet)
            begin
              ::Liquid::Template.parse(snippet.source)
            rescue ::Liquid::Error => e
              # do it again on the raw source instead so that the error line matches
              # the source file.
              begin
                ::Liquid::Template.parse(snippet.template.raw_source)
              rescue ::Liquid::Error => e
                e.backtrace.unshift "#{snippet.template.filepath}:#{e.line + 1}:in `#{snippet.name}'"
                e.line = self.line - 1
                raise e
              end
            end
          end

        end

        ::Liquid::Template.register_tag('include', Snippet)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
locomotivecms_steam-0.1.0 lib/locomotive/steam/liquid/tags/snippet.rb