temple 0.2.0 → 0.3.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 (54) hide show
  1. data/.yardopts +2 -1
  2. data/CHANGES +63 -0
  3. data/EXPRESSIONS.md +250 -0
  4. data/README.md +24 -12
  5. data/lib/temple.rb +34 -18
  6. data/lib/temple/engine.rb +11 -7
  7. data/lib/temple/erb/engine.rb +5 -3
  8. data/lib/temple/erb/parser.rb +5 -2
  9. data/lib/temple/erb/template.rb +11 -0
  10. data/lib/temple/erb/trimming.rb +9 -1
  11. data/lib/temple/filter.rb +2 -0
  12. data/lib/temple/filters/control_flow.rb +43 -0
  13. data/lib/temple/filters/dynamic_inliner.rb +29 -32
  14. data/lib/temple/filters/eraser.rb +22 -0
  15. data/lib/temple/filters/escapable.rb +39 -0
  16. data/lib/temple/filters/multi_flattener.rb +4 -1
  17. data/lib/temple/filters/static_merger.rb +11 -10
  18. data/lib/temple/filters/validator.rb +15 -0
  19. data/lib/temple/generators.rb +41 -100
  20. data/lib/temple/grammar.rb +56 -0
  21. data/lib/temple/hash.rb +48 -0
  22. data/lib/temple/html/dispatcher.rb +10 -4
  23. data/lib/temple/html/fast.rb +50 -38
  24. data/lib/temple/html/filter.rb +8 -0
  25. data/lib/temple/html/pretty.rb +25 -14
  26. data/lib/temple/mixins/dispatcher.rb +103 -0
  27. data/lib/temple/{mixins.rb → mixins/engine_dsl.rb} +10 -95
  28. data/lib/temple/mixins/grammar_dsl.rb +166 -0
  29. data/lib/temple/mixins/options.rb +28 -0
  30. data/lib/temple/mixins/template.rb +25 -0
  31. data/lib/temple/templates.rb +2 -0
  32. data/lib/temple/utils.rb +11 -57
  33. data/lib/temple/version.rb +1 -1
  34. data/test/filters/test_control_flow.rb +92 -0
  35. data/test/filters/test_dynamic_inliner.rb +7 -7
  36. data/test/filters/test_eraser.rb +55 -0
  37. data/test/filters/{test_escape_html.rb → test_escapable.rb} +13 -6
  38. data/test/filters/test_multi_flattener.rb +1 -1
  39. data/test/filters/test_static_merger.rb +3 -3
  40. data/test/helper.rb +8 -0
  41. data/test/html/test_fast.rb +42 -57
  42. data/test/html/test_pretty.rb +10 -7
  43. data/test/mixins/test_dispatcher.rb +31 -0
  44. data/test/mixins/test_grammar_dsl.rb +86 -0
  45. data/test/test_engine.rb +73 -57
  46. data/test/test_erb.rb +0 -7
  47. data/test/test_filter.rb +26 -0
  48. data/test/test_generator.rb +57 -36
  49. data/test/test_grammar.rb +52 -0
  50. data/test/test_hash.rb +39 -0
  51. data/test/test_utils.rb +11 -38
  52. metadata +34 -10
  53. data/lib/temple/filters/debugger.rb +0 -26
  54. data/lib/temple/filters/escape_html.rb +0 -33
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ describe Temple::Grammar do
4
+ it 'should match core expressions' do
5
+ Temple::Grammar.should.match [:multi]
6
+ Temple::Grammar.should.match [:multi, [:multi]]
7
+ Temple::Grammar.should.match [:static, 'Text']
8
+ Temple::Grammar.should.match [:dynamic, 'Text']
9
+ Temple::Grammar.should.match [:code, 'Text']
10
+ Temple::Grammar.should.match [:capture, 'Text', [:multi]]
11
+ Temple::Grammar.should.match [:newline]
12
+ end
13
+
14
+ it 'should not match invalid core expressions' do
15
+ Temple::Grammar.should.not.match [:multi, 'String']
16
+ Temple::Grammar.should.not.match [:static]
17
+ Temple::Grammar.should.not.match [:dynamic, 1]
18
+ Temple::Grammar.should.not.match [:code, :sym]
19
+ Temple::Grammar.should.not.match [:capture, [:multi]]
20
+ Temple::Grammar.should.not.match [:newline, [:multi]]
21
+ end
22
+
23
+ it 'should match control flow expressions' do
24
+ Temple::Grammar.should.match [:if, 'Condition', [:multi]]
25
+ Temple::Grammar.should.match [:if, 'Condition', [:multi], [:multi]]
26
+ Temple::Grammar.should.match [:block, 'Loop', [:multi]]
27
+ Temple::Grammar.should.match [:case, 'Arg', ['Cond1', [:multi]], ['Cond1', [:multi]], [:else, [:multi]]]
28
+ Temple::Grammar.should.not.match [:case, 'Arg', [:sym, [:multi]]]
29
+ Temple::Grammar.should.match [:cond, ['Cond1', [:multi]], ['Cond2', [:multi]], [:else, [:multi]]]
30
+ Temple::Grammar.should.not.match [:cond, [:sym, [:multi]]]
31
+ end
32
+
33
+ it 'should match escape expression' do
34
+ Temple::Grammar.should.match [:escape, true, [:multi]]
35
+ Temple::Grammar.should.match [:escape, false, [:multi]]
36
+ end
37
+
38
+ it 'should match html expressions' do
39
+ Temple::Grammar.should.match [:html, :doctype, 'Doctype']
40
+ Temple::Grammar.should.match [:html, :comment, [:multi]]
41
+ Temple::Grammar.should.match [:html, :tag, 'Tag', [:multi]]
42
+ Temple::Grammar.should.match [:html, :tag, 'Tag', [:multi], [:multi]]
43
+ Temple::Grammar.should.match [:html, :tag, 'Tag', [:multi], [:static, 'Text']]
44
+ Temple::Grammar.should.match [:html, :tag, 'Tag', [:html, :attrs, [:html, :attr, 'id',
45
+ [:static, 'val']]], [:static, 'Text']]
46
+ end
47
+
48
+ it 'should not match lone html attributes' do
49
+ Temple::Grammar.should.not.match [:html, :attr, 'id', [:multi]]
50
+ Temple::Grammar.should.not.match [:html, :attrs]
51
+ end
52
+ end
data/test/test_hash.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'helper'
2
+
3
+ describe Temple::ImmutableHash do
4
+ it 'has read accessor' do
5
+ hash = Temple::ImmutableHash.new({:a => 1},{:b => 2, :a => 3})
6
+ hash[:a].should.equal 1
7
+ hash[:b].should.equal 2
8
+ end
9
+
10
+ it 'has include?' do
11
+ hash = Temple::ImmutableHash.new({:a => 1},{:b => 2, :a => 3})
12
+ hash.should.include :a
13
+ hash.should.include :b
14
+ hash.should.not.include :c
15
+ end
16
+
17
+ it 'has values' do
18
+ Temple::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).values.sort.should.equal [1,2]
19
+ end
20
+
21
+ it 'has keys' do
22
+ Temple::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).keys.should.equal [:a,:b]
23
+ end
24
+
25
+ it 'has to_a' do
26
+ Temple::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).to_a.should.equal [[:a, 1], [:b, 2]]
27
+ end
28
+ end
29
+
30
+ describe Temple::MutableHash do
31
+ it 'has write accessor' do
32
+ parent = {:a => 1}
33
+ hash = Temple::MutableHash.new(parent)
34
+ hash[:a].should.equal 1
35
+ hash[:a] = 2
36
+ hash[:a].should.equal 2
37
+ parent[:a].should.equal 1
38
+ end
39
+ end
data/test/test_utils.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  require 'helper'
2
2
 
3
+ class UniqueTest
4
+ include Temple::Utils
5
+ end
6
+
3
7
  describe Temple::Utils do
4
8
  it 'has empty_exp?' do
5
9
  Temple::Utils.empty_exp?([:multi]).should.be.true
@@ -10,6 +14,13 @@ describe Temple::Utils do
10
14
  Temple::Utils.empty_exp?([:multi, [:newline], [:multi, [:dynamic, 'text']]]).should.be.false
11
15
  end
12
16
 
17
+ it 'has unique_name' do
18
+ u = UniqueTest.new
19
+ u.unique_name.should.equal '_uniquetest1'
20
+ u.unique_name.should.equal '_uniquetest2'
21
+ UniqueTest.new.unique_name.should.equal '_uniquetest1'
22
+ end
23
+
13
24
  it 'has escape_html' do
14
25
  Temple::Utils.escape_html('<').should.equal '&lt;'
15
26
  end
@@ -26,41 +37,3 @@ describe Temple::Utils do
26
37
  end
27
38
  end
28
39
  end
29
-
30
- describe Temple::Utils::ImmutableHash do
31
- it 'has read accessor' do
32
- hash = Temple::Utils::ImmutableHash.new({:a => 1},{:b => 2, :a => 3})
33
- hash[:a].should.equal 1
34
- hash[:b].should.equal 2
35
- end
36
-
37
- it 'has include?' do
38
- hash = Temple::Utils::ImmutableHash.new({:a => 1},{:b => 2, :a => 3})
39
- hash.should.include :a
40
- hash.should.include :b
41
- hash.should.not.include :c
42
- end
43
-
44
- it 'has values' do
45
- Temple::Utils::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).values.sort.should.equal [1,2]
46
- end
47
-
48
- it 'has keys' do
49
- Temple::Utils::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).keys.should.equal [:a,:b]
50
- end
51
-
52
- it 'has to_a' do
53
- Temple::Utils::ImmutableHash.new({:a => 1},{:b => 2, :a => 3}).to_a.should.equal [[:a, 1], [:b, 2]]
54
- end
55
- end
56
-
57
- describe Temple::Utils::MutableHash do
58
- it 'has write accessor' do
59
- parent = {:a => 1}
60
- hash = Temple::Utils::MutableHash.new(parent)
61
- hash[:a].should.equal 1
62
- hash[:a] = 2
63
- hash[:a].should.equal 2
64
- parent[:a].should.equal 1
65
- end
66
- end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: temple
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Magnus Holm
@@ -11,8 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-03-30 00:00:00 +02:00
15
- default_executable:
14
+ date: 2011-05-15 00:00:00 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: tilt
@@ -49,6 +48,8 @@ extra_rdoc_files: []
49
48
  files:
50
49
  - .gitignore
51
50
  - .yardopts
51
+ - CHANGES
52
+ - EXPRESSIONS.md
52
53
  - LICENSE
53
54
  - README.md
54
55
  - Rakefile
@@ -56,36 +57,52 @@ files:
56
57
  - lib/temple/engine.rb
57
58
  - lib/temple/erb/engine.rb
58
59
  - lib/temple/erb/parser.rb
60
+ - lib/temple/erb/template.rb
59
61
  - lib/temple/erb/trimming.rb
60
62
  - lib/temple/filter.rb
61
- - lib/temple/filters/debugger.rb
63
+ - lib/temple/filters/control_flow.rb
62
64
  - lib/temple/filters/dynamic_inliner.rb
63
- - lib/temple/filters/escape_html.rb
65
+ - lib/temple/filters/eraser.rb
66
+ - lib/temple/filters/escapable.rb
64
67
  - lib/temple/filters/multi_flattener.rb
65
68
  - lib/temple/filters/static_merger.rb
69
+ - lib/temple/filters/validator.rb
66
70
  - lib/temple/generators.rb
71
+ - lib/temple/grammar.rb
72
+ - lib/temple/hash.rb
67
73
  - lib/temple/html/dispatcher.rb
68
74
  - lib/temple/html/fast.rb
75
+ - lib/temple/html/filter.rb
69
76
  - lib/temple/html/pretty.rb
70
- - lib/temple/mixins.rb
77
+ - lib/temple/mixins/dispatcher.rb
78
+ - lib/temple/mixins/engine_dsl.rb
79
+ - lib/temple/mixins/grammar_dsl.rb
80
+ - lib/temple/mixins/options.rb
81
+ - lib/temple/mixins/template.rb
71
82
  - lib/temple/templates.rb
72
83
  - lib/temple/templates/rails.rb
73
84
  - lib/temple/templates/tilt.rb
74
85
  - lib/temple/utils.rb
75
86
  - lib/temple/version.rb
76
87
  - temple.gemspec
88
+ - test/filters/test_control_flow.rb
77
89
  - test/filters/test_dynamic_inliner.rb
78
- - test/filters/test_escape_html.rb
90
+ - test/filters/test_eraser.rb
91
+ - test/filters/test_escapable.rb
79
92
  - test/filters/test_multi_flattener.rb
80
93
  - test/filters/test_static_merger.rb
81
94
  - test/helper.rb
82
95
  - test/html/test_fast.rb
83
96
  - test/html/test_pretty.rb
97
+ - test/mixins/test_dispatcher.rb
98
+ - test/mixins/test_grammar_dsl.rb
84
99
  - test/test_engine.rb
85
100
  - test/test_erb.rb
101
+ - test/test_filter.rb
86
102
  - test/test_generator.rb
103
+ - test/test_grammar.rb
104
+ - test/test_hash.rb
87
105
  - test/test_utils.rb
88
- has_rdoc: true
89
106
  homepage: http://dojo.rubyforge.org/
90
107
  licenses: []
91
108
 
@@ -109,19 +126,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
126
  requirements: []
110
127
 
111
128
  rubyforge_project:
112
- rubygems_version: 1.5.1
129
+ rubygems_version: 1.8.2
113
130
  signing_key:
114
131
  specification_version: 3
115
132
  summary: Template compilation framework in Ruby
116
133
  test_files:
134
+ - test/filters/test_control_flow.rb
117
135
  - test/filters/test_dynamic_inliner.rb
118
- - test/filters/test_escape_html.rb
136
+ - test/filters/test_eraser.rb
137
+ - test/filters/test_escapable.rb
119
138
  - test/filters/test_multi_flattener.rb
120
139
  - test/filters/test_static_merger.rb
121
140
  - test/helper.rb
122
141
  - test/html/test_fast.rb
123
142
  - test/html/test_pretty.rb
143
+ - test/mixins/test_dispatcher.rb
144
+ - test/mixins/test_grammar_dsl.rb
124
145
  - test/test_engine.rb
125
146
  - test/test_erb.rb
147
+ - test/test_filter.rb
126
148
  - test/test_generator.rb
149
+ - test/test_grammar.rb
150
+ - test/test_hash.rb
127
151
  - test/test_utils.rb
@@ -1,26 +0,0 @@
1
- module Temple
2
- module Filters
3
- # Filter which prints Temple expression
4
- class Debugger < Filter
5
- default_options[:debug_pretty] = true
6
-
7
- def initialize(opts = {})
8
- super
9
- require 'pp' if options[:debug_pretty]
10
- end
11
-
12
- def call(exp)
13
- if options[:debug]
14
- puts options[:debug_prefix] if options[:debug_prefix]
15
- if options[:debug_pretty]
16
- pp exp
17
- else
18
- p exp
19
- end
20
- puts
21
- end
22
- exp
23
- end
24
- end
25
- end
26
- end
@@ -1,33 +0,0 @@
1
- module Temple
2
- module Filters
3
- class EscapeHTML < Filter
4
- include Temple::HTML::Dispatcher
5
-
6
- temple_dispatch :html
7
-
8
- # Activate the usage of html_safe? if it is available (for Rails 3 for example)
9
- default_options[:use_html_safe] = ''.respond_to?(:html_safe?)
10
-
11
- def initialize(opts = {})
12
- super
13
- @escape = false
14
- end
15
-
16
- def on_escape(flag, exp)
17
- old = @escape
18
- @escape = flag
19
- compile(exp)
20
- ensure
21
- @escape = old
22
- end
23
-
24
- def on_static(value)
25
- [:static, @escape ? (options[:use_html_safe] ? escape_html_safe(value) : escape_html(value)) : value]
26
- end
27
-
28
- def on_dynamic(value)
29
- [:dynamic, @escape ? "Temple::Utils.escape_html#{options[:use_html_safe] ? '_safe' : ''}((#{value}))" : value]
30
- end
31
- end
32
- end
33
- end