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
Source
# File lib/slim/logic_less/filter.rb, line 14 def initialize(opts = {}) super access = [options[:dictionary_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? @access = access.inspect end
Calls superclass method
Public Instance Methods
Source
# File lib/slim/logic_less/filter.rb, line 24 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
Calls superclass method
Source
# File lib/slim/logic_less/filter.rb, line 64 def on_code(code) raise Temple::FilterError, 'Embedded code is forbidden in logic less mode' end
Source
# File lib/slim/logic_less/filter.rb, line 60 def on_dynamic(code) raise Temple::FilterError, 'Embedded code is forbidden in logic less mode' end
Source
# File lib/slim/logic_less/filter.rb, line 52 def on_slim_attrvalue(escape, value) [:slim, :attrvalue, escape, access(value)] end
Source
# File lib/slim/logic_less/filter.rb, line 36 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
Interpret control blocks as sections or inverted sections
Source
# File lib/slim/logic_less/filter.rb, line 47 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
Source
# File lib/slim/logic_less/filter.rb, line 56 def on_slim_splat(code) [:slim, :splat, access(code)] end
Private Instance Methods
Source
# File lib/slim/logic_less/filter.rb, line 70 def access(name) case name when 'yield' 'yield' when 'self' "#{@context}.to_s" else "#{@context}[#{name.to_sym.inspect}]" end end