Class: Liquid::ParseContext

Inherits:
Object
  • Object
show all
Defined in:
lib/liquid/parse_context.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = Const::EMPTY_HASH) ⇒ ParseContext

Returns a new instance of ParseContext.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/liquid/parse_context.rb', line 8

def initialize(options = Const::EMPTY_HASH)
  @environment = options.fetch(:environment, Environment.default)
  @template_options = options ? options.dup : {}

  @locale   = @template_options[:locale] ||= I18n.new
  @warnings = []

  # constructing new StringScanner in Lexer, Tokenizer, etc is expensive
  # This StringScanner will be shared by all of them
  @string_scanner = StringScanner.new("")

  @expression_cache = if options[:expression_cache].nil?
    {}
  elsif options[:expression_cache].respond_to?(:[]) && options[:expression_cache].respond_to?(:[]=)
    options[:expression_cache]
  elsif options[:expression_cache]
    {}
  end

  self.depth   = 0
  self.partial = false
end

Instance Attribute Details

#depthObject

Returns the value of attribute depth.



5
6
7
# File 'lib/liquid/parse_context.rb', line 5

def depth
  @depth
end

#environmentObject (readonly)

Returns the value of attribute environment.



6
7
8
# File 'lib/liquid/parse_context.rb', line 6

def environment
  @environment
end

#error_modeObject (readonly)

Returns the value of attribute error_mode.



6
7
8
# File 'lib/liquid/parse_context.rb', line 6

def error_mode
  @error_mode
end

#line_numberObject

Returns the value of attribute line_number.



5
6
7
# File 'lib/liquid/parse_context.rb', line 5

def line_number
  @line_number
end

#localeObject

Returns the value of attribute locale.



5
6
7
# File 'lib/liquid/parse_context.rb', line 5

def locale
  @locale
end

#partialObject

Returns the value of attribute partial.



6
7
8
# File 'lib/liquid/parse_context.rb', line 6

def partial
  @partial
end

#trim_whitespaceObject

Returns the value of attribute trim_whitespace.



5
6
7
# File 'lib/liquid/parse_context.rb', line 5

def trim_whitespace
  @trim_whitespace
end

#warningsObject (readonly)

Returns the value of attribute warnings.



6
7
8
# File 'lib/liquid/parse_context.rb', line 6

def warnings
  @warnings
end

Instance Method Details

#[](option_key) ⇒ Object



31
32
33
# File 'lib/liquid/parse_context.rb', line 31

def [](option_key)
  @options[option_key]
end

#new_block_bodyObject



35
36
37
# File 'lib/liquid/parse_context.rb', line 35

def new_block_body
  Liquid::BlockBody.new
end

#new_parser(input) ⇒ Object



39
40
41
42
# File 'lib/liquid/parse_context.rb', line 39

def new_parser(input)
  @string_scanner.string = input
  Parser.new(@string_scanner)
end

#new_tokenizer(source, start_line_number: nil, for_liquid_tag: false) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/liquid/parse_context.rb', line 44

def new_tokenizer(source, start_line_number: nil, for_liquid_tag: false)
  Tokenizer.new(
    source: source,
    string_scanner: @string_scanner,
    line_number: start_line_number,
    for_liquid_tag: for_liquid_tag,
  )
end

#parse_expression(markup) ⇒ Object



53
54
55
# File 'lib/liquid/parse_context.rb', line 53

def parse_expression(markup)
  Expression.parse(markup, @string_scanner, @expression_cache)
end

#partial_optionsObject



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/liquid/parse_context.rb', line 64

def partial_options
  @partial_options ||= begin
    dont_pass = @template_options[:include_options_blacklist]
    if dont_pass == true
      { locale: locale }
    elsif dont_pass.is_a?(Array)
      @template_options.reject { |k, _v| dont_pass.include?(k) }
    else
      @template_options
    end
  end
end