# Module: Haml::RailsHelpers

Extended by:
  RailsHelpers

Includes:
  Helpers

Included in:
  RailsHelpers

Defined in:
  lib/haml/rails_helpers.rb

## Instance Method Summary collapse

- #capture_haml(*args, &block)
- #find_and_preserve(input = nil, tags = DEFAULT_PRESERVE_TAGS, &block)
- #precede(str, &block)
- #preserve(input = nil, &block)
- #succeed(str, &block)
- #surround(front, back = front, &block)

### Methods included from Helpers

preserve

## Instance Method Details

### #capture_haml(*args, &block)

    49
    50
    51

    # File 'lib/haml/rails_helpers.rb', line 49

    def capture_haml(*args, &block)
      capture(*args, &block)
    end

### #find_and_preserve(input = nil, tags = DEFAULT_PRESERVE_TAGS, &block)

    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    # File 'lib/haml/rails_helpers.rb', line 12

    def find_and_preserve(input = nil, tags = DEFAULT_PRESERVE_TAGS, &block)
      return find_and_preserve(capture_haml(&block), input || tags) if block

      tags = tags.each_with_object('') do |t, s|
        s << '|' unless s.empty?
        s << Regexp.escape(t)
      end

      re = /<(#{tags})([^>]*)>(.*?)(<\/\1>)/im
      input.to_s.gsub(re) do |s|
        s =~ re # Can't rely on $1, etc. existing since Rails' SafeBuffer#gsub is incompatible
        "<#{$1}#{$2}>#{preserve($3)}</#{$1}>"
      end
    end

### #precede(str, &block)

    39
    40
    41
    42

    # File 'lib/haml/rails_helpers.rb', line 39

    def precede(str, &block)
      str = escape_once(str) unless str.html_safe?
      "#{str}#{capture_haml(&block).chomp}\n".html_safe
    end

### #preserve(input = nil, &block)

    27
    28
    29
    30

    # File 'lib/haml/rails_helpers.rb', line 27

    def preserve(input = nil, &block)
      return preserve(capture_haml(&block)) if block
      super.html_safe
    end

### #succeed(str, &block)

    44
    45
    46
    47

    # File 'lib/haml/rails_helpers.rb', line 44

    def succeed(str, &block)
      str = escape_once(str) unless str.html_safe?
      "#{capture_haml(&block).chomp}#{str}\n".html_safe
    end

### #surround(front, back = front, &block)

    32
    33
    34
    35
    36
    37

    # File 'lib/haml/rails_helpers.rb', line 32

    def surround(front, back = front, &block)
      output = capture_haml(&block)
      front  = escape_once(front) unless front.html_safe?
      back   = escape_once(back)  unless back.html_safe?
      "#{front}#{output.chomp}#{back}\n".html_safe
    end