Skip to content

Commit 54e97ed

Browse files
committed
Move VariableLookup parsing logic to .parse instead of initializer
Goal is to get rid of it entirely, but baby steps.
1 parent bc2a515 commit 54e97ed

3 files changed

Lines changed: 29 additions & 27 deletions

File tree

lib/liquid/variable_lookup.rb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ class VariableLookup
77
attr_reader :name, :lookups
88

99
def self.parse(markup, string_scanner = StringScanner.new(""), cache = nil)
10-
new(markup, string_scanner, cache)
11-
end
12-
13-
def initialize(markup, string_scanner = StringScanner.new(""), cache = nil)
1410
lookups = markup.scan(VariableParser)
1511

1612
name = lookups.shift
@@ -21,12 +17,10 @@ def initialize(markup, string_scanner = StringScanner.new(""), cache = nil)
2117
cache,
2218
)
2319
end
24-
@name = name
2520

26-
@lookups = lookups
27-
@command_flags = 0
21+
command_flags = 0
2822

29-
@lookups.each_index do |i|
23+
lookups.each_index do |i|
3024
lookup = lookups[i]
3125
if lookup&.start_with?('[') && lookup&.end_with?(']')
3226
lookups[i] = Expression.parse(
@@ -35,9 +29,17 @@ def initialize(markup, string_scanner = StringScanner.new(""), cache = nil)
3529
cache,
3630
)
3731
elsif COMMAND_METHODS.include?(lookup)
38-
@command_flags |= 1 << i
32+
command_flags |= 1 << i
3933
end
4034
end
35+
36+
new(name, lookups, command_flags)
37+
end
38+
39+
def initialize(name, lookups, command_flags)
40+
@name = name
41+
@lookups = lookups
42+
@command_flags = command_flags
4143
end
4244

4345
def lookup_command?(lookup_index)

test/unit/condition_unit_test.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def test_hash_compare_backwards_compatibility
8282
def test_contains_works_on_arrays
8383
@context = Liquid::Context.new
8484
@context['array'] = [1, 2, 3, 4, 5]
85-
array_expr = VariableLookup.new("array")
85+
array_expr = VariableLookup.parse("array")
8686

8787
assert_evaluates_false(array_expr, 'contains', 0)
8888
assert_evaluates_true(array_expr, 'contains', 1)
@@ -96,8 +96,8 @@ def test_contains_works_on_arrays
9696

9797
def test_contains_returns_false_for_nil_operands
9898
@context = Liquid::Context.new
99-
assert_evaluates_false(VariableLookup.new('not_assigned'), 'contains', '0')
100-
assert_evaluates_false(0, 'contains', VariableLookup.new('not_assigned'))
99+
assert_evaluates_false(VariableLookup.parse('not_assigned'), 'contains', '0')
100+
assert_evaluates_false(0, 'contains', VariableLookup.parse('not_assigned'))
101101
end
102102

103103
def test_contains_return_false_on_wrong_data_type
@@ -149,7 +149,7 @@ def test_left_or_right_may_contain_operators
149149
@context = Liquid::Context.new
150150
@context['one'] = @context['another'] = "gnomeslab-and-or-liquid"
151151

152-
assert_evaluates_true(VariableLookup.new("one"), '==', VariableLookup.new("another"))
152+
assert_evaluates_true(VariableLookup.parse("one"), '==', VariableLookup.parse("another"))
153153
end
154154

155155
def test_default_context_is_deprecated

test/unit/variable_unit_test.rb

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ class VariableUnitTest < Minitest::Test
77

88
def test_variable
99
var = create_variable('hello')
10-
assert_equal(VariableLookup.new('hello'), var.name)
10+
assert_equal(VariableLookup.parse('hello'), var.name)
1111
end
1212

1313
def test_filters
1414
var = create_variable('hello | textileze')
15-
assert_equal(VariableLookup.new('hello'), var.name)
15+
assert_equal(VariableLookup.parse('hello'), var.name)
1616
assert_equal([['textileze', []]], var.filters)
1717

1818
var = create_variable('hello | textileze | paragraph')
19-
assert_equal(VariableLookup.new('hello'), var.name)
19+
assert_equal(VariableLookup.parse('hello'), var.name)
2020
assert_equal([['textileze', []], ['paragraph', []]], var.filters)
2121

2222
var = create_variable(%( hello | strftime: '%Y'))
23-
assert_equal(VariableLookup.new('hello'), var.name)
23+
assert_equal(VariableLookup.parse('hello'), var.name)
2424
assert_equal([['strftime', ['%Y']]], var.filters)
2525

2626
var = create_variable(%( 'typo' | link_to: 'Typo', true ))
@@ -44,11 +44,11 @@ def test_filters
4444
assert_equal([['repeat', [3, 3, 3]]], var.filters)
4545

4646
var = create_variable(%( hello | strftime: '%Y, okay?'))
47-
assert_equal(VariableLookup.new('hello'), var.name)
47+
assert_equal(VariableLookup.parse('hello'), var.name)
4848
assert_equal([['strftime', ['%Y, okay?']]], var.filters)
4949

5050
var = create_variable(%( hello | things: "%Y, okay?", 'the other one'))
51-
assert_equal(VariableLookup.new('hello'), var.name)
51+
assert_equal(VariableLookup.parse('hello'), var.name)
5252
assert_equal([['things', ['%Y, okay?', 'the other one']]], var.filters)
5353
end
5454

@@ -60,15 +60,15 @@ def test_filter_with_date_parameter
6060

6161
def test_filters_without_whitespace
6262
var = create_variable('hello | textileze | paragraph')
63-
assert_equal(VariableLookup.new('hello'), var.name)
63+
assert_equal(VariableLookup.parse('hello'), var.name)
6464
assert_equal([['textileze', []], ['paragraph', []]], var.filters)
6565

6666
var = create_variable('hello|textileze|paragraph')
67-
assert_equal(VariableLookup.new('hello'), var.name)
67+
assert_equal(VariableLookup.parse('hello'), var.name)
6868
assert_equal([['textileze', []], ['paragraph', []]], var.filters)
6969

7070
var = create_variable("hello|replace:'foo','bar'|textileze")
71-
assert_equal(VariableLookup.new('hello'), var.name)
71+
assert_equal(VariableLookup.parse('hello'), var.name)
7272
assert_equal([['replace', ['foo', 'bar']], ['textileze', []]], var.filters)
7373
end
7474

@@ -99,8 +99,8 @@ def test_float
9999
end
100100

101101
def test_dashes
102-
assert_equal(VariableLookup.new('foo-bar'), create_variable('foo-bar').name)
103-
assert_equal(VariableLookup.new('foo-bar-2'), create_variable('foo-bar-2').name)
102+
assert_equal(VariableLookup.parse('foo-bar'), create_variable('foo-bar').name)
103+
assert_equal(VariableLookup.parse('foo-bar-2'), create_variable('foo-bar-2').name)
104104

105105
assert_raises(Liquid::SyntaxError) { create_variable('foo - bar') }
106106
assert_raises(Liquid::SyntaxError) { create_variable('-foo') }
@@ -114,12 +114,12 @@ def test_string_with_special_chars
114114

115115
def test_string_dot
116116
var = create_variable(%( test.test ))
117-
assert_equal(VariableLookup.new('test.test'), var.name)
117+
assert_equal(VariableLookup.parse('test.test'), var.name)
118118
end
119119

120120
def test_filter_with_keyword_arguments
121121
var = create_variable(%( hello | things: greeting: "world", farewell: 'goodbye'))
122-
assert_equal(VariableLookup.new('hello'), var.name)
122+
assert_equal(VariableLookup.parse('hello'), var.name)
123123
assert_equal([['things', [], { 'greeting' => 'world', 'farewell' => 'goodbye' }]], var.filters)
124124
end
125125

@@ -163,7 +163,7 @@ def test_output_raw_source_of_variable
163163
end
164164

165165
def test_variable_lookup_interface
166-
lookup = VariableLookup.new('a.b.c')
166+
lookup = VariableLookup.parse('a.b.c')
167167
assert_equal('a', lookup.name)
168168
assert_equal(['b', 'c'], lookup.lookups)
169169
end

0 commit comments

Comments
 (0)