temple 0.9.1 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -1
  3. data/CHANGES +21 -0
  4. data/Gemfile +0 -1
  5. data/Rakefile +0 -13
  6. data/lib/temple/engine.rb +1 -0
  7. data/lib/temple/erb/engine.rb +3 -0
  8. data/lib/temple/erb/parser.rb +1 -0
  9. data/lib/temple/erb/template.rb +1 -0
  10. data/lib/temple/erb/trimming.rb +1 -0
  11. data/lib/temple/exceptions.rb +1 -0
  12. data/lib/temple/filter.rb +1 -0
  13. data/lib/temple/filters/ambles.rb +1 -0
  14. data/lib/temple/filters/code_merger.rb +1 -0
  15. data/lib/temple/filters/control_flow.rb +1 -0
  16. data/lib/temple/filters/dynamic_inliner.rb +2 -1
  17. data/lib/temple/filters/dynamic_merger.rb +69 -0
  18. data/lib/temple/filters/encoding.rb +1 -0
  19. data/lib/temple/filters/eraser.rb +1 -0
  20. data/lib/temple/filters/escapable.rb +1 -0
  21. data/lib/temple/filters/multi_flattener.rb +1 -0
  22. data/lib/temple/filters/remove_bom.rb +1 -0
  23. data/lib/temple/filters/static_analyzer.rb +1 -0
  24. data/lib/temple/filters/static_merger.rb +1 -0
  25. data/lib/temple/filters/string_splitter.rb +2 -1
  26. data/lib/temple/filters/validator.rb +1 -0
  27. data/lib/temple/generator.rb +9 -12
  28. data/lib/temple/generators/array.rb +1 -0
  29. data/lib/temple/generators/array_buffer.rb +1 -0
  30. data/lib/temple/generators/erb.rb +1 -0
  31. data/lib/temple/generators/rails_output_buffer.rb +7 -3
  32. data/lib/temple/generators/string_buffer.rb +2 -1
  33. data/lib/temple/grammar.rb +1 -0
  34. data/lib/temple/html/attribute_merger.rb +1 -0
  35. data/lib/temple/html/attribute_remover.rb +1 -0
  36. data/lib/temple/html/attribute_sorter.rb +1 -0
  37. data/lib/temple/html/dispatcher.rb +1 -0
  38. data/lib/temple/html/fast.rb +1 -0
  39. data/lib/temple/html/filter.rb +1 -0
  40. data/lib/temple/html/pretty.rb +1 -0
  41. data/lib/temple/html/safe.rb +1 -0
  42. data/lib/temple/map.rb +1 -0
  43. data/lib/temple/mixins/dispatcher.rb +1 -0
  44. data/lib/temple/mixins/engine_dsl.rb +1 -0
  45. data/lib/temple/mixins/grammar_dsl.rb +2 -1
  46. data/lib/temple/mixins/options.rb +1 -0
  47. data/lib/temple/mixins/template.rb +1 -0
  48. data/lib/temple/parser.rb +1 -0
  49. data/lib/temple/static_analyzer.rb +1 -0
  50. data/lib/temple/templates/rails.rb +3 -2
  51. data/lib/temple/templates/tilt.rb +1 -0
  52. data/lib/temple/templates.rb +1 -0
  53. data/lib/temple/utils.rb +3 -1
  54. data/lib/temple/version.rb +2 -1
  55. data/lib/temple.rb +2 -0
  56. data/temple.gemspec +1 -3
  57. metadata +4 -28
  58. data/spec/engine_spec.rb +0 -189
  59. data/spec/erb_spec.rb +0 -61
  60. data/spec/filter_spec.rb +0 -29
  61. data/spec/filters/code_merger_spec.rb +0 -38
  62. data/spec/filters/control_flow_spec.rb +0 -90
  63. data/spec/filters/dynamic_inliner_spec.rb +0 -95
  64. data/spec/filters/eraser_spec.rb +0 -55
  65. data/spec/filters/escapable_spec.rb +0 -49
  66. data/spec/filters/multi_flattener_spec.rb +0 -33
  67. data/spec/filters/static_analyzer_spec.rb +0 -35
  68. data/spec/filters/static_merger_spec.rb +0 -41
  69. data/spec/filters/string_splitter_spec.rb +0 -50
  70. data/spec/generator_spec.rb +0 -167
  71. data/spec/grammar_spec.rb +0 -47
  72. data/spec/html/attribute_merger_spec.rb +0 -76
  73. data/spec/html/attribute_remover_spec.rb +0 -43
  74. data/spec/html/attribute_sorter_spec.rb +0 -48
  75. data/spec/html/fast_spec.rb +0 -97
  76. data/spec/html/pretty_spec.rb +0 -55
  77. data/spec/map_spec.rb +0 -39
  78. data/spec/mixins/dispatcher_spec.rb +0 -70
  79. data/spec/mixins/grammar_dsl_spec.rb +0 -86
  80. data/spec/spec_helper.rb +0 -29
  81. data/spec/static_analyzer_spec.rb +0 -39
  82. data/spec/utils_spec.rb +0 -39
data/spec/map_spec.rb DELETED
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Temple::ImmutableMap do
4
- it 'has read accessor' do
5
- hash = Temple::ImmutableMap.new({a: 1},{b: 2, a: 3})
6
- expect(hash[:a]).to eq(1)
7
- expect(hash[:b]).to eq(2)
8
- end
9
-
10
- it 'has include?' do
11
- hash = Temple::ImmutableMap.new({a: 1},{b: 2, a: 3})
12
- expect(hash).to include(:a)
13
- expect(hash).to include(:b)
14
- expect(hash).not_to include(:c)
15
- end
16
-
17
- it 'has values' do
18
- expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).values.sort).to eq([1,2])
19
- end
20
-
21
- it 'has keys' do
22
- expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).keys).to eq([:a,:b])
23
- end
24
-
25
- it 'has to_a' do
26
- expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).to_a).to eq([[:a, 1], [:b, 2]])
27
- end
28
- end
29
-
30
- describe Temple::MutableMap do
31
- it 'has write accessor' do
32
- parent = {a: 1}
33
- hash = Temple::MutableMap.new(parent)
34
- expect(hash[:a]).to eq(1)
35
- hash[:a] = 2
36
- expect(hash[:a]).to eq(2)
37
- expect(parent[:a]).to eq(1)
38
- end
39
- end
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class FilterWithDispatcherMixin
4
- include Temple::Mixins::Dispatcher
5
-
6
- def on_test(arg)
7
- [:on_test, arg]
8
- end
9
-
10
- def on_test_check(arg)
11
- [:on_check, arg]
12
- end
13
-
14
- def on_second_test(arg)
15
- [:on_second_test, arg]
16
- end
17
-
18
- def on_a_b(*arg)
19
- [:on_ab, *arg]
20
- end
21
-
22
- def on_a_b_test(arg)
23
- [:on_ab_test, arg]
24
- end
25
-
26
- def on_a_b_c_d_test(arg)
27
- [:on_abcd_test, arg]
28
- end
29
- end
30
-
31
- class FilterWithDispatcherMixinAndOn < FilterWithDispatcherMixin
32
- def on(*args)
33
- [:on_zero, *args]
34
- end
35
- end
36
-
37
- describe Temple::Mixins::Dispatcher do
38
- before do
39
- @filter = FilterWithDispatcherMixin.new
40
- end
41
-
42
- it 'should return unhandled expressions' do
43
- expect(@filter.call([:unhandled])).to eq([:unhandled])
44
- end
45
-
46
- it 'should dispatch first level' do
47
- expect(@filter.call([:test, 42])).to eq([:on_test, 42])
48
- end
49
-
50
- it 'should dispatch second level' do
51
- expect(@filter.call([:second, :test, 42])).to eq([:on_second_test, 42])
52
- end
53
-
54
- it 'should dispatch second level if prefixed' do
55
- expect(@filter.call([:test, :check, 42])).to eq([:on_check, 42])
56
- end
57
-
58
- it 'should dispatch parent level' do
59
- expect(@filter.call([:a, 42])).to eq [:a, 42]
60
- expect(@filter.call([:a, :b, 42])).to eq [:on_ab, 42]
61
- expect(@filter.call([:a, :b, :test, 42])).to eq [:on_ab_test, 42]
62
- expect(@filter.call([:a, :b, :c, 42])).to eq [:on_ab, :c, 42]
63
- expect(@filter.call([:a, :b, :c, :d, 42])).to eq [:on_ab, :c, :d, 42]
64
- expect(@filter.call([:a, :b, :c, :d, :test, 42])).to eq [:on_abcd_test, 42]
65
- end
66
-
67
- it 'should dispatch zero level' do
68
- expect(FilterWithDispatcherMixinAndOn.new.call([:foo,42])).to eq [:on_zero, :foo, 42]
69
- end
70
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module BasicGrammar
4
- extend Temple::Mixins::GrammarDSL
5
-
6
- Expression <<
7
- Symbol |
8
- Answer |
9
- [:zero_or_more, 'Expression*'] |
10
- [:one_or_more, 'Expression+'] |
11
- [:zero_or_one, 'Expression?'] |
12
- [:bool, Bool] |
13
- nil
14
-
15
- Bool <<
16
- true | false
17
-
18
- Answer <<
19
- Value(42)
20
-
21
- end
22
-
23
- module ExtendedGrammar
24
- extend BasicGrammar
25
-
26
- Expression << [:extended, Expression]
27
- end
28
-
29
- describe Temple::Mixins::GrammarDSL do
30
- it 'should support class types' do
31
- expect(BasicGrammar).to be_match(:symbol)
32
- expect(BasicGrammar).not_to be_match([:symbol])
33
- expect(BasicGrammar).not_to be_match('string')
34
- expect(BasicGrammar).not_to be_match(['string'])
35
- end
36
-
37
- it 'should support value types' do
38
- expect(BasicGrammar).to be_match(42)
39
- expect(BasicGrammar).not_to be_match(43)
40
- end
41
-
42
- it 'should support nesting' do
43
- expect(BasicGrammar).to be_match([:zero_or_more, [:zero_or_more]])
44
- end
45
-
46
- it 'should support *' do
47
- expect(BasicGrammar).to be_match([:zero_or_more])
48
- expect(BasicGrammar).to be_match([:zero_or_more, nil, 42])
49
- end
50
-
51
- it 'should support +' do
52
- expect(BasicGrammar).not_to be_match([:one_or_more])
53
- expect(BasicGrammar).to be_match( [:one_or_more, 42])
54
- expect(BasicGrammar).to be_match( [:one_or_more, 42, nil])
55
- end
56
-
57
- it 'should support ?' do
58
- expect(BasicGrammar).not_to be_match([:zero_or_one, nil, 42])
59
- expect(BasicGrammar).to be_match( [:zero_or_one])
60
- expect(BasicGrammar).to be_match( [:zero_or_one, 42])
61
- end
62
-
63
- it 'should support extended grammars' do
64
- expect(ExtendedGrammar).to be_match([:extended, [:extended, 42]])
65
- expect(BasicGrammar).not_to be_match([:zero_or_more, [:extended, nil]])
66
- expect(BasicGrammar).not_to be_match([:extended, [:extended, 42]])
67
- end
68
-
69
- it 'should have validate!' do
70
- grammar_validate BasicGrammar,
71
- [:zero_or_more, [:zero_or_more, [:unknown]]],
72
- "BasicGrammar::Expression did not match\n[:unknown]\n"
73
-
74
- grammar_validate BasicGrammar,
75
- [:zero_or_more, [:one_or_more]],
76
- "BasicGrammar::Expression did not match\n[:one_or_more]\n"
77
-
78
- grammar_validate BasicGrammar,
79
- [:zero_or_more, 123, [:unknown]],
80
- "BasicGrammar::Expression did not match\n123\n"
81
-
82
- grammar_validate BasicGrammar,
83
- [:bool, 123],
84
- "BasicGrammar::Bool did not match\n123\n"
85
- end
86
- end
data/spec/spec_helper.rb DELETED
@@ -1,29 +0,0 @@
1
- require 'temple'
2
-
3
- module TestHelper
4
- def with_html_safe
5
- require 'temple/html/safe'
6
- String.send(:define_method, :html_safe?) { false }
7
- String.send(:define_method, :html_safe) { Temple::HTML::SafeString.new(self) }
8
- yield
9
- ensure
10
- String.send(:undef_method, :html_safe?) if String.method_defined?(:html_safe?)
11
- String.send(:undef_method, :html_safe) if String.method_defined?(:html_safe)
12
- end
13
-
14
- def grammar_validate(grammar, exp, message)
15
- expect { grammar.validate!(exp) }.to raise_error(Temple::InvalidExpression, message)
16
- end
17
-
18
- def erb(src, options = {})
19
- Temple::ERB::Template.new(options) { src }.render
20
- end
21
-
22
- def erubi(src, options = {})
23
- Tilt::ErubiTemplate.new(options) { src }.render
24
- end
25
- end
26
-
27
- RSpec.configure do |config|
28
- config.include TestHelper
29
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Temple::StaticAnalyzer do
4
- describe '.available?' do
5
- it 'should return true if its dependency is available' do
6
- expect(Temple::StaticAnalyzer.available?).to eq(defined?(Ripper) && Ripper.respond_to?(:lex))
7
- end
8
- end
9
-
10
- if Temple::StaticAnalyzer.available?
11
- describe '.static?' do
12
- it 'should return true if given Ruby expression is static' do
13
- ['true', 'false', '"hello world"', "[1, { 2 => 3 }]", "[\n1,\n]"].each do |exp|
14
- expect(Temple::StaticAnalyzer.static?(exp)).to eq(true)
15
- end
16
- end
17
-
18
- it 'should return false if given Ruby expression is dynamic' do
19
- ['1 + 2', 'variable', 'method_call(a)', 'CONSTANT'].each do |exp|
20
- expect(Temple::StaticAnalyzer.static?(exp)).to eq(false)
21
- end
22
- end
23
- end
24
-
25
- describe '.syntax_error?' do
26
- it 'should return false if given Ruby expression is valid' do
27
- ['Foo.bar.baz { |c| c.d! }', '{ foo: bar }'].each do |exp|
28
- expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(false)
29
- end
30
- end
31
-
32
- it 'should return true if given Ruby expression is invalid' do
33
- ['Foo.bar.baz { |c| c.d! ', ' foo: bar '].each do |exp|
34
- expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(true)
35
- end
36
- end
37
- end
38
- end
39
- end
data/spec/utils_spec.rb DELETED
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class UniqueTest
4
- include Temple::Utils
5
- end
6
-
7
- describe Temple::Utils do
8
- it 'has empty_exp?' do
9
- expect(Temple::Utils.empty_exp?([:multi])).to eq(true)
10
- expect(Temple::Utils.empty_exp?([:multi, [:multi]])).to eq(true)
11
- expect(Temple::Utils.empty_exp?([:multi, [:multi, [:newline]], [:newline]])).to eq(true)
12
- expect(Temple::Utils.empty_exp?([:multi])).to eq(true)
13
- expect(Temple::Utils.empty_exp?([:multi, [:multi, [:static, 'text']]])).to eq(false)
14
- expect(Temple::Utils.empty_exp?([:multi, [:newline], [:multi, [:dynamic, 'text']]])).to eq(false)
15
- end
16
-
17
- it 'has unique_name' do
18
- u = UniqueTest.new
19
- expect(u.unique_name).to eq('_uniquetest1')
20
- expect(u.unique_name).to eq('_uniquetest2')
21
- expect(UniqueTest.new.unique_name).to eq('_uniquetest1')
22
- end
23
-
24
- it 'has escape_html' do
25
- expect(Temple::Utils.escape_html('<')).to eq('&lt;')
26
- end
27
-
28
- it 'should escape unsafe html strings' do
29
- with_html_safe do
30
- expect(Temple::Utils.escape_html_safe('<')).to eq('&lt;')
31
- end
32
- end
33
-
34
- it 'should not escape safe html strings' do
35
- with_html_safe do
36
- expect(Temple::Utils.escape_html_safe('<'.html_safe)).to eq('<')
37
- end
38
- end
39
- end