Module: Roda::RodaPlugins::ContentFor::InstanceMethods

Defined in:
lib/roda/plugins/content_for.rb

Instance Method Summary collapse

Instance Method Details

#content_for(key, value = nil) ⇒ Object

If called with a block, store content enclosed by block under the given key. If called without a block, retrieve stored content with the given key, or return nil if there is no content stored with that key.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/roda/plugins/content_for.rb', line 55

def content_for(key, value=nil)
  append = opts[:append_content_for]

  if block_given? || value
    if block_given?
      outvar = render_opts[:template_opts][:outvar]
      buf_was = instance_variable_get(outvar)

      # Use temporary output buffer for ERB-based rendering systems
      instance_variable_set(outvar, String.new)
      value = Tilt[render_opts[:engine]].new{yield.to_s}.render
      instance_variable_set(outvar, buf_was)
    end

    @_content_for ||= {}

    if append
      (@_content_for[key] ||= []) << value
    else
      @_content_for[key] = value
    end
  elsif @_content_for && (value = @_content_for[key])
    if append
      value = value.join
    end

    value
  end
end