Class: Slimi::Filters::Embedded Private

Inherits:
Base
  • Object
show all
Defined in:
lib/slimi/filters/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 Base

#on_slimi_control, #on_slimi_output, #on_slimi_position, #on_slimi_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.



99
100
101
102
103
104
# File 'lib/slimi/filters/embedded.rb', line 99

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.



73
74
75
# File 'lib/slimi/filters/embedded.rb', line 73

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.



91
92
93
94
# File 'lib/slimi/filters/embedded.rb', line 91

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.



81
82
83
84
85
86
87
88
89
# File 'lib/slimi/filters/embedded.rb', line 81

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)


114
115
116
117
# File 'lib/slimi/filters/embedded.rb', line 114

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

#on_slimi_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)


106
107
108
109
110
111
112
# File 'lib/slimi/filters/embedded.rb', line 106

def on_slimi_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_slimi_embedded(name, body, attrs)
end