module ContentForOnce::Helpers

Public Instance Methods

content_for_once(name, &block) click to toggle source
# File lib/content_for_once/helpers.rb, line 3
def content_for_once(name, &block)
  @content_for_once ||= Hash.new {|h, k| h[k] = '' }
  name = name.to_sym

  @content_for_once[name].concat(capture(&block)) if capture(&block).present?
  @content_for_once[name] = Nokogiri::HTML.fragment(@content_for_once[name]).children.
    map(&:to_s).select(&:present?).map {|e| e.gsub(/>\n/, '>') }.uniq.join("\n")

  @content_for_once.each do |name, content|
    # ref: https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/capture_helper.rb#L149
    _content = @view_flow.get(name).presence || ''
    _content.concat(content.html_safe)
    _content = Nokogiri::HTML.fragment(_content.encode("UTF-8")).children.
      map(&:to_s).select(&:present?).map {|e| e.gsub(/>\n/, '>') }.uniq.join("\n")
    @view_flow.set(name, _content)
  end
  nil
end