Class: Slim::Embedded Private

Inherits:
Filter
  • Object
show all
Defined in:
lib/slim/embedded.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Temple filter which processes embedded engines

Defined Under Namespace

Classes: Engine, InterpolateTiltEngine, JavaScriptEngine, RubyEngine, SassEngine, TagEngine, TiltEngine

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Filter

#on_slim_control, #on_slim_output, #on_slim_text

Constructor Details

#initialize(opts = {}) ⇒ Embedded

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Embedded.



93
94
95
96
97
98
# File 'lib/slim/embedded.rb', line 93

def initialize(opts = {})
  super
  @engines = {}
  @enabled = normalize_engine_list(options[:enable_engines])
  @disabled = normalize_engine_list(options[:disable_engines])
end

Class Attribute Details

.enginesObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



67
68
69
# File 'lib/slim/embedded.rb', line 67

def engines
  @engines
end

Class Method Details

.create(name, options) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



85
86
87
88
# File 'lib/slim/embedded.rb', line 85

def create(name, options)
  constructor = engines[name] || raise(Temple::FilterError, "Embedded engine #{name} not found")
  constructor.call(options)
end

.register(name, klass, *option_filter) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Register embedded engine

Parameters:

  • name (String)

    Name of the engine

  • klass (Class)

    Engine class

  • option_filter

    List of options to pass to engine. Last argument can be default option hash.



75
76
77
78
79
80
81
82
83
# File 'lib/slim/embedded.rb', line 75

def register(name, klass, *option_filter)
  name = name.to_sym
  local_options = option_filter.last.respond_to?(:to_hash) ? option_filter.pop.to_hash : {}
  define_options(name, *option_filter)
  klass.define_options(name)
  engines[name.to_sym] = proc do |options|
    klass.new({}.update(options).delete_if {|k,v| !option_filter.include?(k) && k != name }.update(local_options))
  end
end

Instance Method Details

#enabled?(name) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


107
108
109
110
# File 'lib/slim/embedded.rb', line 107

def enabled?(name)
  (!@enabled || @enabled.include?(name)) &&
    (!@disabled || !@disabled.include?(name))
end

#on_slim_embedded(name, body, attrs) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Raises:

  • (Temple::FilterError)


100
101
102
103
104
105
# File 'lib/slim/embedded.rb', line 100

def on_slim_embedded(name, body, attrs)
  name = name.to_sym
  raise(Temple::FilterError, "Embedded engine #{name} is disabled") unless enabled?(name)
  @engines[name] ||= self.class.create(name, options)
  @engines[name].on_slim_embedded(name, body, attrs)
end