Sha256: 4a3eade3b9910156becb840d2c63aab92aa9dd4f6d14896a7d56c8c3ab98864c

Contents?: true

Size: 1.39 KB

Versions: 30

Compression:

Stored size: 1.39 KB

Contents

# This is a module compatible with Haml::Helpers.
# It is included by ActionView in initializer.
module Hamlit
  module Helpers
    extend self

    DEFAULT_PRESERVE_TAGS = %w[textarea pre code].freeze

    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

    def preserve(input = nil, &block)
      return preserve(capture_haml(&block)) if block
      s = input.to_s.chomp("\n")
      s.gsub!(/\n/, '&#x000A;')
      s.delete!("\r")
      s
    end

    def surround(front, back = front, &block)
      output = capture_haml(&block)

      "#{front}#{output.chomp}#{back}\n"
    end

    def precede(str, &block)
      "#{str}#{capture_haml(&block).chomp}\n"
    end

    def succeed(str, &block)
      "#{capture_haml(&block).chomp}#{str}\n"
    end

    # NOTE: currently Hamlit::Helpers is enabled by default on only
    # Rails environment. Thus you can use capture.
    def capture_haml(*args, &block)
      capture(*args, &block)
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
hamlit-1.7.0 lib/hamlit/helpers.rb
hamlit-1.6.7 lib/hamlit/helpers.rb
hamlit-1.6.6 lib/hamlit/helpers.rb
hamlit-1.6.5 lib/hamlit/helpers.rb
hamlit-1.6.4 lib/hamlit/helpers.rb
hamlit-1.6.3 lib/hamlit/helpers.rb
hamlit-1.6.2 lib/hamlit/helpers.rb
hamlit-1.6.1 lib/hamlit/helpers.rb
hamlit-1.6.0 lib/hamlit/helpers.rb
hamlit-1.5.9 lib/hamlit/helpers.rb
hamlit-1.5.8 lib/hamlit/helpers.rb
hamlit-1.5.7 lib/hamlit/helpers.rb
hamlit-1.5.6 lib/hamlit/helpers.rb
hamlit-1.5.5 lib/hamlit/helpers.rb
hamlit-1.5.4 lib/hamlit/helpers.rb
hamlit-1.5.3 lib/hamlit/helpers.rb
hamlit-1.5.2 lib/hamlit/helpers.rb
hamlit-1.5.1 lib/hamlit/helpers.rb
hamlit-1.5.0 lib/hamlit/helpers.rb
hamlit-1.4.7 lib/hamlit/helpers.rb