comatose-rubyisbeautiful 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. data/CHANGELOG +198 -0
  2. data/Gemfile +29 -0
  3. data/Gemfile.lock +130 -0
  4. data/INSTALL +14 -0
  5. data/LICENSE +20 -0
  6. data/Manifest +188 -0
  7. data/README +0 -0
  8. data/README.markdown +113 -0
  9. data/Rakefile +5 -0
  10. data/SPECS +61 -0
  11. data/app/controllers/application_controller.rb +3 -0
  12. data/app/controllers/comatose/admin_controller.rb +425 -0
  13. data/app/controllers/comatose/application_controller.rb +30 -0
  14. data/app/controllers/comatose/base_controller.rb +167 -0
  15. data/app/helpers/application_helper.rb +2 -0
  16. data/app/helpers/comatose/admin_helper.rb +78 -0
  17. data/app/helpers/comatose/application_helper.rb +2 -0
  18. data/app/helpers/comatose/base_helper.rb +5 -0
  19. data/app/models/comatose/page.rb +166 -0
  20. data/app/views/comatose/admin/_form.html.erb +108 -0
  21. data/app/views/comatose/admin/_page_list_item.html.erb +62 -0
  22. data/app/views/comatose/admin/delete.html.erb +18 -0
  23. data/app/views/comatose/admin/edit.html.erb +5 -0
  24. data/app/views/comatose/admin/index.html.erb +34 -0
  25. data/app/views/comatose/admin/new.html.erb +5 -0
  26. data/app/views/comatose/admin/reorder.html.erb +30 -0
  27. data/app/views/comatose/admin/versions.html.erb +40 -0
  28. data/app/views/layouts/application.html.erb +14 -0
  29. data/app/views/layouts/comatose/admin.html.erb +44 -0
  30. data/app/views/layouts/comatose/base.html.erb +14 -0
  31. data/comatose-rubyisbeautiful.gemspec +65 -0
  32. data/config/environment.rb +5 -0
  33. data/config/environments/development.rb +26 -0
  34. data/config/environments/production.rb +49 -0
  35. data/config/environments/test.rb +35 -0
  36. data/config/locales/en.yml +5 -0
  37. data/config.ru +4 -0
  38. data/db/seeds.rb +11 -0
  39. data/lib/comatose/configuration.rb +87 -0
  40. data/lib/comatose/drop.rb +45 -0
  41. data/lib/comatose/engine.rb +28 -0
  42. data/lib/comatose/filters/inline_filter.rb +15 -0
  43. data/lib/comatose/filters/timeago_filter.rb +14 -0
  44. data/lib/comatose/filters/translation_filter.rb +11 -0
  45. data/lib/comatose/locale_constraint.rb +15 -0
  46. data/lib/comatose/logger.rb +10 -0
  47. data/lib/comatose/page_wrapper.rb +147 -0
  48. data/lib/comatose/processing_context.rb +103 -0
  49. data/lib/comatose/routes.rb +70 -0
  50. data/lib/comatose/tasks/admin.rb +57 -0
  51. data/lib/comatose/tasks/data.rb +79 -0
  52. data/lib/comatose/tasks/setup.rb +118 -0
  53. data/lib/comatose/text_filters.rb +148 -0
  54. data/lib/comatose/version.rb +9 -0
  55. data/lib/comatose.rb +88 -0
  56. data/lib/generators/comatose/USAGE +7 -0
  57. data/lib/generators/comatose/comatose_generator.rb +37 -0
  58. data/lib/generators/comatose/templates/comatose.rb +33 -0
  59. data/lib/generators/comatose/templates/migration.erb +32 -0
  60. data/lib/generators/comatose/templates/seeds.erb +2 -0
  61. data/lib/support/class_options.rb +36 -0
  62. data/lib/support/inline_rendering.rb +48 -0
  63. data/lib/support/route_mapper.rb +51 -0
  64. data/lib/tasks/comatose.rake +9 -0
  65. data/lib/text_filters/markdown.rb +14 -0
  66. data/lib/text_filters/markdown_smartypants.rb +15 -0
  67. data/lib/text_filters/none.rb +8 -0
  68. data/lib/text_filters/rdoc.rb +13 -0
  69. data/lib/text_filters/simple.rb +8 -0
  70. data/lib/text_filters/textile.rb +15 -0
  71. data/public/404.html +26 -0
  72. data/public/422.html +26 -0
  73. data/public/500.html +26 -0
  74. data/public/favicon.ico +0 -0
  75. data/public/images/comatose/collapsed.gif +0 -0
  76. data/public/images/comatose/expanded.gif +0 -0
  77. data/public/images/comatose/no-children.gif +0 -0
  78. data/public/images/comatose/page.gif +0 -0
  79. data/public/images/comatose/rails.png +0 -0
  80. data/public/images/comatose/spinner.gif +0 -0
  81. data/public/images/comatose/title-hover-bg.gif +0 -0
  82. data/public/javascripts/comatose/admin.js +406 -0
  83. data/public/javascripts/comatose/application.js +2 -0
  84. data/public/javascripts/comatose/dragdrop.js +974 -0
  85. data/public/javascripts/editor.js +452 -0
  86. data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
  87. data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
  88. data/public/javascripts/jquery/README +67 -0
  89. data/public/javascripts/jquery/jquery.js +11 -0
  90. data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
  91. data/public/javascripts/jquery/jquery.ui.js +1 -0
  92. data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
  93. data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
  94. data/public/javascripts/wymeditor/iframe/default/lbl-blockquote.png +0 -0
  95. data/public/javascripts/wymeditor/iframe/default/lbl-h1.png +0 -0
  96. data/public/javascripts/wymeditor/iframe/default/lbl-h2.png +0 -0
  97. data/public/javascripts/wymeditor/iframe/default/lbl-h3.png +0 -0
  98. data/public/javascripts/wymeditor/iframe/default/lbl-h4.png +0 -0
  99. data/public/javascripts/wymeditor/iframe/default/lbl-h5.png +0 -0
  100. data/public/javascripts/wymeditor/iframe/default/lbl-h6.png +0 -0
  101. data/public/javascripts/wymeditor/iframe/default/lbl-p.png +0 -0
  102. data/public/javascripts/wymeditor/iframe/default/lbl-pre.png +0 -0
  103. data/public/javascripts/wymeditor/iframe/default/wymiframe.css +90 -0
  104. data/public/javascripts/wymeditor/iframe/default/wymiframe.html +26 -0
  105. data/public/javascripts/wymeditor/jquery.wymeditor.js +4688 -0
  106. data/public/javascripts/wymeditor/jquery.wymeditor.min.js +1 -0
  107. data/public/javascripts/wymeditor/jquery.wymeditor.pack.js +1 -0
  108. data/public/javascripts/wymeditor/lang/bg.js +45 -0
  109. data/public/javascripts/wymeditor/lang/ca.js +45 -0
  110. data/public/javascripts/wymeditor/lang/cs.js +45 -0
  111. data/public/javascripts/wymeditor/lang/cy.js +45 -0
  112. data/public/javascripts/wymeditor/lang/de.js +45 -0
  113. data/public/javascripts/wymeditor/lang/en.js +45 -0
  114. data/public/javascripts/wymeditor/lang/es.js +45 -0
  115. data/public/javascripts/wymeditor/lang/fa.js +46 -0
  116. data/public/javascripts/wymeditor/lang/fi.js +44 -0
  117. data/public/javascripts/wymeditor/lang/fr.js +45 -0
  118. data/public/javascripts/wymeditor/lang/gl.js +45 -0
  119. data/public/javascripts/wymeditor/lang/he.js +45 -0
  120. data/public/javascripts/wymeditor/lang/hr.js +45 -0
  121. data/public/javascripts/wymeditor/lang/hu.js +45 -0
  122. data/public/javascripts/wymeditor/lang/it.js +45 -0
  123. data/public/javascripts/wymeditor/lang/nb.js +45 -0
  124. data/public/javascripts/wymeditor/lang/nl.js +45 -0
  125. data/public/javascripts/wymeditor/lang/nn.js +45 -0
  126. data/public/javascripts/wymeditor/lang/pl.js +45 -0
  127. data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
  128. data/public/javascripts/wymeditor/lang/pt.js +45 -0
  129. data/public/javascripts/wymeditor/lang/ru.js +45 -0
  130. data/public/javascripts/wymeditor/lang/sv.js +45 -0
  131. data/public/javascripts/wymeditor/lang/tr.js +45 -0
  132. data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
  133. data/public/javascripts/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
  134. data/public/javascripts/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
  135. data/public/javascripts/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
  136. data/public/javascripts/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
  137. data/public/javascripts/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
  138. data/public/javascripts/wymeditor/plugins/resizable/readme.txt +124 -0
  139. data/public/javascripts/wymeditor/plugins/tidy/README +19 -0
  140. data/public/javascripts/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
  141. data/public/javascripts/wymeditor/plugins/tidy/tidy.php +36 -0
  142. data/public/javascripts/wymeditor/plugins/tidy/wand.png +0 -0
  143. data/public/javascripts/wymeditor/skins/compact/icons.png +0 -0
  144. data/public/javascripts/wymeditor/skins/compact/skin.css +134 -0
  145. data/public/javascripts/wymeditor/skins/compact/skin.js +35 -0
  146. data/public/javascripts/wymeditor/skins/default/icons.png +0 -0
  147. data/public/javascripts/wymeditor/skins/default/skin.css +133 -0
  148. data/public/javascripts/wymeditor/skins/default/skin.js +40 -0
  149. data/public/javascripts/wymeditor/skins/minimal/images/bg.header.gif +0 -0
  150. data/public/javascripts/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
  151. data/public/javascripts/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
  152. data/public/javascripts/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
  153. data/public/javascripts/wymeditor/skins/minimal/skin.css +131 -0
  154. data/public/javascripts/wymeditor/skins/minimal/skin.js +30 -0
  155. data/public/javascripts/wymeditor/skins/silver/COPYING +674 -0
  156. data/public/javascripts/wymeditor/skins/silver/README +27 -0
  157. data/public/javascripts/wymeditor/skins/silver/images/bg.header.gif +0 -0
  158. data/public/javascripts/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
  159. data/public/javascripts/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
  160. data/public/javascripts/wymeditor/skins/silver/images/icons.silver.gif +0 -0
  161. data/public/javascripts/wymeditor/skins/silver/skin.css +297 -0
  162. data/public/javascripts/wymeditor/skins/silver/skin.js +61 -0
  163. data/public/javascripts/wymeditor/skins/twopanels/icons.png +0 -0
  164. data/public/javascripts/wymeditor/skins/twopanels/skin.css +134 -0
  165. data/public/javascripts/wymeditor/skins/twopanels/skin.js +39 -0
  166. data/public/javascripts/wymeditor/skins/wymeditor_icon.png +0 -0
  167. data/public/javascripts/wymeditor.tar +0 -0
  168. data/public/robots.txt +5 -0
  169. data/public/stylesheets/comatose/admin.css +488 -0
  170. data/public/stylesheets/comatose/base.css +9 -0
  171. data/spec/controllers/comatose/base_controller_spec.rb +14 -0
  172. data/spec/controllers/foos_controller_spec.rb +5 -0
  173. data/spec/helpers/foos_helper_spec.rb +15 -0
  174. data/spec/routing/base_routing_spec.rb +12 -0
  175. data/spec/spec_helper.rb +27 -0
  176. data/test/behaviors.rb +106 -0
  177. data/test/fixtures/comatose_pages.yml +96 -0
  178. data/test/functional/comatose_admin_controller_test.rb +114 -0
  179. data/test/functional/comatose_controller_test.rb +45 -0
  180. data/test/integration/comatose_routing_test.rb +17 -0
  181. data/test/javascripts/test.html +26 -0
  182. data/test/javascripts/test_runner.js +307 -0
  183. data/test/old_test_helper.rb +43 -0
  184. data/test/performance/browsing_test.rb +9 -0
  185. data/test/test_helper.rb +13 -0
  186. data/test/unit/class_options_test.rb +52 -0
  187. data/test/unit/comatose_page_test.rb +128 -0
  188. data/test/unit/processing_context_test.rb +108 -0
  189. data/test/unit/text_filters_test.rb +52 -0
  190. data.tar.gz.sig +1 -0
  191. metadata +379 -0
  192. metadata.gz.sig +0 -0
@@ -0,0 +1,488 @@
1
+ BODY {
2
+ background: #DDD;
3
+ margin: 0px 100px;
4
+ padding: 0px;
5
+ font-family: "Lucida Grande", Tahoma, Verdana, Arial, Sans-Serif;
6
+ font-size: 12px;
7
+ min-width: 450px;
8
+ }
9
+
10
+ /* General Layout and Header Area */
11
+ #page-container {
12
+ margin: 0px;
13
+ padding: 0px;
14
+ }
15
+
16
+ #header {
17
+ background: #0053C2;
18
+ padding: 5px;
19
+ border-bottom: 4px solid #00398B;
20
+ }
21
+
22
+ #header A {
23
+ text-decoration: none;
24
+ color: white;
25
+ }
26
+
27
+ #header A:hover {
28
+ color: white;
29
+ }
30
+
31
+ #header h1 {
32
+ margin: 0px;
33
+ padding: 0px;
34
+ padding-left: 10px;
35
+ }
36
+
37
+ #header h5 {
38
+ margin: 0px;
39
+ padding: 0px;
40
+ padding-left: 15px;
41
+ color: silver;
42
+ }
43
+
44
+ #header #flash {
45
+ float: right;
46
+ color: #4BA8FF;
47
+ font-weight: bold;
48
+ margin-right: 5px;
49
+ }
50
+
51
+ /* Content Area */
52
+ #content {
53
+ padding: 15px;
54
+ background: white;
55
+ border-left: 1px solid silver;
56
+ border-right: 1px solid silver;
57
+ }
58
+
59
+ #content h1 {
60
+ margin: 0px;
61
+ padding: 0px;
62
+ font-size: 135%;
63
+ color: gray;
64
+ }
65
+
66
+ #content .action {
67
+ float: right;
68
+ color: gray;
69
+ }
70
+
71
+ #content .action A {
72
+ font-weight: bold;
73
+ text-decoration: none;
74
+ color: navy;
75
+ border-bottom: 1px solid blue;
76
+ margin-left: 15px;
77
+ }
78
+
79
+ #content .action A:hover {
80
+ color: red;
81
+ border-bottom: 1px solid red;
82
+ }
83
+
84
+ #content .page-header {
85
+ color: gray;
86
+ }
87
+
88
+ #import_form {
89
+ position: fixed;
90
+ right: 75px;
91
+ border: 3px solid gray !important;
92
+ -webkit-border-radius: 10px;
93
+ -moz-border-radius: 10px;
94
+ background: #FFF;
95
+ padding: 15px;
96
+ }
97
+
98
+ #import_form FORM {
99
+ display: inline;
100
+ margin: 0px;
101
+ padding: 0px;
102
+ }
103
+
104
+ #import_form A {
105
+ color: maroon !important;
106
+ border-bottom: 1px solid gray !important;
107
+ }
108
+
109
+ #import_form A:hover {
110
+ color: red !important;
111
+ border-bottom: 1px solid red !important;
112
+ }
113
+
114
+ /* Page Listing */
115
+ #content .tree-controller {
116
+ border: 0px;
117
+ cursor: pointer;
118
+ }
119
+
120
+ #content .page-list.root {
121
+ clear: both;
122
+ list-style: none;
123
+ margin: 0px;
124
+ padding: 0px;
125
+ margin-top: 10px;
126
+ }
127
+
128
+ #content .page-list.collapsed {
129
+ display: none;
130
+ }
131
+
132
+ #content .page-list {
133
+ background: white;
134
+ clear: both;
135
+ list-style: none;
136
+ border-left: 0px dotted silver;
137
+ margin: 0px;
138
+ padding: 0px;
139
+ padding-left: 15px;
140
+ margin-top: 2px;
141
+ }
142
+
143
+ #content .page-list LI {
144
+ clear: both;
145
+ padding: 0px;
146
+ margin: 5px 0px;
147
+ padding-top: 2px;
148
+ padding-right: 0px;
149
+ padding-left: 2px;
150
+ }
151
+
152
+ #content .page-list .commands {
153
+ font-size: 90%;
154
+ padding-left: 5px;
155
+ color: silver;
156
+ }
157
+
158
+ #content .page-list .commands A {
159
+ color: gray;
160
+ }
161
+
162
+ #content .page-list .commands A.add-page:hover {
163
+ color: blue;
164
+ }
165
+
166
+ #content .page-list .commands A.reorder-children:hover {
167
+ color: black;
168
+ }
169
+
170
+ #content .page-list .commands A.delete-page:hover {
171
+ color: white;
172
+ }
173
+
174
+ #content .page-list .commands A.reordering {
175
+ background: navy;
176
+ color: white;
177
+ }
178
+
179
+ #content .page-list .commands A.reordering:hover {
180
+ color: white;
181
+ }
182
+
183
+ #content .page-list A.page {
184
+ text-decoration: none;
185
+ color: black;
186
+ margin-left: 3px;
187
+ font-size: 150%;
188
+ display: block;
189
+ }
190
+
191
+ #content .page-list A.page:hover {
192
+ /*color: blue;*/
193
+ background: white url(/../images/comatose/title-hover-bg.gif) top left repeat-y;
194
+ }
195
+
196
+ #content .handle, #content .do-reorder UL LI .handle {
197
+ display: none;
198
+ }
199
+
200
+ #content .page-list .hover {
201
+ background: #F1F0DB;
202
+ }
203
+
204
+ #content .page-list .hover-delete {
205
+ background: red;
206
+ color: #FF8E90;
207
+ }
208
+
209
+ #content .page-list .hover-delete A,
210
+ #content .page-list .hover-delete .commands A {
211
+ color: #FF8E90;
212
+ }
213
+
214
+ #content .page-list .hover-delete A.page {
215
+ color: white;
216
+ border-bottom: 0px;
217
+ }
218
+
219
+ #content .page-list .hover-delete UL LI A.page {
220
+ color: red;
221
+ border-bottom: 0px;
222
+ }
223
+
224
+ #content .do-reorder LI .handle {
225
+ display: inline;
226
+ background: gray;
227
+ color: white;
228
+ padding: 1px 3px;
229
+ cursor: move;
230
+ }
231
+
232
+ #content .page-list .do-reorder .commands A {
233
+ display: none;
234
+ }
235
+
236
+ /* Page Form */
237
+ #content .page-form {
238
+ margin-top: 10px;
239
+ }
240
+
241
+ #content .page-form LABEL {
242
+ font-weight: bold;
243
+ color: #555;
244
+ }
245
+
246
+ #content .page-form .meta-info LABEL {
247
+ color: #999 !important;
248
+ }
249
+
250
+ #content .page-form .label {
251
+ padding-top: 5px;
252
+ width: 75px;
253
+ text-align: right;
254
+ padding-right: 10px;
255
+ }
256
+
257
+ #content .page-form .label.body {
258
+ vertical-align: top;
259
+ padding-top: 10px;
260
+ }
261
+
262
+ #content .page-form .field {
263
+ padding-top: 5px;
264
+ }
265
+
266
+ #content .page-form .field-help {
267
+ color: gray;
268
+ }
269
+
270
+ #content .page-form #page_title {
271
+ font-size: 125%;
272
+ font-weight: bold;
273
+ }
274
+
275
+ #content .page-form #page_slug {
276
+ color: gray;
277
+ }
278
+
279
+ #content .page-form #page_body {
280
+ font-family: monospace;
281
+ font-size: 120%;
282
+ background-color: #00008b;
283
+ width: 60em;
284
+ color: #f5f5f5;
285
+ margin: 10px 2px 10px 0px;
286
+ }
287
+
288
+ #content #button-group {
289
+ padding: 10px;
290
+ text-align: right;
291
+ background-color: #EAEAEA;
292
+ margin-top: 10px;
293
+ }
294
+
295
+ #content #button-group .last-update {
296
+ float: left;
297
+ color: gray;
298
+ padding-top: 4px;
299
+ font-weight: bold;
300
+ }
301
+
302
+ #content #button-group .last-update LABEL {
303
+ font-weight: normal;
304
+ }
305
+
306
+ #content #button-group .last-update A {
307
+ color: gray;
308
+ }
309
+
310
+ #content #button-group A {
311
+ color: maroon;
312
+ }
313
+
314
+ #content #button-group A:hover {
315
+ color: red;
316
+ }
317
+
318
+ #content #preview-area {
319
+ margin-top: 10px;
320
+ }
321
+
322
+ #content #preview-area FIELDSET {
323
+ border: 1px solid silver;
324
+ }
325
+
326
+ #content #preview-area LEGEND {
327
+ font-size: 125%;
328
+ }
329
+
330
+ #content #preview-area .preview-body {
331
+ padding: 10px;
332
+ }
333
+
334
+ #content #preview-area .preview-note {
335
+ background: #FFFFD9;
336
+ padding: 15px;
337
+ }
338
+
339
+ #content #preview-area .commands {
340
+ text-align: right;
341
+ color: gray;
342
+ }
343
+
344
+ #content #preview-area .commands A {
345
+ color: gray;
346
+ }
347
+
348
+ #content #preview-area .commands A:hover {
349
+ color: black;
350
+ }
351
+
352
+ #content .revisions {
353
+ padding: 10px;
354
+ width: 49%;
355
+ }
356
+
357
+ #content .current-content {
358
+ }
359
+
360
+ #content .older-content {
361
+ background: #E9E9E9;
362
+ float: right;
363
+ }
364
+
365
+ #content .revisions label {
366
+ display: block;
367
+ color: #000;
368
+ }
369
+
370
+ #content .revisions label span {
371
+ color: #999;
372
+ font-weight: normal !important;
373
+ }
374
+
375
+ #content .revisions .title {
376
+ font-weight: bold;
377
+ margin-top: 5px;
378
+ }
379
+
380
+ #content .revisions .header {
381
+ font-size: 110%;
382
+ vertical-align: middle;
383
+ font-weight: bold;
384
+ }
385
+
386
+ #content .revisions .header-actions {
387
+ float: right;
388
+ font-size: 90%;
389
+ font-weight: normal;
390
+ color: #999;
391
+ }
392
+
393
+ #content .revisions .meta {
394
+ margin-bottom: 15px;
395
+ }
396
+
397
+ #content .revisions .footer {
398
+ margin-top: 25px !important;
399
+ text-align: center !important;
400
+ }
401
+
402
+ #content #go-btn {
403
+ display: none;
404
+ }
405
+
406
+ /* Errors */
407
+ #errorExplanation {
408
+ border: 1px solid red;
409
+ background: #FFEAEB;
410
+ padding: 10px;
411
+ margin-top: 10px;
412
+ }
413
+
414
+ #errorExplanation h2 {
415
+ margin: 0px;
416
+ padding: 0px;
417
+ color: maroon;
418
+ }
419
+
420
+ #errorExplanation p {
421
+ margin: 0px;
422
+ padding: 0px;
423
+ padding-top: 5px;
424
+ padding-left: 15px;
425
+ }
426
+
427
+ #errorExplanation ul {
428
+ margin: 0px;
429
+ padding: 0px;
430
+ padding-left: 35px;
431
+ }
432
+
433
+ #errorExplanation li {
434
+ margin: 0px;
435
+ padding: 0px;
436
+ padding-top: 5px;
437
+ }
438
+
439
+ /* Footer Area*/
440
+ #footer {
441
+ border-top: 4px solid #AAA;
442
+ text-align: center;
443
+ font-size: 90%;
444
+ color: #AAA;
445
+ padding-top: 5px;
446
+ padding-bottom: 5px;
447
+ }
448
+
449
+ #footer A {
450
+ color: #AAA;
451
+ text-decoration: none;
452
+ font-weight: bold;
453
+ }
454
+
455
+ #footer A:hover {
456
+ color: #333;
457
+ text-decoration: underline;
458
+ }
459
+
460
+ /* Modifiers */
461
+
462
+ /* When JavaScript is Turned Off... We need to adjust some things... */
463
+ .noscript #more-options,
464
+ .noscript #preview-area,
465
+ .noscript #preview-btn,
466
+ .noscript .tree-controller {
467
+ display: none;
468
+ }
469
+
470
+ .noscript .page-list.collapsed {
471
+ display: block !important;
472
+ }
473
+
474
+ .noscript .delete-page:hover {
475
+ color: red !important;
476
+ }
477
+
478
+ .noscript #content .page-form #page_title,
479
+ .noscript #content .page-form #page_slug,
480
+ .noscript #content .page-form #page_parent,
481
+ .noscript #content .page-form #page_keywords,
482
+ .noscript #content .page-form #page_body {
483
+ width: 100% !important;
484
+ }
485
+
486
+ .noscript #content .revisions #go-btn {
487
+ display: inline;
488
+ }
@@ -0,0 +1,9 @@
1
+ BODY {
2
+ font-family: sans-serif;
3
+ color: #555;
4
+ }
5
+
6
+ h1, h2, h3, h4, h5 {
7
+ font-family: serif;
8
+ color: #000;
9
+ }
@@ -0,0 +1,14 @@
1
+ describe RecordingsController do
2
+
3
+ describe "a route" do
4
+ assert_routing { :path => "/en", :method => :get }, { :controller => "comatose/base", :action => "show" }
5
+ end
6
+ #describe "GET index" do
7
+ # it "assigns all recordings as @recordings" do
8
+ # Recording.stub(:find).with(:all).and_return([mock_recording])
9
+ # get :index
10
+ # assigns[:recordings].should == [mock_recording]
11
+ # end
12
+ #end
13
+
14
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe FoosController do
4
+
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the FoosHelper. For example:
5
+ #
6
+ # describe FoosHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe FoosHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Comatose::BaseController do
4
+
5
+ describe "a route" do
6
+ it "routes to comatose#show" do
7
+ get("/en").should route_to :controller => "comatose/base", :action => "show"
8
+ end
9
+ end
10
+
11
+
12
+ end
@@ -0,0 +1,27 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+
6
+ # Requires supporting ruby files with custom matchers and macros, etc,
7
+ # in spec/support/ and its subdirectories.
8
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ # == Mock Framework
12
+ #
13
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
14
+ #
15
+ # config.mock_with :mocha
16
+ # config.mock_with :flexmock
17
+ # config.mock_with :rr
18
+ config.mock_with :rspec
19
+
20
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
24
+ # examples within a transaction, remove the following line or assign false
25
+ # instead of true.
26
+ config.use_transactional_fixtures = true
27
+ end
data/test/behaviors.rb ADDED
@@ -0,0 +1,106 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+
4
+ module Behaviors
5
+ include Rake
6
+
7
+ class ReportTask < TaskLib
8
+ attr_accessor :pattern
9
+ attr_accessor :html_dir
10
+
11
+ def initialize(name=:behaviors)
12
+ @name = name
13
+ @html_dir = 'doc'
14
+ yield self if block_given?
15
+ define
16
+ end
17
+
18
+ def define
19
+ desc "List behavioral definitions for the classes specified (use for=<regexp> to further limit files included in report)"
20
+ task @name do
21
+ specifications.each do |spec|
22
+ puts "#{spec.name} should:\n"
23
+ spec.requirements.each do |req|
24
+ puts " - #{req}"
25
+ end
26
+ end
27
+ end
28
+
29
+ desc "Generate html report of behavioral definitions for the classes specified (use for=<regexp> to further limit files included in report)"
30
+ task "#{@name}_html" do
31
+ require 'erb'
32
+ txt =<<-EOS
33
+ <html><head>
34
+ <style>
35
+ div.title { width: 600px; font: bold 14pt trebuchet ms; }
36
+ div.specification { font: bold 12pt trebuchet ms; border: solid 1px black; width: 600px; padding: 5px; margin: 5px; }
37
+ ul.requirements { font: normal 11pt verdana; padding-left: 0; margin-left: 0; border-bottom: 1px solid gray; width: 600px; }
38
+ ul.requirements li { list-style: none; margin: 0; padding: 0.25em; border-top: 1px solid gray; }
39
+ </style>
40
+ </head>
41
+ <body>
42
+ <div class="title">Specifications</div>
43
+ <% specifications.each do |spec| %>
44
+ <div class="specification">
45
+ <%= spec.name %> should:
46
+ <ul class="requirements">
47
+ <% spec.requirements.each do |req| %>
48
+ <li><%= req %></li>
49
+ <% end %>
50
+ </ul>
51
+ </div>
52
+ <% end %>
53
+ </body>
54
+ </html>
55
+ EOS
56
+ output_dir = File.expand_path(@html_dir)
57
+ mkdir_p output_dir
58
+ output_filename = output_dir + "/behaviors.html"
59
+ File.open(output_filename,"w") do |f|
60
+ f.write ERB.new(txt).result(binding)
61
+ end
62
+ puts "(Wrote #{output_filename})"
63
+ end
64
+ end
65
+
66
+
67
+ protected
68
+
69
+ def test_files
70
+ test_list = FileList[@pattern]
71
+ if ENV['for']
72
+ test_list = test_list.grep(/#{ENV['for']}/i)
73
+ end
74
+ test_list
75
+ end
76
+
77
+ def specifications
78
+ test_files.map do |file|
79
+ spec = OpenStruct.new
80
+ m = %r".*/([^/].*)_test.rb".match(file)
81
+ class_name = titleize(m[1]) if m[1]
82
+ spec.name = class_name
83
+ spec.requirements = []
84
+ File::readlines(file).each do |line|
85
+ if line =~ /^\s*should\s+\(?\s*["'](.*)["']/
86
+ spec.requirements << $1
87
+ end
88
+ end
89
+ spec
90
+ end
91
+ end
92
+
93
+ def titleize(word)
94
+ humanize(underscore(word)).gsub(/\b([a-z])/) { $1.capitalize }
95
+ end
96
+
97
+ def underscore(camel_cased_word) camel_cased_word.to_s.gsub(/::/, '/').
98
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
99
+ end
100
+
101
+ def humanize(lower_case_and_underscored_word)
102
+ lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
103
+ end
104
+
105
+ end
106
+ end