module Nanoc::Helpers::Capturing

@see nanoc.app/doc/reference/helpers/#capturing

Public Instance Methods

capture() { || ... } click to toggle source

@return [String]

# File lib/nanoc/helpers/capturing.rb, line 149
def capture(&block)
  # Get erbout so far
  erbout = eval('_erbout', block.binding)
  erbout_length = erbout.length

  # Execute block
  yield

  # Get new piece of erbout
  erbout_addition = erbout[erbout_length..]

  # Remove addition
  erbout[erbout_length..-1] = +''

  # Depending on how the filter outputs, the result might be a
  # single string or an array of strings (slim outputs the latter).
  erbout_addition = erbout_addition.join('') if erbout_addition.is_a? Array

  # Done.
  erbout_addition
end
content_for(*args, &) click to toggle source

@overload content_for(name, &block)

@param [Symbol, String] name
@return [void]

@overload content_for(name, params, &block)

@param [Symbol, String] name
@option params [Symbol] existing
@return [void]

@overload content_for(name, content)

@param [Symbol, String] name
@param [String] content
@return [void]

@overload content_for(name, params, content)

@param [Symbol, String] name
@param [String] content
@option params [Symbol] existing
@return [void]

@overload content_for(item, name)

@param [Symbol, String] name
@return [String]
# File lib/nanoc/helpers/capturing.rb, line 105
def content_for(*args, &)
  if block_given? # Set content
    name = args[0]
    params =
      case args.size
      when 1
        {}
      when 2
        args[1]
      else
        raise ArgumentError, 'expected 1 or 2 argument (the name ' \
          "of the capture, and optionally params) but got #{args.size} instead"
      end

    SetContent.new(name, params, @item).run(&)
  elsif args.size > 1 && (args.first.is_a?(Symbol) || args.first.is_a?(String)) # Set content
    name = args[0]
    content = args.last
    params =
      case args.size
      when 2
        {}
      when 3
        args[1]
      else
        raise ArgumentError, 'expected 2 or 3 arguments (the name ' \
          "of the capture, optionally params, and the content) but got #{args.size} instead"
      end

    _erbout = +'' # rubocop:disable Lint/UnderscorePrefixedVariableName
    SetContent.new(name, params, @item).run { _erbout << content }
  else # Get content
    if args.size != 2
      raise ArgumentError, 'expected 2 arguments (the item ' \
        "and the name of the capture) but got #{args.size} instead"
    end
    requested_item = args[0]
    name = args[1]

    GetContent.new(requested_item, name, @item, @config).run
  end
end