mango 0.1.1 → 0.5.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +6 -0
  2. data/.yardopts +6 -0
  3. data/README.mdown +62 -29
  4. data/Rakefile +62 -0
  5. data/VERSION +1 -0
  6. data/bin/mango +5 -0
  7. data/doc/HISTORY.mdown +71 -0
  8. data/doc/ROAD-MAP.mdown +10 -0
  9. data/lib/mango.rb +7 -0
  10. data/lib/mango/application.rb +334 -0
  11. data/lib/mango/content_page.rb +193 -0
  12. data/lib/mango/dependencies.rb +125 -0
  13. data/lib/mango/flavored_markdown.rb +82 -0
  14. data/lib/mango/rack/debugger.rb +22 -0
  15. data/lib/mango/runner.rb +95 -0
  16. data/lib/mango/templates/Gemfile +4 -0
  17. data/lib/mango/templates/README.md +1 -0
  18. data/lib/mango/templates/config.ru +4 -0
  19. data/lib/mango/templates/content/index.md +5 -0
  20. data/lib/mango/templates/themes/default/public/images/particles.gif +0 -0
  21. data/lib/mango/templates/themes/default/public/javascripts/fireworks.js +546 -0
  22. data/lib/mango/templates/themes/default/public/javascripts/timer.js +5 -0
  23. data/lib/mango/templates/themes/default/public/robots.txt +5 -0
  24. data/lib/mango/templates/themes/default/public/styles/fireworks.css +55 -0
  25. data/lib/mango/templates/themes/default/public/styles/reset.css +54 -0
  26. data/lib/mango/templates/themes/default/styles/screen.sass +17 -0
  27. data/lib/mango/templates/themes/default/views/404.haml +21 -0
  28. data/lib/mango/templates/themes/default/views/layout.haml +20 -0
  29. data/lib/mango/templates/themes/default/views/page.haml +3 -0
  30. data/lib/mango/version.rb +6 -0
  31. data/mango.gemspec +35 -0
  32. data/spec/app_root/content/about/index.haml +1 -0
  33. data/spec/app_root/content/about/us.haml +1 -0
  34. data/spec/app_root/content/engines/haml.haml +7 -0
  35. data/spec/app_root/content/engines/markdown.markdown +7 -0
  36. data/spec/app_root/content/engines/md.md +7 -0
  37. data/spec/app_root/content/engines/mdown.mdown +7 -0
  38. data/spec/app_root/content/index.haml +1 -0
  39. data/spec/app_root/content/override.haml +1 -0
  40. data/spec/app_root/content/page_with_missing_view.haml +4 -0
  41. data/spec/app_root/content/turner+hooch.haml +1 -0
  42. data/spec/app_root/security_hole.haml +1 -0
  43. data/spec/app_root/themes/default/public/default.css +3 -0
  44. data/spec/app_root/themes/default/public/images/index.html +10 -0
  45. data/spec/app_root/themes/default/public/images/ripe-mango.jpg +0 -0
  46. data/spec/app_root/themes/default/public/override +10 -0
  47. data/spec/app_root/themes/default/public/robots.txt +2 -0
  48. data/spec/app_root/themes/default/public/styles/override.css +3 -0
  49. data/spec/app_root/themes/default/public/styles/reset.css +27 -0
  50. data/spec/app_root/themes/default/public/styles/subfolder/another.css +3 -0
  51. data/spec/app_root/themes/default/security_hole.sass +1 -0
  52. data/spec/app_root/themes/default/security_hole.txt +1 -0
  53. data/spec/app_root/themes/default/styles/override.sass +2 -0
  54. data/spec/app_root/themes/default/styles/screen.sass +13 -0
  55. data/spec/app_root/themes/default/styles/subfolder/screen.sass +12 -0
  56. data/spec/app_root/themes/default/views/404.haml +7 -0
  57. data/spec/app_root/themes/default/views/layout.haml +7 -0
  58. data/spec/app_root/themes/default/views/page.haml +4 -0
  59. data/spec/mango/application/routing_content_pages_spec.rb +357 -0
  60. data/spec/mango/application/routing_public_files_spec.rb +181 -0
  61. data/spec/mango/application/routing_style_sheets_spec.rb +286 -0
  62. data/spec/mango/application_spec.rb +34 -0
  63. data/spec/mango/content_page/finding_spec.rb +213 -0
  64. data/spec/mango/content_page/initializing_spec.rb +298 -0
  65. data/spec/mango/content_page_spec.rb +44 -0
  66. data/spec/mango/dependencies_spec.rb +189 -0
  67. data/spec/mango/flavored_markdown_spec.rb +52 -0
  68. data/spec/mango/rack/debugger_spec.rb +114 -0
  69. data/spec/mango/version_spec.rb +18 -0
  70. data/spec/quality_spec.rb +32 -0
  71. data/spec/spec.opts +3 -0
  72. data/spec/spec_helper.rb +18 -0
  73. data/spec/support/matchers/malformed_whitespace_matchers.rb +60 -0
  74. metadata +304 -17
@@ -0,0 +1,357 @@
1
+ # encoding: UTF-8
2
+ require "spec_helper"
3
+ require "rack/test"
4
+
5
+ describe Mango::Application do
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Mango::Application
10
+ end
11
+
12
+ #################################################################################################
13
+
14
+ describe "GET (empty String)" do
15
+ before(:each) do
16
+ get ""
17
+ end
18
+
19
+ it "should return 200 status code" do
20
+ last_response.should be_ok
21
+ end
22
+
23
+ it "should send the correct Content-Type header" do
24
+ last_response["Content-Type"] == "text/html"
25
+ end
26
+
27
+ it "should send the correct body content" do
28
+ last_response.body.should == <<-EXPECTED
29
+ <!DOCTYPE html>
30
+ <html>
31
+ <head>
32
+ <meta charset='utf-8' />
33
+ <title>App Root Page</title>
34
+ </head>
35
+ <body>
36
+ <h1>Welcome to Mango!</h1>
37
+ <div id='content'>
38
+ <p>/index.haml</p>
39
+ </div>
40
+ </body>
41
+ </html>
42
+ EXPECTED
43
+ end
44
+ end
45
+
46
+ #################################################################################################
47
+
48
+ describe "GET /" do
49
+ before(:each) do
50
+ get "/"
51
+ end
52
+
53
+ it "should return 200 status code" do
54
+ last_response.should be_ok
55
+ end
56
+
57
+ it "should send the correct Content-Type header" do
58
+ last_response["Content-Type"] == "text/html"
59
+ end
60
+
61
+ it "should send the correct body content" do
62
+ last_response.body.should == <<-EXPECTED
63
+ <!DOCTYPE html>
64
+ <html>
65
+ <head>
66
+ <meta charset='utf-8' />
67
+ <title>App Root Page</title>
68
+ </head>
69
+ <body>
70
+ <h1>Welcome to Mango!</h1>
71
+ <div id='content'>
72
+ <p>/index.haml</p>
73
+ </div>
74
+ </body>
75
+ </html>
76
+ EXPECTED
77
+ end
78
+ end
79
+
80
+ #################################################################################################
81
+
82
+ describe "GET /index" do
83
+ before(:each) do
84
+ get "/index"
85
+ end
86
+
87
+ it "should return 200 status code" do
88
+ last_response.should be_ok
89
+ end
90
+
91
+ it "should send the correct Content-Type header" do
92
+ last_response["Content-Type"] == "text/html"
93
+ end
94
+
95
+ it "should send the correct body content" do
96
+ last_response.body.should == <<-EXPECTED
97
+ <!DOCTYPE html>
98
+ <html>
99
+ <head>
100
+ <meta charset='utf-8' />
101
+ <title>App Root Page</title>
102
+ </head>
103
+ <body>
104
+ <h1>Welcome to Mango!</h1>
105
+ <div id='content'>
106
+ <p>/index.haml</p>
107
+ </div>
108
+ </body>
109
+ </html>
110
+ EXPECTED
111
+ end
112
+ end
113
+
114
+ #################################################################################################
115
+
116
+ describe "GET /index?foo=bar" do
117
+ before(:each) do
118
+ get "/index?foo=bar"
119
+ end
120
+
121
+ it "should return 200 status code" do
122
+ last_response.should be_ok
123
+ end
124
+
125
+ it "should send the correct Content-Type header" do
126
+ last_response["Content-Type"] == "text/html"
127
+ end
128
+
129
+ it "should send the correct body content" do
130
+ last_response.body.should == <<-EXPECTED
131
+ <!DOCTYPE html>
132
+ <html>
133
+ <head>
134
+ <meta charset='utf-8' />
135
+ <title>App Root Page</title>
136
+ </head>
137
+ <body>
138
+ <h1>Welcome to Mango!</h1>
139
+ <div id='content'>
140
+ <p>/index.haml</p>
141
+ </div>
142
+ </body>
143
+ </html>
144
+ EXPECTED
145
+ end
146
+ end
147
+
148
+ #################################################################################################
149
+
150
+ describe "GET /about/" do
151
+ before(:each) do
152
+ get "/about/"
153
+ end
154
+
155
+ it "should return 200 status code" do
156
+ last_response.should be_ok
157
+ end
158
+
159
+ it "should send the correct Content-Type header" do
160
+ last_response["Content-Type"] == "text/html"
161
+ end
162
+
163
+ it "should send the correct body content" do
164
+ last_response.body.should == <<-EXPECTED
165
+ <!DOCTYPE html>
166
+ <html>
167
+ <head>
168
+ <meta charset='utf-8' />
169
+ <title>App Root Page</title>
170
+ </head>
171
+ <body>
172
+ <h1>Welcome to Mango!</h1>
173
+ <div id='content'>
174
+ <p>/about/index.haml</p>
175
+ </div>
176
+ </body>
177
+ </html>
178
+ EXPECTED
179
+ end
180
+ end
181
+
182
+ #################################################################################################
183
+
184
+ describe "GET /about/index" do
185
+ before(:each) do
186
+ get "/about/index"
187
+ end
188
+
189
+ it "should return 200 status code" do
190
+ last_response.should be_ok
191
+ end
192
+
193
+ it "should send the correct Content-Type header" do
194
+ last_response["Content-Type"] == "text/html"
195
+ end
196
+
197
+ it "should send the correct body content" do
198
+ last_response.body.should == <<-EXPECTED
199
+ <!DOCTYPE html>
200
+ <html>
201
+ <head>
202
+ <meta charset='utf-8' />
203
+ <title>App Root Page</title>
204
+ </head>
205
+ <body>
206
+ <h1>Welcome to Mango!</h1>
207
+ <div id='content'>
208
+ <p>/about/index.haml</p>
209
+ </div>
210
+ </body>
211
+ </html>
212
+ EXPECTED
213
+ end
214
+ end
215
+
216
+ #################################################################################################
217
+
218
+ describe "GET /about/us" do
219
+ before(:each) do
220
+ get "/about/us"
221
+ end
222
+
223
+ it "should return 200 status code" do
224
+ last_response.should be_ok
225
+ end
226
+
227
+ it "should send the correct Content-Type header" do
228
+ last_response["Content-Type"] == "text/html"
229
+ end
230
+
231
+ it "should send the correct body content" do
232
+ last_response.body.should == <<-EXPECTED
233
+ <!DOCTYPE html>
234
+ <html>
235
+ <head>
236
+ <meta charset='utf-8' />
237
+ <title>App Root Page</title>
238
+ </head>
239
+ <body>
240
+ <h1>Welcome to Mango!</h1>
241
+ <div id='content'>
242
+ <p>/about/us.haml</p>
243
+ </div>
244
+ </body>
245
+ </html>
246
+ EXPECTED
247
+ end
248
+ end
249
+
250
+ #################################################################################################
251
+
252
+ describe "GET /turner%2Bhooch" do
253
+ before(:each) do
254
+ get "/turner%2Bhooch"
255
+ end
256
+
257
+ it "should return 200 status code" do
258
+ last_response.should be_ok
259
+ end
260
+
261
+ it "should send the correct Content-Type header" do
262
+ last_response["Content-Type"] == "text/html"
263
+ end
264
+
265
+ it "should send the correct body content" do
266
+ last_response.body.should == <<-EXPECTED
267
+ <!DOCTYPE html>
268
+ <html>
269
+ <head>
270
+ <meta charset='utf-8' />
271
+ <title>App Root Page</title>
272
+ </head>
273
+ <body>
274
+ <h1>Welcome to Mango!</h1>
275
+ <div id='content'>
276
+ <p>/turner+hooch.haml</p>
277
+ </div>
278
+ </body>
279
+ </html>
280
+ EXPECTED
281
+ end
282
+ end
283
+
284
+ #################################################################################################
285
+
286
+ describe "GET /page_not_found" do
287
+ before(:each) do
288
+ get "/page_not_found"
289
+ end
290
+
291
+ it "should return 404 status code" do
292
+ last_response.should be_not_found
293
+ end
294
+
295
+ it "should send the correct Content-Type header" do
296
+ last_response["Content-Type"] == "text/html"
297
+ end
298
+
299
+ it "should send the correct body content" do
300
+ last_response.body.should == <<-EXPECTED
301
+ <!DOCTYPE html>
302
+ <html>
303
+ <head>
304
+ <meta charset='utf-8' />
305
+ <title>404 Page</title>
306
+ </head>
307
+ <body>
308
+ <h1>Page not found</h1>
309
+ </body>
310
+ </html>
311
+ EXPECTED
312
+ end
313
+ end
314
+
315
+ #################################################################################################
316
+
317
+ describe "GET /page_with_missing_view" do
318
+ it "should raise RuntimeError" do
319
+ path = File.join(SPEC_APP_ROOT, "themes", "default", "views", "missing_view_template.haml")
320
+ lambda {
321
+ get "/page_with_missing_view"
322
+ }.should raise_exception(RuntimeError, "Unable to find a view template file -- #{path}")
323
+ end
324
+ end
325
+
326
+ #################################################################################################
327
+
328
+ describe "GET /../security_hole" do
329
+ before(:each) do
330
+ get "/../security_hole"
331
+ end
332
+
333
+ it "should return 404 status code" do
334
+ last_response.should be_not_found
335
+ end
336
+
337
+ it "should send the correct Content-Type header" do
338
+ last_response["Content-Type"] == "text/html"
339
+ end
340
+
341
+ it "should send the correct body content" do
342
+ last_response.body.should == <<-EXPECTED
343
+ <!DOCTYPE html>
344
+ <html>
345
+ <head>
346
+ <meta charset='utf-8' />
347
+ <title>404 Page</title>
348
+ </head>
349
+ <body>
350
+ <h1>Page not found</h1>
351
+ </body>
352
+ </html>
353
+ EXPECTED
354
+ end
355
+ end
356
+
357
+ end
@@ -0,0 +1,181 @@
1
+ # encoding: UTF-8
2
+ require "spec_helper"
3
+ require "rack/test"
4
+
5
+ describe Mango::Application do
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Mango::Application
10
+ end
11
+
12
+ #################################################################################################
13
+
14
+ describe "GET /robots.txt" do
15
+ before(:each) do
16
+ get "/robots.txt"
17
+ end
18
+
19
+ it "should return 200 status code" do
20
+ last_response.should be_ok
21
+ end
22
+
23
+ it "should send the correct Content-Type header" do
24
+ last_response["Content-Type"] == "text/plain"
25
+ end
26
+
27
+ it "should send the correct body content" do
28
+ last_response.body.should == <<-EXPECTED
29
+ User-agent: *
30
+ Disallow: /cgi-bin/
31
+ EXPECTED
32
+ end
33
+ end
34
+
35
+ #################################################################################################
36
+
37
+ describe "GET /images/index.html" do
38
+ before(:each) do
39
+ get "/images/index.html"
40
+ end
41
+
42
+ it "should return 200 status code" do
43
+ last_response.should be_ok
44
+ end
45
+
46
+ it "should send the correct Content-Type header" do
47
+ last_response["Content-Type"] == "text/html"
48
+ end
49
+
50
+ it "should send the correct body content" do
51
+ last_response.body.should == <<-EXPECTED
52
+ <!DOCTYPE html>
53
+ <html>
54
+ <head>
55
+ <meta charset='utf-8' />
56
+ <title>/themes/default/public/images/index.html</title>
57
+ </head>
58
+ <body>
59
+ <p>/themes/default/public/images/index.html</p>
60
+ </body>
61
+ </html>
62
+ EXPECTED
63
+ end
64
+ end
65
+
66
+ #################################################################################################
67
+
68
+ describe "GET /images/ripe-mango.jpg" do
69
+ before(:each) do
70
+ get "/images/ripe-mango.jpg"
71
+ end
72
+
73
+ it "should return 200 status code" do
74
+ last_response.should be_ok
75
+ end
76
+
77
+ it "should send the correct Content-Type header" do
78
+ last_response["Content-Type"] == "image/jpeg"
79
+ end
80
+
81
+ it "should send the correct body content" do
82
+ content_path = File.join(Mango::Application.public, "images", "ripe-mango.jpg")
83
+ last_response.body.should == File.open(content_path, "rb").read
84
+ end
85
+ end
86
+
87
+ #################################################################################################
88
+
89
+ describe "GET /override" do
90
+ before(:each) do
91
+ get "/override"
92
+ end
93
+
94
+ it "should return 200 status code" do
95
+ last_response.should be_ok
96
+ end
97
+
98
+ it "should send the correct Content-Type header" do
99
+ last_response["Content-Type"] == "text/html"
100
+ end
101
+
102
+ it "should send the correct body content" do
103
+ last_response.body.should == <<-EXPECTED
104
+ <!DOCTYPE html>
105
+ <html>
106
+ <head>
107
+ <meta charset='utf-8' />
108
+ <title>/themes/default/public/override</title>
109
+ </head>
110
+ <body>
111
+ <p>/themes/default/public/override</p>
112
+ </body>
113
+ </html>
114
+ EXPECTED
115
+ end
116
+ end
117
+
118
+ #################################################################################################
119
+
120
+ # see http://bit.ly/9kLBDx
121
+ describe "GET /images/" do
122
+ before(:each) do
123
+ get "/images/"
124
+ end
125
+
126
+ it "should return 200 status code" do
127
+ last_response.should be_ok
128
+ end
129
+
130
+ it "should send the correct Content-Type header" do
131
+ last_response["Content-Type"] == "text/html"
132
+ end
133
+
134
+ it "should send the correct body content" do
135
+ last_response.body.should == <<-EXPECTED
136
+ <!DOCTYPE html>
137
+ <html>
138
+ <head>
139
+ <meta charset='utf-8' />
140
+ <title>/themes/default/public/images/index.html</title>
141
+ </head>
142
+ <body>
143
+ <p>/themes/default/public/images/index.html</p>
144
+ </body>
145
+ </html>
146
+ EXPECTED
147
+ end
148
+ end
149
+
150
+ #################################################################################################
151
+
152
+ describe "GET /../security_hole.txt" do
153
+ before(:each) do
154
+ get "/../security_hole.txt"
155
+ end
156
+
157
+ it "should return 404 status code" do
158
+ last_response.should be_not_found
159
+ end
160
+
161
+ it "should send the correct Content-Type header" do
162
+ last_response["Content-Type"] == "text/html"
163
+ end
164
+
165
+ it "should send the correct body content" do
166
+ last_response.body.should == <<-EXPECTED
167
+ <!DOCTYPE html>
168
+ <html>
169
+ <head>
170
+ <meta charset='utf-8' />
171
+ <title>404 Page</title>
172
+ </head>
173
+ <body>
174
+ <h1>Page not found</h1>
175
+ </body>
176
+ </html>
177
+ EXPECTED
178
+ end
179
+ end
180
+
181
+ end