flott 1.0.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.
@@ -0,0 +1,155 @@
1
+ require 'test_helper'
2
+ require 'flott'
3
+ require 'stringio'
4
+
5
+ class TC_FlottFile < Test::Unit::TestCase
6
+ include Flott
7
+ Flott.debug = false
8
+ def setup
9
+ @expected =<<__EOT
10
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
11
+ "http://www.w3.org/TR/html4/strict.dtd">
12
+ <html>
13
+ <head>
14
+ <title>Hello Flor&lt;i&gt;an!</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
16
+ </head>
17
+ <body>
18
+
19
+ <h1>Hello Flor&lt;i&gt;an[!</h1>
20
+
21
+ <i>Hello Flor<i>an]!</i>
22
+
23
+ <b>Hello Flor&lt;i&gt;an]!</b>
24
+
25
+ <i>Hello Flor<i>an]!</i>
26
+
27
+ <b>Hello Flor&lt;i&gt;an]!</b>
28
+
29
+ <i>Hello Flor<i>an]!</i>
30
+
31
+ <b>Hello Flor&lt;i&gt;an]!</b>
32
+
33
+
34
+ </body> ]
35
+ </html>
36
+ __EOT
37
+ @expected2 =<<__EOT.gsub(/: .*templates/, ': @{prefix}')
38
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
39
+ "http://www.w3.org/TR/html4/strict.dtd">
40
+ <html>
41
+ <head>
42
+ <title>Hello !</title>
43
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
44
+ </head>
45
+ <body>
46
+ Workdir before (template2): @{prefix}
47
+ Workdir 1 (included): @{prefix}/subdir
48
+ Toplevel
49
+ Workdir (toplevel): @{prefix}
50
+
51
+ Workdir 2 (included): @{prefix}/subdir
52
+ Workdir (included2): @{prefix}/subdir/subdir2
53
+
54
+ Workdir 3 (included): @{prefix}/subdir
55
+ Workdir (included3): @{prefix}/subdir
56
+
57
+ Workdir 4 (included): @{prefix}/subdir
58
+ Toplevel
59
+ Workdir (toplevel): @{prefix}/subdir
60
+
61
+ Workdir 5 (included): @{prefix}/subdir
62
+
63
+ Workdir after (template2): @{prefix}
64
+ </body>
65
+ </html>
66
+ __EOT
67
+ workdir = File.join(File.dirname(__FILE__), 'templates')
68
+ @parser = Parser.new(File.read(File.join(workdir, 'template')), workdir)
69
+ @parser2 = Parser.from_filename(File.join(workdir, 'template2'))
70
+ end
71
+
72
+ def test_kind
73
+ assert_kind_of Parser, @parser
74
+ assert_kind_of Parser, @parser2
75
+ end
76
+
77
+ def test_compile
78
+ assert @parser.compile
79
+ end
80
+
81
+ def test_compile2
82
+ assert @parser2.compile
83
+ end
84
+
85
+ def test_execute
86
+ output = StringIO.new('')
87
+ env = Environment.new(output)
88
+ assert_raise(NoMethodError) do
89
+ @parser.evaluate(env)
90
+ end
91
+ output.rewind
92
+ env[:name] = 'Flor<i>an'
93
+ @parser.evaluate(env)
94
+ assert_equal(@expected, output.string)
95
+ output.rewind
96
+ @parser.evaluate(env)
97
+ assert_equal(@expected, output.string)
98
+ end
99
+
100
+ def test_compile_evaluate
101
+ output = StringIO.new('')
102
+ env = Environment.new(output)
103
+ env[:@name] = 'Flor<i>an'
104
+ compiled = @parser.compile
105
+ Flott.evaluate(compiled, env)
106
+ assert_equal(@expected, output.string)
107
+ output.rewind
108
+ Flott.evaluate(compiled, env)
109
+ assert_equal(@expected, output.string)
110
+ end
111
+
112
+ def test_execute2
113
+ output = StringIO.new('')
114
+ env = Environment.new(output)
115
+ @parser2.evaluate(env)
116
+ assert_match(/Toplevel/, output.string)
117
+ output.rewind
118
+ @parser2.evaluate(env)
119
+ assert_match(/Toplevel/, output.string)
120
+ end
121
+
122
+ def test_dynamic_include
123
+ output = ''
124
+ env = Environment.new(output)
125
+ @parser2.evaluate(env)
126
+ output.gsub!(/: .*templates/, ': @{prefix}')
127
+ assert_equal @expected2, output
128
+ end
129
+
130
+ def test_check_secure_pathes
131
+ assert_raises(SecurityViolation) do
132
+ Parser.new('foo', '~foo/bar')
133
+ end
134
+ assert Parser.new('foo', 'foo/bar')
135
+ assert_raises(SecurityViolation) do
136
+ Parser.new('foo', 'foo/bar/../baz')
137
+ end
138
+ assert_raises(SecurityViolation) do
139
+ Parser.new('foo', 'foo', '~foo/bar')
140
+ end
141
+ assert_raises(SecurityViolation) do
142
+ Parser.new('foo', 'foo', 'foo/bar')
143
+ end
144
+ assert Parser.new('foo', 'foo/bar', 'foo')
145
+ assert_raises(SecurityViolation) do
146
+ Parser.new('foo', 'foo/bar', 'bar')
147
+ end
148
+ assert_raises(SecurityViolation) do
149
+ Parser.new('foo', 'bar', 'foo/bar')
150
+ end
151
+ assert_raises(SecurityViolation) do
152
+ Parser.new('foo', 'foo', 'foo/bar/../baz')
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,3 @@
1
+ require 'gem_hadar'
2
+ ENV['START_SIMPLECOV'].to_i == 1 and GemHadar.start_simplecov
3
+ require 'test/unit'
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flott
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Florian Frank
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gem_hadar
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.8
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.1.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: bullshit
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.1.3
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.1.3
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.2.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: tins
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.4.2
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.2
78
+ description: Ruby as a templating language
79
+ email: flori@ping.de
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files:
83
+ - README.rdoc
84
+ - lib/flott.rb
85
+ - lib/flott/version.rb
86
+ - lib/flott/cache.rb
87
+ files:
88
+ - .gitignore
89
+ - .travis.yml
90
+ - Gemfile
91
+ - README.rdoc
92
+ - Rakefile
93
+ - VERSION
94
+ - benchmarks/data/.keep
95
+ - benchmarks/flott_benchmark.rb
96
+ - benchmarks/runner.rb
97
+ - doc-main.txt
98
+ - flott.gemspec
99
+ - install.rb
100
+ - lib/flott.rb
101
+ - lib/flott/cache.rb
102
+ - lib/flott/version.rb
103
+ - make_doc.rb
104
+ - tests/templates/header
105
+ - tests/templates/subdir/deeptemplate
106
+ - tests/templates/subdir/included
107
+ - tests/templates/subdir/subdir2/deepincluded2
108
+ - tests/templates/subdir/subdir2/included2
109
+ - tests/templates/subdir/subdir3/included3
110
+ - tests/templates/template
111
+ - tests/templates/template2
112
+ - tests/templates/toplevel
113
+ - tests/templates/toplevel2
114
+ - tests/test_cache.rb
115
+ - tests/test_flott.rb
116
+ - tests/test_flott_file.rb
117
+ - tests/test_helper.rb
118
+ homepage: http://github.com/flori/flott
119
+ licenses: []
120
+ post_install_message:
121
+ rdoc_options:
122
+ - --title
123
+ - Flott - Ruby as a templating language
124
+ - --main
125
+ - README.rdoc
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ segments:
135
+ - 0
136
+ hash: -2936619538582661052
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 1.8.24
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Ruby as a templating language
149
+ test_files:
150
+ - tests/test_flott_file.rb
151
+ - tests/test_flott.rb
152
+ - tests/test_cache.rb
153
+ - tests/test_helper.rb