Class List Method List File List

# Module: Haml::Filters

Extended by:
  Filters
Included in:
  Filters
Defined in:
  lib/haml/filters.rb,
  lib/haml/sass_rails_filter.rb

## Overview

The module containing the default Haml filters, as well as the base module, Base.

See Also:

- Base

## Defined Under Namespace

Modules: Base, Cdata, Coffee, Css, Erb, Escaped, Javascript, Less, Markdown, Plain, Preserve, Ruby, Sass, Scss Classes: SassRailsTemplate, ScssRailsTemplate

## Instance Attribute Summary (collapse)

- - ({String => Haml::Filters::Base}) defined readonly

  A hash mapping filter names to classes.

## Instance Method Summary (collapse)

- - (Module) register_tilt_filter(name, options = {})

  Loads an external template engine from Tilt as a filter.

- - remove_filter(name)

  Removes a filter from Haml.

## Instance Attribute Details

### - (`{String => Haml::Filters::Base}`) defined (readonly)

Returns a hash mapping filter names to classes.

Returns:

- (`{String => Haml::Filters::Base}`) —

  a hash mapping filter names to classes.

    14
    15
    16

    # File 'lib/haml/filters.rb', line 14

    def defined
      @defined
    end

## Instance Method Details

### - (`Module`) register_tilt_filter(name, options = {})

Loads an external template engine from Tilt as a filter. This method is used internally by Haml to set up filters for Sass, SCSS, Less, Coffeescript, and others. It’s left public to make it easy for developers to add their own Tilt-based filters if they choose.

Parameters:

- options (`Hash`) (defaults to: `{}`) —

  Options for generating the filter module.

Options Hash (`options`):

- :precompiled (`Boolean`) —

  Whether the filter should be precompiled. Erb, Nokogiri and Builder use this, for example.

- :template_class (`Class`) —

  The Tilt template class to use, in the event it can’t be inferred from an extension.

- :extension (`String`) —

  The extension associated with the content, for example “markdown”. This lets Tilt choose the preferred engine when there are more than one.

- :alias (`String`, `Array<String>`) —

  Any aliases for the filter. For example, :coffee is also available as :coffeescript.

- :extend (`String`) —

  The name of a module to extend when defining the filter. Defaults to “Plain”. This allows filters such as Coffee to “inherit” from Javascript, wrapping its output in script tags.

Returns:

- (`Module`) —

  The generated filter.

Since:

- 4.0

    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59

    # File 'lib/haml/filters.rb', line 38

    def register_tilt_filter(name, options = {})
      if constants.map(&:to_s).include?(name.to_s)
        raise "#{name} filter already defined"
      end

      filter = const_set(name, Module.new)
      filter.extend const_get(options[:extend] || "Plain")
      filter.extend TiltFilter
      filter.extend PrecompiledTiltFilter if options.has_key? :precompiled

      if options.has_key? :template_class
        filter.template_class = options[:template_class]
      else
        filter.tilt_extension = options.fetch(:extension) { name.downcase }
      end

      # All ":coffeescript" as alias for ":coffee", etc.
      if options.has_key?(:alias)
        [options[:alias]].flatten.each {|x| Filters.defined[x.to_s] = filter}
      end
      filter
    end

### - remove_filter(name)

Removes a filter from Haml. If the filter was removed, it returns the that was remove Module upon success, or nil on failure. If you try to redefine a filter, Haml will raise an error. Use this method first to explicitly remove the filter before redefining it.

Returns:

- Module The filter module that has been removed

Since:

- 4.0

    67
    68
    69
    70
    71
    72

    # File 'lib/haml/filters.rb', line 67

    def remove_filter(name)
      defined.delete name.to_s.downcase
      if constants.map(&:to_s).include?(name.to_s)
        remove_const name.to_sym
      end
    end