comatose-rubyisbeautiful 3.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.
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