temple 0.6.7 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +34 -0
  3. data/.gitignore +1 -0
  4. data/CHANGES +106 -1
  5. data/EXPRESSIONS.md +3 -2
  6. data/Gemfile +0 -1
  7. data/README.md +14 -10
  8. data/Rakefile +4 -11
  9. data/lib/temple/engine.rb +7 -3
  10. data/lib/temple/erb/engine.rb +5 -3
  11. data/lib/temple/erb/parser.rb +1 -1
  12. data/lib/temple/erb/trimming.rb +11 -26
  13. data/lib/temple/filters/ambles.rb +21 -0
  14. data/lib/temple/filters/encoding.rb +1 -1
  15. data/lib/temple/filters/eraser.rb +1 -1
  16. data/lib/temple/filters/escapable.rb +2 -2
  17. data/lib/temple/filters/remove_bom.rb +2 -9
  18. data/lib/temple/filters/static_analyzer.rb +30 -0
  19. data/lib/temple/filters/string_splitter.rb +141 -0
  20. data/lib/temple/filters/validator.rb +1 -1
  21. data/lib/temple/generator.rb +32 -6
  22. data/lib/temple/generators/array.rb +2 -2
  23. data/lib/temple/generators/array_buffer.rb +6 -5
  24. data/lib/temple/generators/erb.rb +1 -5
  25. data/lib/temple/generators/rails_output_buffer.rb +7 -8
  26. data/lib/temple/generators/string_buffer.rb +2 -2
  27. data/lib/temple/html/attribute_merger.rb +6 -11
  28. data/lib/temple/html/attribute_remover.rb +1 -1
  29. data/lib/temple/html/attribute_sorter.rb +1 -1
  30. data/lib/temple/html/fast.rb +49 -44
  31. data/lib/temple/html/pretty.rb +34 -43
  32. data/lib/temple/html/safe.rb +23 -0
  33. data/lib/temple/map.rb +105 -0
  34. data/lib/temple/mixins/dispatcher.rb +10 -7
  35. data/lib/temple/mixins/engine_dsl.rb +42 -67
  36. data/lib/temple/mixins/grammar_dsl.rb +10 -8
  37. data/lib/temple/mixins/options.rb +26 -24
  38. data/lib/temple/mixins/template.rb +3 -3
  39. data/lib/temple/static_analyzer.rb +77 -0
  40. data/lib/temple/templates/rails.rb +17 -36
  41. data/lib/temple/templates/tilt.rb +7 -13
  42. data/lib/temple/utils.rb +27 -29
  43. data/lib/temple/version.rb +1 -1
  44. data/lib/temple.rb +8 -4
  45. data/spec/engine_spec.rb +189 -0
  46. data/{test/test_erb.rb → spec/erb_spec.rb} +12 -13
  47. data/spec/filter_spec.rb +29 -0
  48. data/{test/filters/test_code_merger.rb → spec/filters/code_merger_spec.rb} +7 -7
  49. data/{test/filters/test_control_flow.rb → spec/filters/control_flow_spec.rb} +13 -13
  50. data/{test/filters/test_dynamic_inliner.rb → spec/filters/dynamic_inliner_spec.rb} +18 -18
  51. data/{test/filters/test_eraser.rb → spec/filters/eraser_spec.rb} +13 -13
  52. data/{test/filters/test_escapable.rb → spec/filters/escapable_spec.rb} +15 -13
  53. data/{test/filters/test_multi_flattener.rb → spec/filters/multi_flattener_spec.rb} +4 -4
  54. data/spec/filters/static_analyzer_spec.rb +35 -0
  55. data/{test/filters/test_static_merger.rb → spec/filters/static_merger_spec.rb} +7 -7
  56. data/spec/filters/string_splitter_spec.rb +50 -0
  57. data/spec/generator_spec.rb +158 -0
  58. data/spec/grammar_spec.rb +47 -0
  59. data/{test/html/test_attribute_merger.rb → spec/html/attribute_merger_spec.rb} +11 -11
  60. data/{test/html/test_attribute_remover.rb → spec/html/attribute_remover_spec.rb} +7 -7
  61. data/{test/html/test_attribute_sorter.rb → spec/html/attribute_sorter_spec.rb} +8 -8
  62. data/{test/html/test_fast.rb → spec/html/fast_spec.rb} +23 -23
  63. data/{test/html/test_pretty.rb → spec/html/pretty_spec.rb} +9 -15
  64. data/spec/map_spec.rb +39 -0
  65. data/{test/mixins/test_dispatcher.rb → spec/mixins/dispatcher_spec.rb} +12 -12
  66. data/{test/mixins/test_grammar_dsl.rb → spec/mixins/grammar_dsl_spec.rb} +19 -19
  67. data/{test/helper.rb → spec/spec_helper.rb} +9 -15
  68. data/spec/static_analyzer_spec.rb +39 -0
  69. data/spec/utils_spec.rb +39 -0
  70. data/temple.gemspec +4 -2
  71. metadata +62 -63
  72. data/.travis.yml +0 -13
  73. data/lib/temple/hash.rb +0 -104
  74. data/test/test_engine.rb +0 -170
  75. data/test/test_filter.rb +0 -29
  76. data/test/test_generator.rb +0 -136
  77. data/test/test_grammar.rb +0 -47
  78. data/test/test_hash.rb +0 -39
  79. data/test/test_utils.rb +0 -39
data/lib/temple.rb CHANGED
@@ -10,9 +10,10 @@ module Temple
10
10
  autoload :Filter, 'temple/filter'
11
11
  autoload :Templates, 'temple/templates'
12
12
  autoload :Grammar, 'temple/grammar'
13
- autoload :ImmutableHash, 'temple/hash'
14
- autoload :MutableHash, 'temple/hash'
15
- autoload :OptionHash, 'temple/hash'
13
+ autoload :ImmutableMap, 'temple/map'
14
+ autoload :MutableMap, 'temple/map'
15
+ autoload :OptionMap, 'temple/map'
16
+ autoload :StaticAnalyzer, 'temple/static_analyzer'
16
17
 
17
18
  module Mixins
18
19
  autoload :Dispatcher, 'temple/mixins/dispatcher'
@@ -20,7 +21,7 @@ module Temple
20
21
  autoload :EngineDSL, 'temple/mixins/engine_dsl'
21
22
  autoload :GrammarDSL, 'temple/mixins/grammar_dsl'
22
23
  autoload :Options, 'temple/mixins/options'
23
- autoload :DefaultOptions, 'temple/mixins/options'
24
+ autoload :ClassOptions, 'temple/mixins/options'
24
25
  autoload :Template, 'temple/mixins/template'
25
26
  end
26
27
 
@@ -40,10 +41,13 @@ module Temple
40
41
  end
41
42
 
42
43
  module Filters
44
+ autoload :Ambles, 'temple/filters/ambles'
43
45
  autoload :CodeMerger, 'temple/filters/code_merger'
44
46
  autoload :ControlFlow, 'temple/filters/control_flow'
45
47
  autoload :MultiFlattener, 'temple/filters/multi_flattener'
48
+ autoload :StaticAnalyzer, 'temple/filters/static_analyzer'
46
49
  autoload :StaticMerger, 'temple/filters/static_merger'
50
+ autoload :StringSplitter, 'temple/filters/string_splitter'
47
51
  autoload :DynamicInliner, 'temple/filters/dynamic_inliner'
48
52
  autoload :Escapable, 'temple/filters/escapable'
49
53
  autoload :Eraser, 'temple/filters/eraser'
@@ -0,0 +1,189 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ class Callable1
5
+ def call(exp)
6
+ exp
7
+ end
8
+ end
9
+
10
+ class Callable2
11
+ def call(exp)
12
+ exp
13
+ end
14
+ end
15
+
16
+ class MySpecialFilter
17
+ def initialize(opts = {})
18
+ end
19
+
20
+ def call(exp)
21
+ exp
22
+ end
23
+ end
24
+
25
+ class TestEngine < Temple::Engine
26
+ use(:Parser) do |input|
27
+ [:static, input]
28
+ end
29
+ use :MyFilter1, proc {|exp| exp }
30
+ use :MyFilter2, proc {|exp| exp }
31
+ use Temple::HTML::Pretty, pretty: true
32
+ filter :MultiFlattener
33
+ generator :ArrayBuffer
34
+ use(:BeforeBeforeLast) { MySpecialFilter }
35
+ use :BeforeLast, Callable1.new
36
+ use(:Last) { Callable2.new }
37
+ end
38
+
39
+ describe Temple::Engine do
40
+ it 'should build chain' do
41
+ expect(TestEngine.chain.size).to eq(9)
42
+
43
+ expect(TestEngine.chain[0].first).to eq(:Parser)
44
+ expect(TestEngine.chain[0].size).to eq(2)
45
+ expect(TestEngine.chain[0].last).to be_a(Proc)
46
+
47
+ expect(TestEngine.chain[1].first).to eq(:MyFilter1)
48
+ expect(TestEngine.chain[1].size).to eq(2)
49
+ expect(TestEngine.chain[1].last).to be_a(Proc)
50
+
51
+ expect(TestEngine.chain[2].first).to eq(:MyFilter2)
52
+ expect(TestEngine.chain[2].size).to eq(2)
53
+ expect(TestEngine.chain[2].last).to be_a(Proc)
54
+
55
+ expect(TestEngine.chain[3].first).to eq(:'Temple::HTML::Pretty')
56
+ expect(TestEngine.chain[3].size).to eq(2)
57
+ expect(TestEngine.chain[3].last).to be_a(Proc)
58
+
59
+ expect(TestEngine.chain[4].first).to eq(:MultiFlattener)
60
+ expect(TestEngine.chain[4].size).to eq(2)
61
+ expect(TestEngine.chain[4].last).to be_a(Proc)
62
+
63
+ expect(TestEngine.chain[5].first).to eq(:ArrayBuffer)
64
+ expect(TestEngine.chain[5].size).to eq(2)
65
+ expect(TestEngine.chain[5].last).to be_a(Proc)
66
+
67
+ expect(TestEngine.chain[6].first).to eq(:BeforeBeforeLast)
68
+ expect(TestEngine.chain[6].size).to eq(2)
69
+ expect(TestEngine.chain[6].last).to be_a(Proc)
70
+
71
+ expect(TestEngine.chain[7].first).to eq(:BeforeLast)
72
+ expect(TestEngine.chain[7].size).to eq(2)
73
+ expect(TestEngine.chain[7].last).to be_a(Proc)
74
+
75
+ expect(TestEngine.chain[8].first).to eq(:Last)
76
+ expect(TestEngine.chain[8].size).to eq(2)
77
+ expect(TestEngine.chain[8].last).to be_a(Proc)
78
+ end
79
+
80
+ it 'should instantiate chain' do
81
+ call_chain = TestEngine.new.send(:call_chain)
82
+ expect(call_chain[0]).to be_a(Method)
83
+ expect(call_chain[1]).to be_a(Method)
84
+ expect(call_chain[2]).to be_a(Method)
85
+ expect(call_chain[3]).to be_a(Temple::HTML::Pretty)
86
+ expect(call_chain[4]).to be_a(Temple::Filters::MultiFlattener)
87
+ expect(call_chain[5]).to be_a(Temple::Generators::ArrayBuffer)
88
+ expect(call_chain[6]).to be_a(MySpecialFilter)
89
+ expect(call_chain[7]).to be_a(Callable1)
90
+ expect(call_chain[8]).to be_a(Callable2)
91
+ end
92
+
93
+ it 'should have #append' do
94
+ engine = TestEngine.new
95
+ call_chain = engine.send(:call_chain)
96
+ expect(call_chain.size).to eq(9)
97
+
98
+ engine.append :MyFilter3 do |exp|
99
+ exp
100
+ end
101
+
102
+ expect(TestEngine.chain.size).to eq(9)
103
+ expect(engine.chain.size).to eq(10)
104
+ expect(engine.chain[9].first).to eq(:MyFilter3)
105
+ expect(engine.chain[9].size).to eq(2)
106
+ expect(engine.chain[9].last).to be_a(Proc)
107
+
108
+ call_chain = engine.send(:call_chain)
109
+ expect(call_chain.size).to eq(10)
110
+ expect(call_chain[9]).to be_a(Method)
111
+ end
112
+
113
+ it 'should have #prepend' do
114
+ engine = TestEngine.new
115
+ call_chain = engine.send(:call_chain)
116
+ expect(call_chain.size).to eq(9)
117
+
118
+ engine.prepend :MyFilter0 do |exp|
119
+ exp
120
+ end
121
+
122
+ expect(TestEngine.chain.size).to eq(9)
123
+ expect(engine.chain.size).to eq(10)
124
+ expect(engine.chain[0].first).to eq(:MyFilter0)
125
+ expect(engine.chain[0].size).to eq(2)
126
+ expect(engine.chain[0].last).to be_a(Proc)
127
+ expect(engine.chain[1].first).to eq(:Parser)
128
+
129
+ call_chain = engine.send(:call_chain)
130
+ expect(call_chain.size).to eq(10)
131
+ expect(call_chain[0]).to be_a(Method)
132
+ end
133
+
134
+ it 'should have #after' do
135
+ engine = TestEngine.new
136
+ engine.after :Parser, :MyFilter0 do |exp|
137
+ exp
138
+ end
139
+ expect(TestEngine.chain.size).to eq(9)
140
+ expect(engine.chain.size).to eq(10)
141
+ expect(engine.chain[0].first).to eq(:Parser)
142
+ expect(engine.chain[1].first).to eq(:MyFilter0)
143
+ expect(engine.chain[2].first).to eq(:MyFilter1)
144
+ end
145
+
146
+ it 'should have #before' do
147
+ engine = TestEngine.new
148
+ engine.before :MyFilter1, :MyFilter0 do |exp|
149
+ exp
150
+ end
151
+ expect(TestEngine.chain.size).to eq(9)
152
+ expect(engine.chain.size).to eq(10)
153
+ expect(engine.chain[0].first).to eq(:Parser)
154
+ expect(engine.chain[1].first).to eq(:MyFilter0)
155
+ expect(engine.chain[2].first).to eq(:MyFilter1)
156
+ end
157
+
158
+ it 'should have #remove' do
159
+ engine = TestEngine.new
160
+ engine.remove :MyFilter1
161
+ expect(TestEngine.chain.size).to eq(9)
162
+ expect(engine.chain.size).to eq(8)
163
+ expect(engine.chain[0].first).to eq(:Parser)
164
+ expect(engine.chain[1].first).to eq(:MyFilter2)
165
+
166
+ engine = TestEngine.new
167
+ engine.remove /Last/
168
+ expect(engine.chain.size).to eq(6)
169
+ end
170
+
171
+ it 'should have #replace' do
172
+ engine = TestEngine.new
173
+ engine.replace :Parser, :MyParser do |exp|
174
+ exp
175
+ end
176
+ expect(engine.chain.size).to eq(9)
177
+ expect(engine.chain[0].first).to eq(:MyParser)
178
+ end
179
+
180
+ it 'should work with inheritance' do
181
+ inherited_engine = Class.new(TestEngine)
182
+ expect(inherited_engine.chain.size).to eq(9)
183
+ inherited_engine.append :MyFilter3 do |exp|
184
+ exp
185
+ end
186
+ expect(inherited_engine.chain.size).to eq(10)
187
+ expect(TestEngine.chain.size).to eq(9)
188
+ end
189
+ end
@@ -1,6 +1,5 @@
1
- require 'helper'
2
- require 'erb'
3
- require 'tilt'
1
+ require 'spec_helper'
2
+ require 'tilt/erubi'
4
3
 
5
4
  describe Temple::ERB::Engine do
6
5
  it 'should compile erb' do
@@ -12,7 +11,7 @@ describe Temple::ERB::Engine do
12
11
  <% end %>
13
12
  }
14
13
 
15
- erb(src).should.equal ERB.new(src).result
14
+ expect(erb(src)).to eq(erubi(src))
16
15
  end
17
16
 
18
17
  it 'should recognize comments' do
@@ -21,7 +20,7 @@ hello
21
20
  <%# comment -- ignored -- useful in testing %>
22
21
  world}
23
22
 
24
- erb(src).should.equal ERB.new(src).result
23
+ expect(erb(src)).to eq(erubi(src))
25
24
  end
26
25
 
27
26
  it 'should recognize <%% and %%>' do
@@ -32,19 +31,19 @@ world}
32
31
  <% end %>
33
32
  }
34
33
 
35
- erb(src).should.equal "\n<%\n\n %>\n\n" #ERB.new(src).result
34
+ expect(erb(src)).to eq("\n<%\n %>\n")
36
35
  end
37
36
 
38
37
  it 'should escape automatically' do
39
- src = '<%= "<" %>'
38
+ src = '<%== "<" %>'
40
39
  ans = '&lt;'
41
- erb(src).should.equal ans
40
+ expect(erb(src)).to eq(ans)
42
41
  end
43
42
 
44
- it 'should support == to disable automatic escape' do
45
- src = '<%== "<" %>'
43
+ it 'should support = to disable automatic escape' do
44
+ src = '<%= "<" %>'
46
45
  ans = '<'
47
- erb(src).should.equal ans
46
+ expect(erb(src)).to eq(ans)
48
47
  end
49
48
 
50
49
  it 'should support trim mode' do
@@ -56,7 +55,7 @@ world}
56
55
  <% end %>
57
56
  }
58
57
 
59
- erb(src, :trim_mode => '>').should.equal ERB.new(src, nil, '>').result
60
- erb(src, :trim_mode => '<>').should.equal ERB.new(src, nil, '<>').result
58
+ expect(erb(src, trim: true)).to eq(erubi(src, trim: true))
59
+ expect(erb(src, trim: false)).to eq(erubi(src, trim: false))
61
60
  end
62
61
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ class SimpleFilter < Temple::Filter
4
+ define_options :key
5
+
6
+ def on_test(arg)
7
+ [:on_test, arg]
8
+ end
9
+ end
10
+
11
+ describe Temple::Filter do
12
+ it 'should support options' do
13
+ expect(Temple::Filter).to respond_to(:default_options)
14
+ expect(Temple::Filter).to respond_to(:set_default_options)
15
+ expect(Temple::Filter).to respond_to(:define_options)
16
+ expect(Temple::Filter.new.options).to be_a(Temple::ImmutableMap)
17
+ expect(SimpleFilter.new(key: 3).options[:key]).to eq(3)
18
+ end
19
+
20
+ it 'should implement call' do
21
+ expect(Temple::Filter.new.call([:exp])).to eq([:exp])
22
+ end
23
+
24
+ it 'should process expressions' do
25
+ filter = SimpleFilter.new
26
+ expect(filter.call([:unhandled])).to eq([:unhandled])
27
+ expect(filter.call([:test, 42])).to eq([:on_test, 42])
28
+ end
29
+ end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Temple::Filters::CodeMerger do
4
4
  before do
@@ -6,21 +6,21 @@ describe Temple::Filters::CodeMerger do
6
6
  end
7
7
 
8
8
  it 'should merge serveral codes' do
9
- @filter.call([:multi,
9
+ expect(@filter.call([:multi,
10
10
  [:code, "a"],
11
11
  [:code, "b"],
12
12
  [:code, "c"]
13
- ]).should.equal [:code, "a; b; c"]
13
+ ])).to eq [:code, "a; b; c"]
14
14
  end
15
15
 
16
16
  it 'should merge serveral codes around static' do
17
- @filter.call([:multi,
17
+ expect(@filter.call([:multi,
18
18
  [:code, "a"],
19
19
  [:code, "b"],
20
20
  [:static, "123"],
21
21
  [:code, "a"],
22
22
  [:code, "b"]
23
- ]).should.equal [:multi,
23
+ ])).to eq [:multi,
24
24
  [:code, "a; b"],
25
25
  [:static, "123"],
26
26
  [:code, "a; b"]
@@ -28,11 +28,11 @@ describe Temple::Filters::CodeMerger do
28
28
  end
29
29
 
30
30
  it 'should merge serveral codes with newlines' do
31
- @filter.call([:multi,
31
+ expect(@filter.call([:multi,
32
32
  [:code, "a"],
33
33
  [:code, "b"],
34
34
  [:newline],
35
35
  [:code, "c"]
36
- ]).should.equal [:code, "a; b\nc"]
36
+ ])).to eq [:code, "a; b\nc"]
37
37
  end
38
38
  end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Temple::Filters::ControlFlow do
4
4
  before do
@@ -6,18 +6,18 @@ describe Temple::Filters::ControlFlow do
6
6
  end
7
7
 
8
8
  it 'should process blocks' do
9
- @filter.call([:block, 'loop do',
9
+ expect(@filter.call([:block, 'loop do',
10
10
  [:static, 'Hello']
11
- ]).should.equal [:multi,
11
+ ])).to eq [:multi,
12
12
  [:code, 'loop do'],
13
13
  [:static, 'Hello'],
14
14
  [:code, 'end']]
15
15
  end
16
16
 
17
17
  it 'should process if' do
18
- @filter.call([:if, 'condition',
18
+ expect(@filter.call([:if, 'condition',
19
19
  [:static, 'Hello']
20
- ]).should.equal [:multi,
20
+ ])).to eq [:multi,
21
21
  [:code, 'if condition'],
22
22
  [:static, 'Hello'],
23
23
  [:code, 'end']
@@ -25,10 +25,10 @@ describe Temple::Filters::ControlFlow do
25
25
  end
26
26
 
27
27
  it 'should process if with else' do
28
- @filter.call([:if, 'condition',
28
+ expect(@filter.call([:if, 'condition',
29
29
  [:static, 'True'],
30
30
  [:static, 'False']
31
- ]).should.equal [:multi,
31
+ ])).to eq [:multi,
32
32
  [:code, 'if condition'],
33
33
  [:static, 'True'],
34
34
  [:code, 'else'],
@@ -38,12 +38,12 @@ describe Temple::Filters::ControlFlow do
38
38
  end
39
39
 
40
40
  it 'should create elsif' do
41
- @filter.call([:if, 'condition1',
41
+ expect(@filter.call([:if, 'condition1',
42
42
  [:static, '1'],
43
43
  [:if, 'condition2',
44
44
  [:static, '2'],
45
45
  [:static, '3']]
46
- ]).should.equal [:multi,
46
+ ])).to eq [:multi,
47
47
  [:code, 'if condition1'],
48
48
  [:static, '1'],
49
49
  [:code, 'elsif condition2'],
@@ -55,11 +55,11 @@ describe Temple::Filters::ControlFlow do
55
55
  end
56
56
 
57
57
  it 'should process cond' do
58
- @filter.call([:cond,
58
+ expect(@filter.call([:cond,
59
59
  ['cond1', [:exp1]],
60
60
  ['cond2', [:exp2]],
61
61
  [:else, [:exp3]],
62
- ]).should.equal [:multi,
62
+ ])).to eq [:multi,
63
63
  [:code, 'case'],
64
64
  [:code, 'when cond1'],
65
65
  [:exp1],
@@ -72,11 +72,11 @@ describe Temple::Filters::ControlFlow do
72
72
  end
73
73
 
74
74
  it 'should process case' do
75
- @filter.call([:case, 'var',
75
+ expect(@filter.call([:case, 'var',
76
76
  ['Array', [:exp1]],
77
77
  ['String', [:exp2]],
78
78
  [:else, [:exp3]],
79
- ]).should.equal [:multi,
79
+ ])).to eq [:multi,
80
80
  [:code, 'case (var)'],
81
81
  [:code, 'when Array'],
82
82
  [:exp1],
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Temple::Filters::DynamicInliner do
4
4
  before do
@@ -6,38 +6,38 @@ describe Temple::Filters::DynamicInliner do
6
6
  end
7
7
 
8
8
  it 'should compile several statics into dynamic' do
9
- @filter.call([:multi,
9
+ expect(@filter.call([:multi,
10
10
  [:static, "Hello "],
11
11
  [:static, "World\n "],
12
12
  [:static, "Have a nice day"]
13
- ]).should.equal [:dynamic, '"Hello World\n Have a nice day"']
13
+ ])).to eq [:dynamic, '"Hello World\n Have a nice day"']
14
14
  end
15
15
 
16
16
  it 'should compile several dynamics into dynamic' do
17
- @filter.call([:multi,
17
+ expect(@filter.call([:multi,
18
18
  [:dynamic, "@hello"],
19
19
  [:dynamic, "@world"],
20
20
  [:dynamic, "@yeah"]
21
- ]).should.equal [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
21
+ ])).to eq [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
22
22
  end
23
23
 
24
24
  it 'should compile static and dynamic into dynamic' do
25
- @filter.call([:multi,
25
+ expect(@filter.call([:multi,
26
26
  [:static, "Hello"],
27
27
  [:dynamic, "@world"],
28
28
  [:dynamic, "@yeah"],
29
29
  [:static, "Nice"]
30
- ]).should.equal [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
30
+ ])).to eq [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
31
31
  end
32
32
 
33
33
  it 'should merge statics and dynamics around a code' do
34
- exp = @filter.call([:multi,
34
+ expect(@filter.call([:multi,
35
35
  [:static, "Hello "],
36
36
  [:dynamic, "@world"],
37
37
  [:code, "Oh yeah"],
38
38
  [:dynamic, "@yeah"],
39
39
  [:static, "Once more"]
40
- ]).should.equal [:multi,
40
+ ])).to eq [:multi,
41
41
  [:dynamic, '"Hello #{@world}"'],
42
42
  [:code, "Oh yeah"],
43
43
  [:dynamic, '"#{@yeah}Once more"']
@@ -45,19 +45,19 @@ describe Temple::Filters::DynamicInliner do
45
45
  end
46
46
 
47
47
  it 'should keep codes intact' do
48
- @filter.call([:multi, [:code, 'foo']]).should.equal [:code, 'foo']
48
+ expect(@filter.call([:multi, [:code, 'foo']])).to eq([:code, 'foo'])
49
49
  end
50
50
 
51
51
  it 'should keep single statics intact' do
52
- @filter.call([:multi, [:static, 'foo']]).should.equal [:static, 'foo']
52
+ expect(@filter.call([:multi, [:static, 'foo']])).to eq([:static, 'foo'])
53
53
  end
54
54
 
55
55
  it 'should keep single dynamic intact' do
56
- @filter.call([:multi, [:dynamic, 'foo']]).should.equal [:dynamic, 'foo']
56
+ expect(@filter.call([:multi, [:dynamic, 'foo']])).to eq([:dynamic, 'foo'])
57
57
  end
58
58
 
59
59
  it 'should inline inside multi' do
60
- @filter.call([:multi,
60
+ expect(@filter.call([:multi,
61
61
  [:static, "Hello "],
62
62
  [:dynamic, "@world"],
63
63
  [:multi,
@@ -65,7 +65,7 @@ describe Temple::Filters::DynamicInliner do
65
65
  [:dynamic, "@world"]],
66
66
  [:static, "Hello "],
67
67
  [:dynamic, "@world"]
68
- ]).should.equal [:multi,
68
+ ])).to eq [:multi,
69
69
  [:dynamic, '"Hello #{@world}"'],
70
70
  [:dynamic, '"Hello #{@world}"'],
71
71
  [:dynamic, '"Hello #{@world}"']
@@ -73,20 +73,20 @@ describe Temple::Filters::DynamicInliner do
73
73
  end
74
74
 
75
75
  it 'should merge across newlines' do
76
- exp = @filter.call([:multi,
76
+ exp = expect(@filter.call([:multi,
77
77
  [:static, "Hello \n"],
78
78
  [:newline],
79
79
  [:dynamic, "@world"],
80
80
  [:newline]
81
- ]).should.equal [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
81
+ ])).to eq [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
82
82
  end
83
83
 
84
84
  it 'should compile static followed by newline' do
85
- @filter.call([:multi,
85
+ expect(@filter.call([:multi,
86
86
  [:static, "Hello \n"],
87
87
  [:newline],
88
88
  [:code, "world"]
89
- ]).should.equal [:multi,
89
+ ])).to eq [:multi,
90
90
  [:static, "Hello \n"],
91
91
  [:newline],
92
92
  [:code, "world"]
@@ -1,13 +1,13 @@
1
- require 'helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Temple::Filters::Eraser do
4
4
  it 'should respect keep' do
5
- eraser = Temple::Filters::Eraser.new(:keep => [:a])
6
- eraser.call([:multi,
5
+ eraser = Temple::Filters::Eraser.new(keep: [:a])
6
+ expect(eraser.call([:multi,
7
7
  [:a],
8
8
  [:b],
9
9
  [:c]
10
- ]).should.equal [:multi,
10
+ ])).to eq [:multi,
11
11
  [:a],
12
12
  [:multi],
13
13
  [:multi]
@@ -15,12 +15,12 @@ describe Temple::Filters::Eraser do
15
15
  end
16
16
 
17
17
  it 'should respect erase' do
18
- eraser = Temple::Filters::Eraser.new(:erase => [:a])
19
- eraser.call([:multi,
18
+ eraser = Temple::Filters::Eraser.new(erase: [:a])
19
+ expect(eraser.call([:multi,
20
20
  [:a],
21
21
  [:b],
22
22
  [:c]
23
- ]).should.equal [:multi,
23
+ ])).to eq [:multi,
24
24
  [:multi],
25
25
  [:b],
26
26
  [:c]
@@ -28,12 +28,12 @@ describe Temple::Filters::Eraser do
28
28
  end
29
29
 
30
30
  it 'should choose erase over keep' do
31
- eraser = Temple::Filters::Eraser.new(:keep => [:a, :b], :erase => [:a])
32
- eraser.call([:multi,
31
+ eraser = Temple::Filters::Eraser.new(keep: [:a, :b], erase: [:a])
32
+ expect(eraser.call([:multi,
33
33
  [:a],
34
34
  [:b],
35
35
  [:c]
36
- ]).should.equal [:multi,
36
+ ])).to eq [:multi,
37
37
  [:multi],
38
38
  [:b],
39
39
  [:multi]
@@ -41,12 +41,12 @@ describe Temple::Filters::Eraser do
41
41
  end
42
42
 
43
43
  it 'should erase nested types' do
44
- eraser = Temple::Filters::Eraser.new(:erase => [[:a, :b]])
45
- eraser.call([:multi,
44
+ eraser = Temple::Filters::Eraser.new(erase: [[:a, :b]])
45
+ expect(eraser.call([:multi,
46
46
  [:a, :a],
47
47
  [:a, :b],
48
48
  [:b]
49
- ]).should.equal [:multi,
49
+ ])).to eq [:multi,
50
50
  [:a, :a],
51
51
  [:multi],
52
52
  [:b]
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Temple::Filters::Escapable do
4
4
  before do
@@ -6,11 +6,11 @@ describe Temple::Filters::Escapable do
6
6
  end
7
7
 
8
8
  it 'should handle escape expressions' do
9
- @filter.call([:escape, true,
9
+ expect(@filter.call([:escape, true,
10
10
  [:multi,
11
11
  [:static, "a < b"],
12
12
  [:dynamic, "ruby_method"]]
13
- ]).should.equal [:multi,
13
+ ])).to eq [:multi,
14
14
  [:static, "a &lt; b"],
15
15
  [:dynamic, "::Temple::Utils.escape_html((ruby_method))"],
16
16
  ]
@@ -18,30 +18,32 @@ describe Temple::Filters::Escapable do
18
18
 
19
19
  it 'should keep codes intact' do
20
20
  exp = [:multi, [:code, 'foo']]
21
- @filter.call(exp).should.equal exp
21
+ expect(@filter.call(exp)).to eq(exp)
22
22
  end
23
23
 
24
24
  it 'should keep statics intact' do
25
25
  exp = [:multi, [:static, '<']]
26
- @filter.call(exp).should.equal exp
26
+ expect(@filter.call(exp)).to eq(exp)
27
27
  end
28
28
 
29
29
  it 'should keep dynamic intact' do
30
30
  exp = [:multi, [:dynamic, 'foo']]
31
- @filter.call(exp).should.equal exp
31
+ expect(@filter.call(exp)).to eq(exp)
32
32
  end
33
33
 
34
34
  it 'should have use_html_safe option' do
35
- filter = Temple::Filters::Escapable.new(:use_html_safe => true)
36
- filter.call([:escape, true,
37
- [:static, HtmlSafeString.new("a < b")]
38
- ]).should.equal [:static, "a < b"]
35
+ with_html_safe do
36
+ filter = Temple::Filters::Escapable.new(use_html_safe: true)
37
+ expect(filter.call([:escape, true,
38
+ [:static, Temple::HTML::SafeString.new("a < b")]
39
+ ])).to eq [:static, "a < b"]
40
+ end
39
41
  end
40
42
 
41
43
  it 'should support censoring' do
42
- filter = Temple::Filters::Escapable.new(:escape_code => '(%s).gsub("Temple sucks", "Temple rocks")')
43
- filter.call([:escape, true,
44
+ filter = Temple::Filters::Escapable.new(escape_code: '(%s).gsub("Temple sucks", "Temple rocks")')
45
+ expect(filter.call([:escape, true,
44
46
  [:static, "~~ Temple sucks ~~"]
45
- ]).should.equal [:static, "~~ Temple rocks ~~"]
47
+ ])).to eq [:static, "~~ Temple rocks ~~"]
46
48
  end
47
49
  end