class Slim::LogicLess

Handle logic less mode This filter can be activated with the option “logic_less” @api private

Constants

DEFAULT_ACCESS_ORDER

Default dictionary access order, change it with the option :dictionary_access

Public Class Methods

new(opts = {}) click to toggle source
Calls superclass method
# File lib/slim/logic_less/filter.rb, line 13
def initialize(opts = {})
  super
  access = options[:dictionary_access]
  if access == :wrapped
    warn 'Slim::LogicLess - Wrapped dictionary access is deprecated and unsupported in Slim 2.0'
    access = DEFAULT_ACCESS_ORDER
  else
    access = [access].flatten.compact
    access.each do |type|
      raise ArgumentError, "Invalid dictionary access #{type.inspect}" unless DEFAULT_ACCESS_ORDER.include?(type)
    end
    raise ArgumentError, 'Option dictionary access is missing' if access.empty?
  end
  @access = access.inspect
end

Public Instance Methods

call(exp) click to toggle source
Calls superclass method
# File lib/slim/logic_less/filter.rb, line 29
def call(exp)
  if options[:logic_less]
    @context = unique_name
    [:multi,
     [:code, "#{@context} = ::Slim::LogicLess::Context.new(#{options[:dictionary]}, #{@access})"],
     super]
  else
    exp
  end
end
on_code(code) click to toggle source
# File lib/slim/logic_less/filter.rb, line 69
def on_code(code)
  raise Temple::FilterError, 'Embedded code is forbidden in logic less mode'
end
on_dynamic(code) click to toggle source
# File lib/slim/logic_less/filter.rb, line 65
def on_dynamic(code)
  raise Temple::FilterError, 'Embedded code is forbidden in logic less mode'
end
on_slim_attrvalue(escape, value) click to toggle source
# File lib/slim/logic_less/filter.rb, line 57
def on_slim_attrvalue(escape, value)
  [:slim, :attrvalue, escape, access(value)]
end
on_slim_control(name, content) click to toggle source

Interpret control blocks as sections or inverted sections

# File lib/slim/logic_less/filter.rb, line 41
def on_slim_control(name, content)
  method =
    if name =~ /\A!\s*(.*)/
      name = $1
      'inverted_section'
    else
      'section'
    end
  [:block, "#{@context}.#{method}(#{name.to_sym.inspect}) do", compile(content)]
end
on_slim_output(escape, name, content) click to toggle source
# File lib/slim/logic_less/filter.rb, line 52
def on_slim_output(escape, name, content)
  [:slim, :output, escape, empty_exp?(content) ? access(name) :
   "#{@context}.lambda(#{name.to_sym.inspect}) do", compile(content)]
end
on_slim_splat(code) click to toggle source
# File lib/slim/logic_less/filter.rb, line 61
def on_slim_splat(code)
  [:slim, :splat, access(code)]
end

Private Instance Methods

access(name) click to toggle source
# File lib/slim/logic_less/filter.rb, line 75
def access(name)
  name == 'yield' ? name : "#{@context}[#{name.to_sym.inspect}]"
end