temple 0.8.2 → 0.10.4

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 (85) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +37 -0
  3. data/.gitignore +1 -0
  4. data/CHANGES +43 -1
  5. data/Gemfile +0 -1
  6. data/README.md +1 -1
  7. data/Rakefile +4 -24
  8. data/lib/temple/engine.rb +1 -0
  9. data/lib/temple/erb/engine.rb +3 -0
  10. data/lib/temple/erb/parser.rb +2 -1
  11. data/lib/temple/erb/template.rb +1 -0
  12. data/lib/temple/erb/trimming.rb +1 -0
  13. data/lib/temple/exceptions.rb +1 -0
  14. data/lib/temple/filter.rb +1 -0
  15. data/lib/temple/filters/ambles.rb +22 -0
  16. data/lib/temple/filters/code_merger.rb +1 -0
  17. data/lib/temple/filters/control_flow.rb +1 -0
  18. data/lib/temple/filters/dynamic_inliner.rb +2 -1
  19. data/lib/temple/filters/dynamic_merger.rb +69 -0
  20. data/lib/temple/filters/encoding.rb +2 -1
  21. data/lib/temple/filters/eraser.rb +1 -0
  22. data/lib/temple/filters/escapable.rb +1 -0
  23. data/lib/temple/filters/multi_flattener.rb +1 -0
  24. data/lib/temple/filters/remove_bom.rb +1 -0
  25. data/lib/temple/filters/static_analyzer.rb +1 -0
  26. data/lib/temple/filters/static_merger.rb +1 -0
  27. data/lib/temple/filters/string_splitter.rb +13 -1
  28. data/lib/temple/filters/validator.rb +1 -0
  29. data/lib/temple/generator.rb +5 -2
  30. data/lib/temple/generators/array.rb +1 -0
  31. data/lib/temple/generators/array_buffer.rb +1 -0
  32. data/lib/temple/generators/erb.rb +1 -0
  33. data/lib/temple/generators/rails_output_buffer.rb +4 -4
  34. data/lib/temple/generators/string_buffer.rb +2 -1
  35. data/lib/temple/grammar.rb +1 -0
  36. data/lib/temple/html/attribute_merger.rb +1 -0
  37. data/lib/temple/html/attribute_remover.rb +1 -0
  38. data/lib/temple/html/attribute_sorter.rb +1 -0
  39. data/lib/temple/html/dispatcher.rb +1 -0
  40. data/lib/temple/html/fast.rb +1 -0
  41. data/lib/temple/html/filter.rb +1 -0
  42. data/lib/temple/html/pretty.rb +1 -0
  43. data/lib/temple/html/safe.rb +1 -0
  44. data/lib/temple/map.rb +1 -0
  45. data/lib/temple/mixins/dispatcher.rb +1 -0
  46. data/lib/temple/mixins/engine_dsl.rb +1 -0
  47. data/lib/temple/mixins/grammar_dsl.rb +4 -2
  48. data/lib/temple/mixins/options.rb +1 -0
  49. data/lib/temple/mixins/template.rb +1 -0
  50. data/lib/temple/parser.rb +1 -0
  51. data/lib/temple/static_analyzer.rb +1 -0
  52. data/lib/temple/templates/rails.rb +7 -2
  53. data/lib/temple/templates/tilt.rb +2 -9
  54. data/lib/temple/templates.rb +1 -0
  55. data/lib/temple/utils.rb +5 -15
  56. data/lib/temple/version.rb +2 -1
  57. data/lib/temple.rb +3 -0
  58. data/temple.gemspec +4 -6
  59. metadata +10 -63
  60. data/.travis.yml +0 -30
  61. data/test/filters/test_code_merger.rb +0 -38
  62. data/test/filters/test_control_flow.rb +0 -90
  63. data/test/filters/test_dynamic_inliner.rb +0 -95
  64. data/test/filters/test_eraser.rb +0 -55
  65. data/test/filters/test_escapable.rb +0 -49
  66. data/test/filters/test_multi_flattener.rb +0 -33
  67. data/test/filters/test_static_analyzer.rb +0 -37
  68. data/test/filters/test_static_merger.rb +0 -41
  69. data/test/filters/test_string_splitter.rb +0 -25
  70. data/test/helper.rb +0 -30
  71. data/test/html/test_attribute_merger.rb +0 -76
  72. data/test/html/test_attribute_remover.rb +0 -43
  73. data/test/html/test_attribute_sorter.rb +0 -48
  74. data/test/html/test_fast.rb +0 -97
  75. data/test/html/test_pretty.rb +0 -55
  76. data/test/mixins/test_dispatcher.rb +0 -70
  77. data/test/mixins/test_grammar_dsl.rb +0 -86
  78. data/test/test_engine.rb +0 -189
  79. data/test/test_erb.rb +0 -61
  80. data/test/test_filter.rb +0 -29
  81. data/test/test_generator.rb +0 -158
  82. data/test/test_grammar.rb +0 -47
  83. data/test/test_map.rb +0 -39
  84. data/test/test_static_analyzer.rb +0 -39
  85. data/test/test_utils.rb +0 -39
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Templates
3
4
  class Rails
@@ -5,6 +6,10 @@ module Temple
5
6
 
6
7
  def call(template, source = nil)
7
8
  opts = {}.update(self.class.options).update(file: template.identifier)
9
+ if ActionView::Base.try(:annotate_rendered_view_with_filenames) && template.format == :html
10
+ opts[:preamble] = "<!-- BEGIN #{template.short_identifier} -->\n"
11
+ opts[:postamble] = "<!-- END #{template.short_identifier} -->\n"
12
+ end
8
13
  self.class.compile((source || template.source), opts)
9
14
  end
10
15
 
@@ -14,8 +19,8 @@ module Temple
14
19
 
15
20
  def self.register_as(*names)
16
21
  raise 'Rails is not loaded - Temple::Templates::Rails cannot be used' unless defined?(::ActionView)
17
- if ::ActiveSupport::VERSION::MAJOR < 3 || ::ActiveSupport::VERSION::MAJOR == 3 && ::ActiveSupport::VERSION::MINOR < 1
18
- raise "Temple supports only Rails 3.1 and greater, your Rails version is #{::ActiveSupport::VERSION::STRING}"
22
+ if ::ActiveSupport::VERSION::MAJOR < 5
23
+ raise "Temple supports only Rails 5 and greater, your Rails version is #{::ActiveSupport::VERSION::STRING}"
19
24
  end
20
25
  names.each do |name|
21
26
  ::ActionView::Template.register_template_handler name.to_sym, new
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'tilt'
2
3
 
3
4
  module Temple
@@ -7,14 +8,6 @@ module Temple
7
8
 
8
9
  define_options mime_type: 'text/html'
9
10
 
10
- def self.default_mime_type
11
- options[:mime_type]
12
- end
13
-
14
- def self.default_mime_type=(mime_type)
15
- options[:mime_type] = mime_type
16
- end
17
-
18
11
  # Prepare Temple template
19
12
  #
20
13
  # Called immediately after template data is loaded.
@@ -22,7 +15,7 @@ module Temple
22
15
  # @return [void]
23
16
  def prepare
24
17
  opts = {}.update(self.class.options).update(options).update(file: eval_file)
25
- opts.delete(:mime_type)
18
+ metadata[:mime_type] = opts.delete(:mime_type)
26
19
  if opts.include?(:outvar)
27
20
  opts[:buffer] = opts.delete(:outvar)
28
21
  opts[:save_buffer] = true
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # @api public
3
4
  module Templates
data/lib/temple/utils.rb CHANGED
@@ -1,10 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  begin
2
- require 'escape_utils'
3
+ require 'cgi/escape'
3
4
  rescue LoadError
4
- begin
5
- require 'cgi/escape'
6
- rescue LoadError
7
- end
8
5
  end
9
6
 
10
7
  module Temple
@@ -18,18 +15,11 @@ module Temple
18
15
  # @param html [String] The string to escape
19
16
  # @return [String] The escaped string
20
17
  def escape_html_safe(html)
21
- html.html_safe? ? html : escape_html(html)
18
+ s = html.to_s
19
+ s.html_safe? || html.html_safe? ? s : escape_html(s)
22
20
  end
23
21
 
24
- if defined?(EscapeUtils)
25
- # Returns an escaped copy of `html`.
26
- #
27
- # @param html [String] The string to escape
28
- # @return [String] The escaped string
29
- def escape_html(html)
30
- EscapeUtils.escape_html(html.to_s, false)
31
- end
32
- elsif defined?(CGI.escapeHTML)
22
+ if defined?(CGI.escapeHTML)
33
23
  # Returns an escaped copy of `html`.
34
24
  #
35
25
  # @param html [String] The string to escape
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
- VERSION = '0.8.2'
3
+ VERSION = '0.10.4'
3
4
  end
data/lib/temple.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'temple/version'
2
3
 
3
4
  module Temple
@@ -41,6 +42,7 @@ module Temple
41
42
  end
42
43
 
43
44
  module Filters
45
+ autoload :Ambles, 'temple/filters/ambles'
44
46
  autoload :CodeMerger, 'temple/filters/code_merger'
45
47
  autoload :ControlFlow, 'temple/filters/control_flow'
46
48
  autoload :MultiFlattener, 'temple/filters/multi_flattener'
@@ -48,6 +50,7 @@ module Temple
48
50
  autoload :StaticMerger, 'temple/filters/static_merger'
49
51
  autoload :StringSplitter, 'temple/filters/string_splitter'
50
52
  autoload :DynamicInliner, 'temple/filters/dynamic_inliner'
53
+ autoload :DynamicMerger, 'temple/filters/dynamic_merger'
51
54
  autoload :Escapable, 'temple/filters/escapable'
52
55
  autoload :Eraser, 'temple/filters/eraser'
53
56
  autoload :Validator, 'temple/filters/validator'
data/temple.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
1
  require File.dirname(__FILE__) + '/lib/temple/version'
3
2
  require 'date'
4
3
 
@@ -13,17 +12,16 @@ Gem::Specification.new do |s|
13
12
  s.summary = 'Template compilation framework in Ruby'
14
13
 
15
14
  s.require_paths = %w(lib)
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
18
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
17
  s.license = 'MIT'
20
18
 
21
- s.required_ruby_version = '>=1.9.2'
19
+ s.required_ruby_version = '>= 2.5.0'
22
20
 
23
21
  # Tilt is only development dependency because most parts of Temple
24
22
  # can be used without it.
25
23
  s.add_development_dependency('tilt')
26
- s.add_development_dependency('bacon')
24
+ s.add_development_dependency('rspec')
27
25
  s.add_development_dependency('rake')
28
- s.add_development_dependency('erubis')
26
+ s.add_development_dependency('erubi')
29
27
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: temple
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.10.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus Holm
8
8
  - Daniel Mendler
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2019-09-12 00:00:00.000000000 Z
11
+ date: 2025-07-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: tilt
@@ -26,7 +25,7 @@ dependencies:
26
25
  - !ruby/object:Gem::Version
27
26
  version: '0'
28
27
  - !ruby/object:Gem::Dependency
29
- name: bacon
28
+ name: rspec
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - ">="
@@ -54,7 +53,7 @@ dependencies:
54
53
  - !ruby/object:Gem::Version
55
54
  version: '0'
56
55
  - !ruby/object:Gem::Dependency
57
- name: erubis
56
+ name: erubi
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
59
  - - ">="
@@ -67,7 +66,6 @@ dependencies:
67
66
  - - ">="
68
67
  - !ruby/object:Gem::Version
69
68
  version: '0'
70
- description:
71
69
  email:
72
70
  - judofyr@gmail.com
73
71
  - mail@daniel-mendler.de
@@ -75,8 +73,8 @@ executables: []
75
73
  extensions: []
76
74
  extra_rdoc_files: []
77
75
  files:
76
+ - ".github/workflows/test.yml"
78
77
  - ".gitignore"
79
- - ".travis.yml"
80
78
  - ".yardopts"
81
79
  - CHANGES
82
80
  - EXPRESSIONS.md
@@ -92,9 +90,11 @@ files:
92
90
  - lib/temple/erb/trimming.rb
93
91
  - lib/temple/exceptions.rb
94
92
  - lib/temple/filter.rb
93
+ - lib/temple/filters/ambles.rb
95
94
  - lib/temple/filters/code_merger.rb
96
95
  - lib/temple/filters/control_flow.rb
97
96
  - lib/temple/filters/dynamic_inliner.rb
97
+ - lib/temple/filters/dynamic_merger.rb
98
98
  - lib/temple/filters/encoding.rb
99
99
  - lib/temple/filters/eraser.rb
100
100
  - lib/temple/filters/escapable.rb
@@ -133,36 +133,10 @@ files:
133
133
  - lib/temple/utils.rb
134
134
  - lib/temple/version.rb
135
135
  - temple.gemspec
136
- - test/filters/test_code_merger.rb
137
- - test/filters/test_control_flow.rb
138
- - test/filters/test_dynamic_inliner.rb
139
- - test/filters/test_eraser.rb
140
- - test/filters/test_escapable.rb
141
- - test/filters/test_multi_flattener.rb
142
- - test/filters/test_static_analyzer.rb
143
- - test/filters/test_static_merger.rb
144
- - test/filters/test_string_splitter.rb
145
- - test/helper.rb
146
- - test/html/test_attribute_merger.rb
147
- - test/html/test_attribute_remover.rb
148
- - test/html/test_attribute_sorter.rb
149
- - test/html/test_fast.rb
150
- - test/html/test_pretty.rb
151
- - test/mixins/test_dispatcher.rb
152
- - test/mixins/test_grammar_dsl.rb
153
- - test/test_engine.rb
154
- - test/test_erb.rb
155
- - test/test_filter.rb
156
- - test/test_generator.rb
157
- - test/test_grammar.rb
158
- - test/test_map.rb
159
- - test/test_static_analyzer.rb
160
- - test/test_utils.rb
161
136
  homepage: https://github.com/judofyr/temple
162
137
  licenses:
163
138
  - MIT
164
139
  metadata: {}
165
- post_install_message:
166
140
  rdoc_options: []
167
141
  require_paths:
168
142
  - lib
@@ -170,41 +144,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
144
  requirements:
171
145
  - - ">="
172
146
  - !ruby/object:Gem::Version
173
- version: 1.9.2
147
+ version: 2.5.0
174
148
  required_rubygems_version: !ruby/object:Gem::Requirement
175
149
  requirements:
176
150
  - - ">="
177
151
  - !ruby/object:Gem::Version
178
152
  version: '0'
179
153
  requirements: []
180
- rubyforge_project:
181
- rubygems_version: 2.6.11
182
- signing_key:
154
+ rubygems_version: 3.6.7
183
155
  specification_version: 4
184
156
  summary: Template compilation framework in Ruby
185
- test_files:
186
- - test/filters/test_code_merger.rb
187
- - test/filters/test_control_flow.rb
188
- - test/filters/test_dynamic_inliner.rb
189
- - test/filters/test_eraser.rb
190
- - test/filters/test_escapable.rb
191
- - test/filters/test_multi_flattener.rb
192
- - test/filters/test_static_analyzer.rb
193
- - test/filters/test_static_merger.rb
194
- - test/filters/test_string_splitter.rb
195
- - test/helper.rb
196
- - test/html/test_attribute_merger.rb
197
- - test/html/test_attribute_remover.rb
198
- - test/html/test_attribute_sorter.rb
199
- - test/html/test_fast.rb
200
- - test/html/test_pretty.rb
201
- - test/mixins/test_dispatcher.rb
202
- - test/mixins/test_grammar_dsl.rb
203
- - test/test_engine.rb
204
- - test/test_erb.rb
205
- - test/test_filter.rb
206
- - test/test_generator.rb
207
- - test/test_grammar.rb
208
- - test/test_map.rb
209
- - test/test_static_analyzer.rb
210
- - test/test_utils.rb
157
+ test_files: []
data/.travis.yml DELETED
@@ -1,30 +0,0 @@
1
- language: ruby
2
- dist: trusty
3
-
4
- cache: bundler
5
-
6
- rvm:
7
- - 1.9.3
8
- - 2.0.0
9
- - 2.1.10
10
- - 2.2.6
11
- - 2.3.3
12
- - ruby-head
13
- - jruby-19mode
14
- - rbx-3
15
-
16
- sudo: false
17
-
18
- env:
19
- - ESCAPE_UTILS=1
20
- - ""
21
-
22
- matrix:
23
- allow_failures:
24
- - rvm: ruby-head
25
- - rvm: rbx-3
26
- exclude:
27
- - rvm: jruby-19mode
28
- env: ESCAPE_UTILS=1
29
- - rvm: rbx-3
30
- env: ESCAPE_UTILS=1
@@ -1,38 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::CodeMerger do
4
- before do
5
- @filter = Temple::Filters::CodeMerger.new
6
- end
7
-
8
- it 'should merge serveral codes' do
9
- @filter.call([:multi,
10
- [:code, "a"],
11
- [:code, "b"],
12
- [:code, "c"]
13
- ]).should.equal [:code, "a; b; c"]
14
- end
15
-
16
- it 'should merge serveral codes around static' do
17
- @filter.call([:multi,
18
- [:code, "a"],
19
- [:code, "b"],
20
- [:static, "123"],
21
- [:code, "a"],
22
- [:code, "b"]
23
- ]).should.equal [:multi,
24
- [:code, "a; b"],
25
- [:static, "123"],
26
- [:code, "a; b"]
27
- ]
28
- end
29
-
30
- it 'should merge serveral codes with newlines' do
31
- @filter.call([:multi,
32
- [:code, "a"],
33
- [:code, "b"],
34
- [:newline],
35
- [:code, "c"]
36
- ]).should.equal [:code, "a; b\nc"]
37
- end
38
- end
@@ -1,90 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::ControlFlow do
4
- before do
5
- @filter = Temple::Filters::ControlFlow.new
6
- end
7
-
8
- it 'should process blocks' do
9
- @filter.call([:block, 'loop do',
10
- [:static, 'Hello']
11
- ]).should.equal [:multi,
12
- [:code, 'loop do'],
13
- [:static, 'Hello'],
14
- [:code, 'end']]
15
- end
16
-
17
- it 'should process if' do
18
- @filter.call([:if, 'condition',
19
- [:static, 'Hello']
20
- ]).should.equal [:multi,
21
- [:code, 'if condition'],
22
- [:static, 'Hello'],
23
- [:code, 'end']
24
- ]
25
- end
26
-
27
- it 'should process if with else' do
28
- @filter.call([:if, 'condition',
29
- [:static, 'True'],
30
- [:static, 'False']
31
- ]).should.equal [:multi,
32
- [:code, 'if condition'],
33
- [:static, 'True'],
34
- [:code, 'else'],
35
- [:static, 'False'],
36
- [:code, 'end']
37
- ]
38
- end
39
-
40
- it 'should create elsif' do
41
- @filter.call([:if, 'condition1',
42
- [:static, '1'],
43
- [:if, 'condition2',
44
- [:static, '2'],
45
- [:static, '3']]
46
- ]).should.equal [:multi,
47
- [:code, 'if condition1'],
48
- [:static, '1'],
49
- [:code, 'elsif condition2'],
50
- [:static, '2'],
51
- [:code, 'else'],
52
- [:static, '3'],
53
- [:code, 'end']
54
- ]
55
- end
56
-
57
- it 'should process cond' do
58
- @filter.call([:cond,
59
- ['cond1', [:exp1]],
60
- ['cond2', [:exp2]],
61
- [:else, [:exp3]],
62
- ]).should.equal [:multi,
63
- [:code, 'case'],
64
- [:code, 'when cond1'],
65
- [:exp1],
66
- [:code, 'when cond2'],
67
- [:exp2],
68
- [:code, 'else'],
69
- [:exp3],
70
- [:code, 'end']
71
- ]
72
- end
73
-
74
- it 'should process case' do
75
- @filter.call([:case, 'var',
76
- ['Array', [:exp1]],
77
- ['String', [:exp2]],
78
- [:else, [:exp3]],
79
- ]).should.equal [:multi,
80
- [:code, 'case (var)'],
81
- [:code, 'when Array'],
82
- [:exp1],
83
- [:code, 'when String'],
84
- [:exp2],
85
- [:code, 'else'],
86
- [:exp3],
87
- [:code, 'end']
88
- ]
89
- end
90
- end
@@ -1,95 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::DynamicInliner do
4
- before do
5
- @filter = Temple::Filters::DynamicInliner.new
6
- end
7
-
8
- it 'should compile several statics into dynamic' do
9
- @filter.call([:multi,
10
- [:static, "Hello "],
11
- [:static, "World\n "],
12
- [:static, "Have a nice day"]
13
- ]).should.equal [:dynamic, '"Hello World\n Have a nice day"']
14
- end
15
-
16
- it 'should compile several dynamics into dynamic' do
17
- @filter.call([:multi,
18
- [:dynamic, "@hello"],
19
- [:dynamic, "@world"],
20
- [:dynamic, "@yeah"]
21
- ]).should.equal [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
22
- end
23
-
24
- it 'should compile static and dynamic into dynamic' do
25
- @filter.call([:multi,
26
- [:static, "Hello"],
27
- [:dynamic, "@world"],
28
- [:dynamic, "@yeah"],
29
- [:static, "Nice"]
30
- ]).should.equal [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
31
- end
32
-
33
- it 'should merge statics and dynamics around a code' do
34
- exp = @filter.call([:multi,
35
- [:static, "Hello "],
36
- [:dynamic, "@world"],
37
- [:code, "Oh yeah"],
38
- [:dynamic, "@yeah"],
39
- [:static, "Once more"]
40
- ]).should.equal [:multi,
41
- [:dynamic, '"Hello #{@world}"'],
42
- [:code, "Oh yeah"],
43
- [:dynamic, '"#{@yeah}Once more"']
44
- ]
45
- end
46
-
47
- it 'should keep codes intact' do
48
- @filter.call([:multi, [:code, 'foo']]).should.equal [:code, 'foo']
49
- end
50
-
51
- it 'should keep single statics intact' do
52
- @filter.call([:multi, [:static, 'foo']]).should.equal [:static, 'foo']
53
- end
54
-
55
- it 'should keep single dynamic intact' do
56
- @filter.call([:multi, [:dynamic, 'foo']]).should.equal [:dynamic, 'foo']
57
- end
58
-
59
- it 'should inline inside multi' do
60
- @filter.call([:multi,
61
- [:static, "Hello "],
62
- [:dynamic, "@world"],
63
- [:multi,
64
- [:static, "Hello "],
65
- [:dynamic, "@world"]],
66
- [:static, "Hello "],
67
- [:dynamic, "@world"]
68
- ]).should.equal [:multi,
69
- [:dynamic, '"Hello #{@world}"'],
70
- [:dynamic, '"Hello #{@world}"'],
71
- [:dynamic, '"Hello #{@world}"']
72
- ]
73
- end
74
-
75
- it 'should merge across newlines' do
76
- exp = @filter.call([:multi,
77
- [:static, "Hello \n"],
78
- [:newline],
79
- [:dynamic, "@world"],
80
- [:newline]
81
- ]).should.equal [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
82
- end
83
-
84
- it 'should compile static followed by newline' do
85
- @filter.call([:multi,
86
- [:static, "Hello \n"],
87
- [:newline],
88
- [:code, "world"]
89
- ]).should.equal [:multi,
90
- [:static, "Hello \n"],
91
- [:newline],
92
- [:code, "world"]
93
- ]
94
- end
95
- end
@@ -1,55 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::Eraser do
4
- it 'should respect keep' do
5
- eraser = Temple::Filters::Eraser.new(keep: [:a])
6
- eraser.call([:multi,
7
- [:a],
8
- [:b],
9
- [:c]
10
- ]).should.equal [:multi,
11
- [:a],
12
- [:multi],
13
- [:multi]
14
- ]
15
- end
16
-
17
- it 'should respect erase' do
18
- eraser = Temple::Filters::Eraser.new(erase: [:a])
19
- eraser.call([:multi,
20
- [:a],
21
- [:b],
22
- [:c]
23
- ]).should.equal [:multi,
24
- [:multi],
25
- [:b],
26
- [:c]
27
- ]
28
- end
29
-
30
- it 'should choose erase over keep' do
31
- eraser = Temple::Filters::Eraser.new(keep: [:a, :b], erase: [:a])
32
- eraser.call([:multi,
33
- [:a],
34
- [:b],
35
- [:c]
36
- ]).should.equal [:multi,
37
- [:multi],
38
- [:b],
39
- [:multi]
40
- ]
41
- end
42
-
43
- it 'should erase nested types' do
44
- eraser = Temple::Filters::Eraser.new(erase: [[:a, :b]])
45
- eraser.call([:multi,
46
- [:a, :a],
47
- [:a, :b],
48
- [:b]
49
- ]).should.equal [:multi,
50
- [:a, :a],
51
- [:multi],
52
- [:b]
53
- ]
54
- end
55
- end
@@ -1,49 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::Escapable do
4
- before do
5
- @filter = Temple::Filters::Escapable.new
6
- end
7
-
8
- it 'should handle escape expressions' do
9
- @filter.call([:escape, true,
10
- [:multi,
11
- [:static, "a < b"],
12
- [:dynamic, "ruby_method"]]
13
- ]).should.equal [:multi,
14
- [:static, "a &lt; b"],
15
- [:dynamic, "::Temple::Utils.escape_html((ruby_method))"],
16
- ]
17
- end
18
-
19
- it 'should keep codes intact' do
20
- exp = [:multi, [:code, 'foo']]
21
- @filter.call(exp).should.equal exp
22
- end
23
-
24
- it 'should keep statics intact' do
25
- exp = [:multi, [:static, '<']]
26
- @filter.call(exp).should.equal exp
27
- end
28
-
29
- it 'should keep dynamic intact' do
30
- exp = [:multi, [:dynamic, 'foo']]
31
- @filter.call(exp).should.equal exp
32
- end
33
-
34
- it 'should have use_html_safe option' do
35
- with_html_safe do
36
- filter = Temple::Filters::Escapable.new(use_html_safe: true)
37
- filter.call([:escape, true,
38
- [:static, Temple::HTML::SafeString.new("a < b")]
39
- ]).should.equal [:static, "a < b"]
40
- end
41
- end
42
-
43
- it 'should support censoring' do
44
- filter = Temple::Filters::Escapable.new(escape_code: '(%s).gsub("Temple sucks", "Temple rocks")')
45
- filter.call([:escape, true,
46
- [:static, "~~ Temple sucks ~~"]
47
- ]).should.equal [:static, "~~ Temple rocks ~~"]
48
- end
49
- end
@@ -1,33 +0,0 @@
1
- require 'helper'
2
-
3
- describe Temple::Filters::MultiFlattener do
4
- before do
5
- @filter = Temple::Filters::MultiFlattener.new
6
- end
7
-
8
- it 'should flatten nested multi expressions' do
9
- @filter.call([:multi,
10
- [:static, "a"],
11
- [:multi,
12
- [:dynamic, "aa"],
13
- [:multi,
14
- [:static, "aaa"],
15
- [:static, "aab"],
16
- ],
17
- [:dynamic, "ab"],
18
- ],
19
- [:static, "b"],
20
- ]).should.equal [:multi,
21
- [:static, "a"],
22
- [:dynamic, "aa"],
23
- [:static, "aaa"],
24
- [:static, "aab"],
25
- [:dynamic, "ab"],
26
- [:static, "b"],
27
- ]
28
- end
29
-
30
- it 'should return first element' do
31
- @filter.call([:multi, [:code, 'foo']]).should.equal [:code, 'foo']
32
- end
33
- end