# Class: Haml::Helpers::ErrorReturn

Inherits:
  Object
  - Object
  - Haml::Helpers::ErrorReturn
  show all

Defined in:
  lib/haml/helpers.rb

## Overview

An object that raises an error when #to_s is called. It’s used to raise an error when the return value of a helper is used when it shouldn’t be.

## Instance Method Summary collapse

- #initialize(method) ⇒ ErrorReturn constructor

  A new instance of ErrorReturn.

- #inspect ⇒ String

  A human-readable string representation.

- #to_s

  Raises an error.

## Constructor Details

### #initialize(method) ⇒ `ErrorReturn`

Returns a new instance of ErrorReturn.

    15
    16
    17
    18
    19
    20
    21

    # File 'lib/haml/helpers.rb', line 15

    def initialize(method)
      @message = <<MESSAGE
    #{method} outputs directly to the Haml template.
    Disregard its return value and use the - operator,
    or use capture_haml to get the value as a String.
    MESSAGE
    end

## Instance Method Details

### #inspect ⇒ `String`

Returns A human-readable string representation.

Returns:

- (`String`) —

  A human-readable string representation

    46
    47
    48

    # File 'lib/haml/helpers.rb', line 46

    def inspect
      "Haml::Helpers::ErrorReturn(#{@message.inspect})"
    end

### #to_s

Raises an error.

Raises:

- (`Haml::Error`) —

  The error

    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

    # File 'lib/haml/helpers.rb', line 26

    def to_s
      raise Haml::Error.new(@message)
    rescue Haml::Error => e
      e.backtrace.shift

      # If the ErrorReturn is used directly in the template,
      # we don't want Haml's stuff to get into the backtrace,
      # so we get rid of the format_script line.
      #
      # We also have to subtract one from the Haml line number
      # since the value is passed to format_script the line after
      # it's actually used.
      if e.backtrace.first =~ /^\(eval\):\d+:in `format_script/
        e.backtrace.shift
        e.backtrace.first.gsub!(/^\(haml\):(\d+)/) {|s| "(haml):#{$1.to_i - 1}"}
      end
      raise e
    end