aslakjo-aslakjo-comatose 2.0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. data/CHANGELOG +195 -0
  2. data/INSTALL +20 -0
  3. data/LICENSE +20 -0
  4. data/MANIFEST +91 -0
  5. data/README.markdown +159 -0
  6. data/Rakefile +176 -0
  7. data/SPECS +61 -0
  8. data/about.yml +7 -0
  9. data/bin/comatose +112 -0
  10. data/comatose.gemspec +113 -0
  11. data/generators/comatose_migration/USAGE +15 -0
  12. data/generators/comatose_migration/comatose_migration_generator.rb +74 -0
  13. data/generators/comatose_migration/templates/migration.rb +35 -0
  14. data/generators/comatose_migration/templates/v4_upgrade.rb +15 -0
  15. data/generators/comatose_migration/templates/v6_upgrade.rb +23 -0
  16. data/generators/comatose_migration/templates/v7_upgrade.rb +22 -0
  17. data/init.rb +2 -0
  18. data/install.rb +18 -0
  19. data/lib/acts_as_versioned.rb +543 -0
  20. data/lib/comatose.rb +33 -0
  21. data/lib/comatose/comatose_drop.rb +79 -0
  22. data/lib/comatose/configuration.rb +69 -0
  23. data/lib/comatose/page_wrapper.rb +119 -0
  24. data/lib/comatose/processing_context.rb +69 -0
  25. data/lib/comatose/tasks/admin.rb +60 -0
  26. data/lib/comatose/tasks/data.rb +82 -0
  27. data/lib/comatose/tasks/setup.rb +52 -0
  28. data/lib/comatose/version.rb +4 -0
  29. data/lib/comatose_admin_controller.rb +395 -0
  30. data/lib/comatose_admin_helper.rb +37 -0
  31. data/lib/comatose_controller.rb +138 -0
  32. data/lib/comatose_helper.rb +3 -0
  33. data/lib/comatose_page.rb +141 -0
  34. data/lib/liquid.rb +52 -0
  35. data/lib/liquid/block.rb +96 -0
  36. data/lib/liquid/context.rb +190 -0
  37. data/lib/liquid/document.rb +17 -0
  38. data/lib/liquid/drop.rb +48 -0
  39. data/lib/liquid/errors.rb +7 -0
  40. data/lib/liquid/extensions.rb +53 -0
  41. data/lib/liquid/file_system.rb +62 -0
  42. data/lib/liquid/htmltags.rb +64 -0
  43. data/lib/liquid/standardfilters.rb +111 -0
  44. data/lib/liquid/standardtags.rb +399 -0
  45. data/lib/liquid/strainer.rb +42 -0
  46. data/lib/liquid/tag.rb +25 -0
  47. data/lib/liquid/template.rb +88 -0
  48. data/lib/liquid/variable.rb +39 -0
  49. data/lib/redcloth.rb +1129 -0
  50. data/lib/support/class_options.rb +36 -0
  51. data/lib/support/inline_rendering.rb +48 -0
  52. data/lib/support/route_mapper.rb +50 -0
  53. data/lib/text_filters.rb +140 -0
  54. data/lib/text_filters/markdown.rb +14 -0
  55. data/lib/text_filters/markdown_smartypants.rb +15 -0
  56. data/lib/text_filters/none.rb +8 -0
  57. data/lib/text_filters/rdoc.rb +13 -0
  58. data/lib/text_filters/simple.rb +8 -0
  59. data/lib/text_filters/textile.rb +15 -0
  60. data/rails/init.rb +3 -0
  61. data/resources/layouts/comatose_admin_template.html.erb +28 -0
  62. data/resources/public/images/collapsed.gif +0 -0
  63. data/resources/public/images/expanded.gif +0 -0
  64. data/resources/public/images/no-children.gif +0 -0
  65. data/resources/public/images/page.gif +0 -0
  66. data/resources/public/images/spinner.gif +0 -0
  67. data/resources/public/images/title-hover-bg.gif +0 -0
  68. data/resources/public/javascripts/comatose_admin.js +401 -0
  69. data/resources/public/stylesheets/comatose_admin.css +404 -0
  70. data/tasks/comatose.rake +9 -0
  71. data/test/behaviors.rb +106 -0
  72. data/test/fixtures/comatose_pages.yml +96 -0
  73. data/test/functional/comatose_admin_controller_test.rb +114 -0
  74. data/test/functional/comatose_controller_test.rb +44 -0
  75. data/test/javascripts/test.html +26 -0
  76. data/test/javascripts/test_runner.js +307 -0
  77. data/test/test_helper.rb +55 -0
  78. data/test/unit/class_options_test.rb +52 -0
  79. data/test/unit/comatose_page_test.rb +136 -0
  80. data/test/unit/processing_context_test.rb +108 -0
  81. data/test/unit/text_filters_test.rb +52 -0
  82. data/views/comatose_admin/_form.html.erb +96 -0
  83. data/views/comatose_admin/_page_list_item.html.erb +60 -0
  84. data/views/comatose_admin/delete.html.erb +18 -0
  85. data/views/comatose_admin/edit.html.erb +5 -0
  86. data/views/comatose_admin/index.html.erb +29 -0
  87. data/views/comatose_admin/new.html.erb +5 -0
  88. data/views/comatose_admin/reorder.html.erb +30 -0
  89. data/views/comatose_admin/versions.html.erb +40 -0
  90. data/views/layouts/comatose_admin.html.erb +837 -0
  91. data/views/layouts/comatose_admin_customize.html.erb +28 -0
  92. data/views/layouts/comatose_content.html.erb +17 -0
  93. metadata +148 -0
@@ -0,0 +1,404 @@
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
+ /* General Layout and Header Area */
10
+ #page-container {
11
+ margin: 0px;
12
+ padding: 0px;
13
+ }
14
+ #header {
15
+ background: #0053C2;
16
+ padding: 5px;
17
+ border-bottom: 4px solid #00398B;
18
+ }
19
+ #header A {
20
+ text-decoration: none;
21
+ color: white;
22
+ }
23
+ #header A:hover {
24
+ color: white;
25
+ }
26
+ #header h1 {
27
+ margin: 0px;
28
+ padding: 0px;
29
+ padding-left: 10px;
30
+ }
31
+ #header h5 {
32
+ margin: 0px;
33
+ padding: 0px;
34
+ padding-left: 15px;
35
+ color: silver;
36
+ }
37
+ #header #flash {
38
+ float: right;
39
+ color: #4BA8FF;
40
+ font-weight: bold;
41
+ margin-right: 5px;
42
+ }
43
+ /* Content Area */
44
+ #content {
45
+ padding: 15px;
46
+ background: white;
47
+ border-left: 1px solid silver;
48
+ border-right: 1px solid silver;
49
+ }
50
+ #content h1 {
51
+ margin: 0px;
52
+ padding: 0px;
53
+ font-size: 135%;
54
+ color: gray;
55
+ }
56
+ #content .action {
57
+ float: right;
58
+ color: gray;
59
+ }
60
+ #content .action A {
61
+ font-weight: bold;
62
+ text-decoration: none;
63
+ color: navy;
64
+ border-bottom: 1px solid blue;
65
+ margin-left: 15px;
66
+ }
67
+ #content .action A:hover {
68
+ color: red;
69
+ border-bottom: 1px solid red;
70
+ }
71
+ #content .page-header {
72
+ color: gray;
73
+ }
74
+ #import_form {
75
+ position: fixed;
76
+ right: 75px;
77
+ border: 3px solid gray !important;
78
+ -webkit-border-radius: 10px;
79
+ -moz-border-radius: 10px;
80
+ background: #FFF;
81
+ padding: 15px;
82
+ }
83
+ #import_form FORM {
84
+ display: inline;
85
+ margin: 0px;
86
+ padding: 0px;
87
+ }
88
+ #import_form A {
89
+ color: maroon !important;
90
+ border-bottom: 1px solid gray !important;
91
+ }
92
+ #import_form A:hover {
93
+ color: red !important;
94
+ border-bottom: 1px solid red !important;
95
+ }
96
+
97
+ /* Page Listing */
98
+ #content .tree-controller {
99
+ border: 0px;
100
+ cursor: pointer;
101
+ }
102
+ #content .page-list.root {
103
+ clear: both;
104
+ list-style: none;
105
+ margin: 0px;
106
+ padding: 0px;
107
+ margin-top: 10px;
108
+ }
109
+ #content .page-list.collapsed {
110
+ display: none;
111
+ }
112
+ #content .page-list {
113
+ background: white;
114
+ clear: both;
115
+ list-style: none;
116
+ border-left: 0px dotted silver;
117
+ margin: 0px;
118
+ padding: 0px;
119
+ padding-left: 15px;
120
+ margin-top: 2px;
121
+ }
122
+ #content .page-list LI {
123
+ clear: both;
124
+ padding: 0px;
125
+ margin: 5px 0px;
126
+ padding-top: 2px;
127
+ padding-right: 0px;
128
+ padding-left: 2px;
129
+ }
130
+ #content .page-list .commands {
131
+ font-size: 90%;
132
+ padding-left: 5px;
133
+ color: silver;
134
+ }
135
+ #content .page-list .commands A {
136
+ color: gray;
137
+ }
138
+ #content .page-list .commands A.add-page:hover {
139
+ color: blue;
140
+ }
141
+ #content .page-list .commands A.reorder-children:hover {
142
+ color: black;
143
+ }
144
+ #content .page-list .commands A.delete-page:hover {
145
+ color: white;
146
+ }
147
+ #content .page-list .commands A.reordering {
148
+ background: navy;
149
+ color: white;
150
+ }
151
+ #content .page-list .commands A.reordering:hover {
152
+ color: white;
153
+ }
154
+ #content .page-list A.page {
155
+ text-decoration: none;
156
+ color: black;
157
+ margin-left: 3px;
158
+ font-size: 150%;
159
+ display: block;
160
+ }
161
+ #content .page-list A.page:hover {
162
+ /*color: blue;*/
163
+ background: white url(../images/comatose/title-hover-bg.gif) top left repeat-y;
164
+ }
165
+ #content .handle, #content .do-reorder UL LI .handle {
166
+ display: none;
167
+ }
168
+
169
+ #content .page-list .hover {
170
+ background: #F1F0DB;
171
+ }
172
+ #content .page-list .hover-delete {
173
+ background: red;
174
+ color: #FF8E90;
175
+ }
176
+ #content .page-list .hover-delete A,
177
+ #content .page-list .hover-delete .commands A {
178
+ color: #FF8E90;
179
+ }
180
+ #content .page-list .hover-delete A.page {
181
+ color: white;
182
+ border-bottom: 0px;
183
+ }
184
+ #content .page-list .hover-delete UL LI A.page {
185
+ color: red;
186
+ border-bottom: 0px;
187
+ }
188
+
189
+ #content .do-reorder LI .handle {
190
+ display: inline;
191
+ background: gray;
192
+ color: white;
193
+ padding: 1px 3px;
194
+ cursor: move;
195
+ }
196
+
197
+ #content .page-list .do-reorder .commands A {
198
+ display: none;
199
+ }
200
+
201
+ /* Page Form */
202
+ #content .page-form {
203
+ margin-top: 10px;
204
+ }
205
+ #content .page-form LABEL {
206
+ font-weight: bold;
207
+ color: #555;
208
+ }
209
+ #content .page-form .meta-info LABEL {
210
+ color: #999 !important;
211
+ }
212
+ #content .page-form .label {
213
+ padding-top: 5px;
214
+ width: 75px;
215
+ text-align: right;
216
+ padding-right: 10px;
217
+ }
218
+ #content .page-form .label.body {
219
+ vertical-align: top;
220
+ padding-top: 10px;
221
+ }
222
+ #content .page-form .field {
223
+ padding-top: 5px;
224
+ }
225
+ #content .page-form .field-help {
226
+ color: gray;
227
+ }
228
+ #content .page-form #page_title {
229
+ font-size: 125%;
230
+ font-weight: bold;
231
+ }
232
+ #content .page-form #page_slug {
233
+ color: gray;
234
+ }
235
+ #content .page-form #page_body {
236
+ font-family: monospace;
237
+ font-size: 110%;
238
+ }
239
+ #content #button-group {
240
+ padding: 10px;
241
+ text-align: right;
242
+ background-color: #EAEAEA;
243
+ margin-top: 10px;
244
+ }
245
+ #content #button-group .last-update {
246
+ float: left;
247
+ color: gray;
248
+ padding-top: 4px;
249
+ font-weight: bold;
250
+ }
251
+ #content #button-group .last-update LABEL {
252
+ font-weight: normal;
253
+ }
254
+ #content #button-group .last-update A {
255
+ color: gray;
256
+ }
257
+ #content #button-group A {
258
+ color: maroon;
259
+ }
260
+ #content #button-group A:hover {
261
+ color: red;
262
+ }
263
+ #content #preview-area {
264
+ margin-top: 10px;
265
+ }
266
+ #content #preview-area FIELDSET {
267
+ border: 1px solid silver;
268
+ }
269
+ #content #preview-area LEGEND {
270
+ font-size: 125%;
271
+ }
272
+ #content #preview-area .preview-body {
273
+ padding: 10px;
274
+ }
275
+ #content #preview-area .preview-note {
276
+ background: #FFFFD9;
277
+ padding: 15px;
278
+ }
279
+ #content #preview-area .commands {
280
+ text-align: right;
281
+ color: gray;
282
+ }
283
+ #content #preview-area .commands A{
284
+ color: gray;
285
+ }
286
+ #content #preview-area .commands A:hover{
287
+ color: black;
288
+ }
289
+ #content .revisions {
290
+ padding: 10px;
291
+ width: 49%;
292
+ }
293
+ #content .current-content {
294
+ }
295
+ #content .older-content {
296
+ background: #E9E9E9;
297
+ float: right;
298
+ }
299
+
300
+ #content .revisions label {
301
+ display: block;
302
+ color: #000;
303
+ }
304
+ #content .revisions label span {
305
+ color: #999;
306
+ font-weight: normal !important;
307
+ }
308
+ #content .revisions .title {
309
+ font-weight: bold;
310
+ margin-top: 5px;
311
+ }
312
+ #content .revisions .header {
313
+ font-size: 110%;
314
+ vertical-align: middle;
315
+ font-weight: bold;
316
+ }
317
+ #content .revisions .header-actions {
318
+ float: right;
319
+ font-size: 90%;
320
+ font-weight: normal;
321
+ color: #999;
322
+ }
323
+ #content .revisions .meta {
324
+ margin-bottom: 15px;
325
+ }
326
+ #content .revisions .footer {
327
+ margin-top: 25px !important;
328
+ text-align: center !important;
329
+ }
330
+ #content #go-btn {
331
+ display: none;
332
+ }
333
+ /* Errors */
334
+ #errorExplanation {
335
+ border: 1px solid red;
336
+ background: #FFEAEB;
337
+ padding: 10px;
338
+ margin-top: 10px;
339
+ }
340
+ #errorExplanation h2 {
341
+ margin: 0px;
342
+ padding: 0px;
343
+ color: maroon;
344
+ }
345
+ #errorExplanation p {
346
+ margin: 0px;
347
+ padding: 0px;
348
+ padding-top: 5px;
349
+ padding-left: 15px;
350
+ }
351
+ #errorExplanation ul {
352
+ margin: 0px;
353
+ padding: 0px;
354
+ padding-left: 35px;
355
+ }
356
+ #errorExplanation li {
357
+ margin: 0px;
358
+ padding: 0px;
359
+ padding-top: 5px;
360
+ }
361
+ /* Footer Area*/
362
+ #footer {
363
+ border-top: 4px solid #AAA;
364
+ text-align: center;
365
+ font-size: 90%;
366
+ color: #AAA;
367
+ padding-top: 5px;
368
+ padding-bottom: 5px;
369
+ }
370
+ #footer A {
371
+ color: #AAA;
372
+ text-decoration: none;
373
+ font-weight: bold;
374
+ }
375
+ #footer A:hover {
376
+ color: #333;
377
+ text-decoration: underline;
378
+ }
379
+
380
+ /* Modifiers */
381
+
382
+ /* When JavaScript is Turned Off... We need to adjust some things... */
383
+ .noscript #more-options,
384
+ .noscript #preview-area,
385
+ .noscript #preview-btn,
386
+ .noscript .tree-controller {
387
+ display: none;
388
+ }
389
+ .noscript .page-list.collapsed {
390
+ display: block !important;
391
+ }
392
+ .noscript .delete-page:hover {
393
+ color: red !important;
394
+ }
395
+ .noscript #content .page-form #page_title,
396
+ .noscript #content .page-form #page_slug,
397
+ .noscript #content .page-form #page_parent,
398
+ .noscript #content .page-form #page_keywords,
399
+ .noscript #content .page-form #page_body {
400
+ width: 100% !important;
401
+ }
402
+ .noscript #content .revisions #go-btn {
403
+ display: inline;
404
+ }
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'comatose/version'
3
+ rescue LoadError
4
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
5
+ end
6
+
7
+ require 'comatose/tasks/admin'
8
+ require 'comatose/tasks/setup'
9
+ require 'comatose/tasks/data'
@@ -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