vanilla 1.17 → 1.17.1

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 (56) hide show
  1. data/Rakefile +21 -7
  2. data/bin/vanilla +2 -2
  3. data/lib/vanilla.rb +10 -7
  4. data/lib/vanilla/app.rb +57 -97
  5. data/lib/vanilla/config.rb +46 -0
  6. data/lib/vanilla/console.rb +1 -1
  7. data/lib/vanilla/renderers/base.rb +12 -2
  8. data/lib/vanilla/request.rb +9 -34
  9. data/lib/vanilla/routing.rb +34 -0
  10. data/lib/vanilla/test_helper.rb +10 -7
  11. data/pristine_app/Gemfile.lock +35 -0
  12. data/pristine_app/application.rb +2 -4
  13. data/pristine_app/public/vanilla.css +299 -9
  14. data/pristine_app/soups/base/layout.snip +11 -7
  15. data/pristine_app/soups/base/start.snip +15 -14
  16. data/pristine_app/soups/system/current_snip.rb +2 -2
  17. data/pristine_app/soups/system/feed.rb +30 -0
  18. data/pristine_app/soups/system/index.rb +3 -3
  19. data/pristine_app/soups/system/link_to.rb +5 -1
  20. data/pristine_app/soups/system/link_to_current_snip.rb +2 -3
  21. data/pristine_app/soups/tutorial/tutorial-layout.snip +9 -2
  22. data/pristine_app/soups/tutorial/tutorial-links.snip +2 -1
  23. data/pristine_app/soups/tutorial/tutorial-removing.snip.markdown +8 -0
  24. data/pristine_app/soups/tutorial/tutorial-renderers.snip.markdown +10 -4
  25. data/pristine_app/soups/tutorial/tutorial.snip.markdown +0 -1
  26. data/pristine_app/soups/tutorial/vanilla-rb.snip +4 -6
  27. data/pristine_app/tmp/restart.txt +0 -0
  28. data/test/core/configuration_test.rb +89 -0
  29. data/test/{dynasnip_test.rb → core/dynasnip_test.rb} +0 -0
  30. data/test/{renderers → core/renderers}/base_renderer_test.rb +37 -0
  31. data/test/{renderers → core/renderers}/erb_renderer_test.rb +0 -0
  32. data/test/{renderers → core/renderers}/haml_renderer_test.rb +0 -0
  33. data/test/{renderers → core/renderers}/markdown_renderer_test.rb +0 -0
  34. data/test/{renderers → core/renderers}/raw_renderer_test.rb +0 -0
  35. data/test/{renderers → core/renderers}/ruby_renderer_test.rb +0 -0
  36. data/test/core/routing_test.rb +30 -0
  37. data/test/{snip_inclusion_test.rb → core/snip_inclusion_test.rb} +0 -0
  38. data/test/{snip_reference_parser_test.rb → core/snip_reference_parser_test.rb} +0 -0
  39. data/test/{test_helper.rb → core/test_helper.rb} +5 -4
  40. data/test/core/vanilla_app_test.rb +51 -0
  41. data/test/{vanilla_presenting_test.rb → core/vanilla_presenting_test.rb} +15 -1
  42. data/test/{vanilla_request_test.rb → core/vanilla_request_test.rb} +0 -0
  43. data/test/pristine_app/current_snip_test.rb +46 -0
  44. data/test/pristine_app/feed_test.rb +47 -0
  45. data/test/pristine_app/index_test.rb +34 -0
  46. data/test/pristine_app/link_to_current_snip_test.rb +11 -0
  47. data/test/pristine_app/link_to_test.rb +27 -0
  48. data/test/pristine_app/page_title_test.rb +15 -0
  49. data/test/pristine_app/raw_test.rb +24 -0
  50. data/test/pristine_app/test_helper.rb +25 -0
  51. metadata +83 -42
  52. data/lib/vanilla/routes.rb +0 -18
  53. data/test/dynasnips/link_to_current_snip_test.rb +0 -19
  54. data/test/dynasnips/link_to_test.rb +0 -27
  55. data/test/dynasnips/page_title_test.rb +0 -19
  56. data/test/vanilla_app_test.rb +0 -111
@@ -0,0 +1,34 @@
1
+ module Vanilla
2
+ module Routing
3
+
4
+ def url_to(snip_name, part=nil)
5
+ url = "/#{snip_name.gsub(" ", "+")}"
6
+ url += "/#{part}" if part
7
+ url
8
+ end
9
+
10
+ # i.e. / or nothing
11
+ ROOT = /\A\/?\Z/
12
+ # i.e. /start, /start.html
13
+ SNIP = /\A\/([\w\-\s]+)(\/|\.(\w+))?\Z/
14
+ # i.e. /blah/part, /blah/part.raw
15
+ SNIP_AND_PART = /\A\/([\w\-\s]+)\/([\w\-\s]+)(\/|\.(\w+))?\Z/
16
+
17
+ # Returns an array of three components;
18
+ # * the snip
19
+ # * the part
20
+ # * the format
21
+ def self.parse(path)
22
+ case CGI.unescape(path)
23
+ when ROOT
24
+ [nil, nil, nil]
25
+ when SNIP
26
+ [$1, nil, $3]
27
+ when SNIP_AND_PART
28
+ [$1, $2, $4]
29
+ else
30
+ []
31
+ end
32
+ end
33
+ end
34
+ end
@@ -7,17 +7,16 @@ module Vanilla
7
7
  module TestHelper
8
8
  include Rack::Test::Methods
9
9
 
10
- def app
10
+ def app(klass=Vanilla.apps.first)
11
11
  unless @__app
12
- Application.configure do |config|
13
- # inject a sandbox soup path first.
12
+ klass.configure do |config|
13
+ # inject a sandbox soup path first. This ensures we can write
14
+ # to the application's soup without actually affecting the
15
+ # app's content.
14
16
  config.soups ||= []
15
17
  config.soups.unshift test_soup_path
16
- # Ensure that the root path is set; this helps with
17
- # running tests from different directories
18
- config.root_path = File.expand_path("../.", __FILE__)
19
18
  end
20
- @__app = Application.new
19
+ @__app = klass.new
21
20
  end
22
21
  @__app
23
22
  end
@@ -26,6 +25,10 @@ module Vanilla
26
25
  FileUtils.mkdir_p(test_soup_path)
27
26
  end
28
27
 
28
+ def vanilla_reset
29
+ Vanilla.apps.each { |a| a.reset! }
30
+ end
31
+
29
32
  def assert_response_status(expected, uri)
30
33
  get uri
31
34
  assert_equal expected, last_response.status
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: /Users/james/Code/lazyatom/vanilla-rb
3
+ specs:
4
+ vanilla (1.17)
5
+ BlueCloth (>= 1.0.0)
6
+ RedCloth (>= 4.1.1)
7
+ haml (>= 3.1)
8
+ parslet (>= 1.2.0)
9
+ rack (>= 0.9.1)
10
+ rack-test (>= 0.5.7)
11
+ ratom (>= 0.3.5)
12
+ soup (>= 1.0.8)
13
+
14
+ GEM
15
+ remote: http://rubygems.org/
16
+ specs:
17
+ BlueCloth (1.0.1)
18
+ RedCloth (4.2.7)
19
+ blankslate (2.1.2.4)
20
+ haml (3.1.1)
21
+ libxml-ruby (2.0.5)
22
+ parslet (1.2.0)
23
+ blankslate (~> 2.0)
24
+ rack (1.2.2)
25
+ rack-test (0.5.7)
26
+ rack (>= 1.0)
27
+ ratom (0.6.8)
28
+ libxml-ruby (>= 1.1.2)
29
+ soup (1.0.8)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ vanilla!
@@ -10,7 +10,7 @@ end
10
10
  Application.configure do |config|
11
11
  # The root directory of the application; normally the directory this
12
12
  # file is in.
13
- config.root_path = File.expand_path(__FILE__)
13
+ config.root = File.dirname(File.expand_path(__FILE__))
14
14
 
15
15
  # You can partition your snips into subdirectories to keep things tidy.
16
16
  # This doesn't affect their URL structure on the site (everything is
@@ -37,7 +37,5 @@ Application.configure do |config|
37
37
  # You can register additional renderer classes, to be used with snips
38
38
  # with the given extensions or 'render_as' attributes
39
39
  #
40
- # config.renderers = {
41
- # :awesome => "My::Custom::RendererClass"
42
- # }
40
+ # config.renderers[:awesome] = My::Custom::RendererClass
43
41
  end
@@ -1,19 +1,309 @@
1
- #controls {
2
- padding-left: 0;
1
+ /* VANILLA CSS
2
+
3
+ 1. Reset styles
4
+ 2. Misc helpers (clearfix, nice defaults)
5
+ 3. Grid
6
+ 4. Main Layout Elements
7
+ 4.1 Spacing
8
+ 4.2 Colour
9
+ 5. Typography
10
+ 6. Chrome
11
+
12
+ --------------------------------------------- */
13
+
14
+
15
+ /* 1. Reset styles
16
+ --------------------------------------------- */
17
+
18
+ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
19
+ margin: 0;
20
+ padding: 0;
21
+ font-size: 100%;
22
+ vertical-align: baseline;
23
+ border: 0;
24
+ outline: 0;
25
+ background: transparent;
3
26
  }
4
27
 
5
- #controls li {
6
- background: #eee;
7
- display: inline;
8
- padding: 0.2em 0.5em;
28
+ ol, ul {
29
+ list-style: none;
30
+ }
31
+
32
+ blockquote, q {
33
+ quotes: none;
34
+ }
35
+
36
+ :focus {
37
+ outline: 0;
38
+ }
39
+
40
+ table {
41
+ border-collapse: collapse;
42
+ border-spacing: 0;
43
+ }
44
+
45
+ /* 2. Misc helpers (clearfix, nice defaults)
46
+ --------------------------------------------- */
47
+
48
+ hr, .hide {
49
+ display: none;
50
+ }
51
+
52
+ a img {
53
+ border: none;
54
+ }
55
+
56
+ .clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}
57
+ .clearfix:after{clear:both;content:' ';display:block;font-size:0;line-height:0;visibility:hidden;width:0;height:0}
58
+ * html .clearfix, *:first-child+html .clearfix { zoom:1 }
59
+
60
+ /* 3. Grid
61
+ --------------------------------------------- */
62
+
63
+ /*
64
+ & Columns : 16
65
+ & Gutter %: 20%
66
+ & MinWidth: 960px
67
+ & MaxWidth: 1080px
68
+ */
69
+ .grid_1 { width: 5%; }
70
+ .grid_2 { width: 11.25%; }
71
+ .grid_3 { width: 17.5%; }
72
+ .grid_4 { width: 23.75%; }
73
+ .grid_5 { width: 30%; }
74
+ .grid_6 { width: 36.25%; }
75
+ .grid_7 { width: 42.5%; }
76
+ .grid_8 { width: 48.75%; }
77
+ .grid_9 { width: 55%; }
78
+ .grid_10 { width: 61.25%; }
79
+ .grid_11 { width: 67.5%; }
80
+ .grid_12 { width: 73.75%; }
81
+ .grid_13 { width: 80%; }
82
+ .grid_14 { width: 86.25%; }
83
+ .grid_15 { width: 92.5%; }
84
+ .grid_16 { width: 98.75%; }
85
+
86
+ .grid_1,
87
+ .grid_2,
88
+ .grid_3,
89
+ .grid_4,
90
+ .grid_5,
91
+ .grid_6,
92
+ .grid_7,
93
+ .grid_8,
94
+ .grid_9,
95
+ .grid_10,
96
+ .grid_11,
97
+ .grid_12,
98
+ .grid_13,
99
+ .grid_14,
100
+ .grid_15,
101
+ .grid_16 {
102
+ margin-left: 0.625%;
103
+ margin-right: 0.625%;
104
+ float: left;
105
+ display: block;
106
+ }
107
+
108
+ .alpha{margin-left:0px;}
109
+ .omega{margin-right:0px;}
110
+
111
+ .container {
112
+ min-width: 960px;
113
+ max-width: 1080px;
114
+ margin: auto;
115
+ }
116
+
117
+ /* 4. Main Layout Elements
118
+ --------------------------------------------- */
119
+
120
+ /* 4.1 Spacing
121
+ --------------------------------------------- */
122
+
123
+ #content {
124
+ padding-left: 20px;
125
+ padding-top: 20px;
126
+ }
127
+
128
+ #content p, #content li {
129
+ padding-right: 20px;
130
+ }
131
+
132
+ /* 4.2 Colour
133
+ --------------------------------------------- */
134
+
135
+ body {
136
+ color: #333;
137
+ background: #fff;
138
+ border-top: 1px solid #333;
139
+ }
140
+
141
+ .container {
142
+
143
+ }
144
+
145
+ #content {
146
+
147
+ }
148
+
149
+ a {
150
+ color: #3cb55c;
151
+ }
152
+
153
+ a:hover {
154
+ color: #205f30;
155
+ }
156
+
157
+ pre {
158
+ background-color: #332a32;
159
+ color: #eee;
160
+ }
161
+
162
+ /* 5. Typography
163
+ --------------------------------------------- */
164
+
165
+ body {
166
+ font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif;
167
+ }
168
+
169
+ h1 {
170
+ font-size: 24px;
171
+ line-height: 40px;
172
+ margin-bottom: 20px;
173
+ }
174
+
175
+ h2 {
176
+ font-size: 20px;
177
+ line-height: 20px;
178
+ margin-bottom: 20px;
179
+ }
180
+
181
+ h3 {
182
+ font-size: 16px;
183
+ line-height: 40px;
184
+ }
185
+
186
+ p, li, blockquote {
187
+ font-family: Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif;
188
+ font-size: 16px;
189
+ line-height: 20px;
190
+ margin-bottom: 20px;
191
+ }
192
+
193
+ ul,
194
+ ol {
195
+ margin-bottom: 20px;
196
+ }
197
+
198
+ #content ul, #content ol {
199
+ margin-bottom: 40px;
200
+ padding-left: 40px;
201
+ padding-right: 40px;
202
+ padding-top: 20px;
203
+ }
204
+
205
+ #content ul {
206
+ list-style: disc;
207
+ }
208
+
209
+ #content ol {
210
+ list-style: decimal;
211
+ }
212
+
213
+ strong {
214
+ font-weight: bold;
9
215
  }
10
216
 
11
217
  pre {
12
- margin-left: 1em;
13
- background-color: #ddd;
14
- padding: 1em;
218
+ font-size: 16px;
219
+ line-height: 20px;
220
+ margin-bottom: 20px;
221
+ padding: 20px;
222
+ }
223
+
224
+ tt, code, kbd, samp {
225
+ font-family: monospace;
226
+ font-size: 12px;
227
+ }
228
+
229
+ p code {
230
+ font-size: 14px;
231
+ }
232
+
233
+ a {
234
+ font-weight: bold;
235
+ text-decoration: none;
236
+ }
237
+
238
+ /* 6. Chrome
239
+ --------------------------------------------- */
240
+
241
+ #controls {
242
+ background: #fff;
243
+ border-bottom: 1px solid #ddd;
244
+ border-top: 5px solid #f3ea7c;
245
+ color: #bbb;
246
+ }
247
+
248
+ #controls ul {
249
+ margin-bottom: 0;
250
+ }
251
+
252
+ #controls li {
253
+ float: left;
254
+ font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif;
255
+ font-size: 12px;
256
+ margin: 0;
257
+ padding: 10px 20px;
15
258
  }
16
259
 
17
260
  .malformed_snip_inclusion {
18
261
  background-color: rgba(180,0,0,0.2);
262
+ }
263
+
264
+ /* 7. Welcome page
265
+ --------------------------------------------- */
266
+
267
+ .container {
268
+ }
269
+
270
+ #welcome {
271
+ margin-bottom: 40px;
272
+ border-bottom: 1px solid #ddd;
273
+ }
274
+
275
+ #welcome h1 {
276
+ font-style: italic;
277
+ padding-top: 40px;
278
+ font-size: 40px;
279
+ font-family: Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif;
280
+ line-height: 40px;
281
+ margin-bottom: 0;
282
+ }
283
+
284
+ #welcome h1 a {
285
+ font-size: 80px;
286
+ line-height: 80px;
287
+ display: block;
288
+ font-style: normal;
289
+ border-bottom: 4px solid #f3ea7c;
290
+ }
291
+
292
+ #welcome p {
293
+ margin-top: 100px;
294
+ line-height: 40px;
295
+ font-style: italic;
296
+ margin-bottom: 0;
297
+ font-size: 20px;
298
+ }
299
+
300
+ #welcome p strong {
301
+ font-size: 22px;
302
+ }
303
+
304
+ #description p {
305
+ }
306
+
307
+ #description p:first-child {
308
+
19
309
  }
@@ -6,13 +6,17 @@
6
6
  <link rel="stylesheet" href="/vanilla.css" type="text/css" media="screen" title="no title" charset="utf-8">
7
7
  </head>
8
8
  <body>
9
- <ul id="controls">
10
- <li><a href="/">home</a></li>
11
- <li>{link_to index}</li>
12
- <li>you are viewing: {link_to_current_snip}</li>
13
- </ul>
14
- <div id="content">
15
- {current_snip}
9
+ <div id="controls">
10
+ <ul class="container clearfix">
11
+ <li><a href="/" class="home">Vanilla.rb</a></li>
12
+ <li>{link_to index}</li>
13
+ <li>you are viewing: {link_to_current_snip}</li>
14
+ </ul>
15
+ </div>
16
+ <div class="container clearfix">
17
+ <div id="content" class="grid_12 alpha">
18
+ {current_snip}
19
+ </div>
16
20
  </div>
17
21
  </body>
18
22
  </html>