spontaneous 0.1.0.alpha1 → 0.2.0.alpha1

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 (413) hide show
  1. data/Gemfile +40 -35
  2. data/LICENSE +20 -0
  3. data/Rakefile +39 -42
  4. data/Readme.markdown +155 -0
  5. data/application/css/definitions.scss +3 -0
  6. data/application/css/editing.scss +9 -4
  7. data/application/css/min/565d4c25e82148acb01c45c8d675b37a08676d77.css +1 -0
  8. data/application/css/min/84dbe894ea96eafd321c30823d630817bfc4b03b.css +1 -0
  9. data/application/css/min/d1b54ff4847c613618267ca1c15658e2aee0a4e5.css +1 -0
  10. data/application/css/v2.scss +144 -50
  11. data/application/js/add_alias_dialogue.js +18 -8
  12. data/application/js/ajax.js +1 -1
  13. data/application/js/authentication.js +8 -1
  14. data/application/js/box.js +37 -7
  15. data/application/js/box_container.js +1 -1
  16. data/application/js/compatibility.js +7 -0
  17. data/application/js/content.js +7 -0
  18. data/application/js/content_area.js +4 -0
  19. data/application/js/edit_panel.js +44 -18
  20. data/application/js/editing.js +12 -0
  21. data/application/js/event_source.js +17 -0
  22. data/application/js/extensions.js +2 -0
  23. data/application/js/field_types/file_field.js +2 -1
  24. data/application/js/field_types/image_field.js +35 -48
  25. data/application/js/field_types/long_string_field.js +12 -0
  26. data/application/js/field_types/markdown_field.js +2 -5
  27. data/application/js/field_types/string_field.js +5 -1
  28. data/application/js/field_types/webvideo_field.js +15 -0
  29. data/application/js/init.js +1 -0
  30. data/application/js/location.js +30 -19
  31. data/application/js/login.js +1 -2
  32. data/application/js/min/2a0c2962537a3181fedfff5c92596ba6d3122dc9.js +3 -0
  33. data/application/js/min/4cf1c493d3379ecba5287758c61238034c0893f9.js +2 -0
  34. data/application/js/min/78ac6b99d96750bb6b9f9aad4cb9cd91cd03f391.js +3 -0
  35. data/application/js/min/c8efb9b9f7c3f6613fcebc6be60f605b6570a382.js +90 -0
  36. data/application/js/page.js +1 -0
  37. data/application/js/page_entry.js +6 -40
  38. data/application/js/preview.js +2 -3
  39. data/application/js/top_bar.js +76 -31
  40. data/application/js/upload.js +5 -2
  41. data/application/js/upload_manager.js +2 -81
  42. data/application/js/vendor/jquery-1.7.1.min.js +4 -0
  43. data/application/js/vendor/jquery-ui-1.8.16.custom.min.js +791 -0
  44. data/application/js/views.js +3 -3
  45. data/application/js/views/box_view.js +164 -83
  46. data/application/js/views/page_piece_view.js +2 -2
  47. data/application/js/views/page_view.js +46 -15
  48. data/application/js/views/piece_view.js +29 -8
  49. data/application/static/diagonal-texture.png +0 -0
  50. data/application/static/item-buttons-highlight.png +0 -0
  51. data/application/static/plus-box.png +0 -0
  52. data/application/static/plus_alt.svg +8 -0
  53. data/application/static/slot-up-arrow.png +0 -0
  54. data/application/views/{index.erubis → index.erb} +9 -5
  55. data/application/views/{login.erubis → login.erb} +14 -10
  56. data/application/views/schema_modification_error.html.erb +18 -6
  57. data/application/views/{unsupported.erubis → unsupported.erb} +0 -0
  58. data/bin/spot +15 -2
  59. data/db/migrations/20100610142136_init.rb +2 -2
  60. data/db/migrations/20101130104334_timestamps.rb +2 -2
  61. data/db/migrations/20110209152710_users_and_groups.rb +11 -11
  62. data/db/migrations/20120106171423_visibility_path.rb +19 -0
  63. data/db/migrations/20120107124541_owner_id.rb +19 -0
  64. data/docs/recipe-interface-screenshot.png +0 -0
  65. data/lib/cutaneous.rb +11 -10
  66. data/lib/cutaneous/context_helper.rb +119 -14
  67. data/lib/cutaneous/preview_context.rb +4 -3
  68. data/lib/cutaneous/preview_renderer.rb +1 -6
  69. data/lib/cutaneous/publish_context.rb +1 -0
  70. data/lib/cutaneous/{first_pass_renderer.rb → publish_renderer.rb} +2 -6
  71. data/lib/cutaneous/publish_template.rb +62 -0
  72. data/lib/cutaneous/publish_token_parser.rb +8 -0
  73. data/lib/cutaneous/renderer.rb +4 -2
  74. data/lib/cutaneous/request_context.rb +1 -0
  75. data/lib/cutaneous/{second_pass_renderer.rb → request_renderer.rb} +2 -5
  76. data/lib/cutaneous/request_template.rb +11 -0
  77. data/lib/cutaneous/request_token_parser.rb +9 -0
  78. data/lib/cutaneous/token_parser.rb +125 -0
  79. data/lib/sequel/plugins/content_table_inheritance.rb +19 -12
  80. data/lib/sequel/plugins/scoped_table_name.rb +45 -0
  81. data/lib/spontaneous.rb +123 -126
  82. data/lib/spontaneous/box.rb +127 -47
  83. data/lib/spontaneous/box_style.rb +39 -22
  84. data/lib/spontaneous/change.rb +2 -2
  85. data/lib/spontaneous/cli.rb +1 -0
  86. data/lib/spontaneous/cli/base.rb +12 -4
  87. data/lib/spontaneous/cli/console.rb +72 -0
  88. data/lib/spontaneous/cli/server.rb +36 -12
  89. data/lib/spontaneous/cli/site.rb +175 -1
  90. data/lib/spontaneous/collections/box_set.rb +19 -1
  91. data/lib/spontaneous/collections/entry_set.rb +70 -22
  92. data/lib/spontaneous/collections/field_set.rb +3 -3
  93. data/lib/spontaneous/collections/prototype_set.rb +28 -0
  94. data/lib/spontaneous/config.rb +14 -5
  95. data/lib/spontaneous/content.rb +23 -24
  96. data/lib/spontaneous/errors.rb +20 -4
  97. data/lib/spontaneous/extensions/array.rb +2 -2
  98. data/lib/spontaneous/extensions/json.rb +1 -1
  99. data/lib/spontaneous/extensions/nil.rb +13 -0
  100. data/lib/spontaneous/facet.rb +61 -7
  101. data/lib/spontaneous/field_types.rb +1 -3
  102. data/lib/spontaneous/field_types/date_field.rb +1 -0
  103. data/lib/spontaneous/field_types/field.rb +32 -15
  104. data/lib/spontaneous/field_types/image_field.rb +138 -69
  105. data/lib/spontaneous/field_types/location_field.rb +59 -0
  106. data/lib/spontaneous/field_types/long_string_field.rb +13 -0
  107. data/lib/spontaneous/field_types/markdown_field.rb +2 -1
  108. data/lib/spontaneous/field_types/string_field.rb +2 -2
  109. data/lib/spontaneous/field_types/webvideo_field.rb +255 -0
  110. data/lib/spontaneous/generators/page/inline.html.cut +1 -1
  111. data/lib/spontaneous/generators/page/page.html.cut.tt +5 -4
  112. data/lib/spontaneous/generators/page/page.rb.tt +1 -5
  113. data/lib/spontaneous/generators/site.rb +1 -0
  114. data/lib/spontaneous/generators/site/.gitignore +2 -0
  115. data/lib/spontaneous/generators/site/Gemfile.tt +3 -5
  116. data/lib/spontaneous/generators/site/config/environment.rb.tt +1 -0
  117. data/lib/spontaneous/generators/site/config/environments/development.rb.tt +3 -1
  118. data/lib/spontaneous/generators/site/config/environments/production.rb.tt +3 -1
  119. data/lib/spontaneous/generators/site/config/indexes.rb.tt +23 -0
  120. data/lib/spontaneous/generators/site/public/css/{site.css → site.scss} +0 -0
  121. data/lib/spontaneous/generators/site/schema/box.rb.tt +5 -0
  122. data/lib/spontaneous/generators/site/templates/layouts/standard.html.cut.tt +11 -5
  123. data/lib/spontaneous/image_size.rb +0 -1
  124. data/lib/spontaneous/loader.rb +335 -218
  125. data/lib/spontaneous/logger.rb +7 -2
  126. data/lib/spontaneous/media.rb +64 -59
  127. data/lib/spontaneous/media/file.rb +74 -0
  128. data/lib/spontaneous/page.rb +47 -18
  129. data/lib/spontaneous/page_piece.rb +29 -27
  130. data/lib/spontaneous/paths.rb +0 -1
  131. data/lib/spontaneous/permissions.rb +3 -21
  132. data/lib/spontaneous/permissions/user.rb +5 -1
  133. data/lib/spontaneous/permissions/user_level.rb +6 -7
  134. data/lib/spontaneous/piece.rb +12 -7
  135. data/lib/spontaneous/plugins/aliases.rb +76 -31
  136. data/lib/spontaneous/plugins/allowed_types.rb +36 -37
  137. data/lib/spontaneous/plugins/application/facets.rb +7 -10
  138. data/lib/spontaneous/plugins/application/features.rb +17 -0
  139. data/lib/spontaneous/plugins/application/paths.rb +25 -31
  140. data/lib/spontaneous/plugins/application/render.rb +1 -5
  141. data/lib/spontaneous/plugins/application/serialisation.rb +2 -0
  142. data/lib/spontaneous/plugins/application/state.rb +6 -9
  143. data/lib/spontaneous/plugins/boxes.rb +65 -40
  144. data/lib/spontaneous/plugins/controllers.rb +22 -22
  145. data/lib/spontaneous/plugins/entries.rb +149 -150
  146. data/lib/spontaneous/plugins/entry.rb +50 -35
  147. data/lib/spontaneous/plugins/field/editor_class.rb +13 -0
  148. data/lib/spontaneous/plugins/fields.rb +41 -33
  149. data/lib/spontaneous/plugins/instance_code.rb +9 -9
  150. data/lib/spontaneous/plugins/layouts.rb +31 -35
  151. data/lib/spontaneous/plugins/media.rb +31 -32
  152. data/lib/spontaneous/plugins/page/formats.rb +56 -31
  153. data/lib/spontaneous/plugins/page/request.rb +15 -9
  154. data/lib/spontaneous/plugins/page_search.rb +30 -31
  155. data/lib/spontaneous/plugins/page_tree.rb +59 -12
  156. data/lib/spontaneous/plugins/paths.rb +84 -79
  157. data/lib/spontaneous/plugins/permissions.rb +26 -28
  158. data/lib/spontaneous/plugins/prototypes.rb +42 -37
  159. data/lib/spontaneous/plugins/publishing.rb +50 -94
  160. data/lib/spontaneous/plugins/render.rb +8 -16
  161. data/lib/spontaneous/plugins/schema_hierarchy.rb +20 -21
  162. data/lib/spontaneous/plugins/schema_id.rb +33 -25
  163. data/lib/spontaneous/plugins/schema_title.rb +3 -4
  164. data/lib/spontaneous/plugins/serialisation.rb +32 -35
  165. data/lib/spontaneous/plugins/site/features.rb +32 -0
  166. data/lib/spontaneous/plugins/site/instance.rb +3 -2
  167. data/lib/spontaneous/plugins/site/level.rb +18 -0
  168. data/lib/spontaneous/plugins/site/map.rb +2 -1
  169. data/lib/spontaneous/plugins/site/publishing.rb +56 -59
  170. data/lib/spontaneous/plugins/site/revisions.rb +24 -19
  171. data/lib/spontaneous/plugins/site/schema.rb +33 -0
  172. data/lib/spontaneous/plugins/site/search.rb +43 -0
  173. data/lib/spontaneous/plugins/site/selectors.rb +35 -30
  174. data/lib/spontaneous/plugins/site/storage.rb +63 -0
  175. data/lib/spontaneous/plugins/site_map.rb +23 -25
  176. data/lib/spontaneous/plugins/styles.rb +35 -43
  177. data/lib/spontaneous/plugins/supertype.rb +3 -1
  178. data/lib/spontaneous/plugins/visibility.rb +90 -83
  179. data/lib/spontaneous/prototypes/box_prototype.rb +55 -25
  180. data/lib/spontaneous/prototypes/field_prototype.rb +66 -19
  181. data/lib/spontaneous/prototypes/style_prototype.rb +2 -2
  182. data/lib/spontaneous/publishing.rb +1 -1
  183. data/lib/spontaneous/publishing/immediate.rb +128 -49
  184. data/lib/spontaneous/publishing/simultaneous.rb +70 -0
  185. data/lib/spontaneous/rack.rb +38 -26
  186. data/lib/spontaneous/rack/around_back.rb +3 -23
  187. data/lib/spontaneous/rack/around_preview.rb +3 -8
  188. data/lib/spontaneous/rack/assets.rb +7 -6
  189. data/lib/spontaneous/rack/authentication.rb +21 -0
  190. data/lib/spontaneous/rack/back.rb +310 -331
  191. data/lib/spontaneous/rack/cacheable_file.rb +27 -0
  192. data/lib/spontaneous/rack/cookie_authentication.rb +38 -0
  193. data/lib/spontaneous/rack/css.rb +43 -0
  194. data/lib/spontaneous/rack/event_source.rb +31 -0
  195. data/lib/spontaneous/rack/front.rb +30 -8
  196. data/lib/spontaneous/rack/helpers.rb +31 -0
  197. data/lib/spontaneous/rack/media.rb +22 -21
  198. data/lib/spontaneous/rack/public.rb +2 -1
  199. data/lib/spontaneous/rack/query_authentication.rb +35 -0
  200. data/lib/spontaneous/rack/reloader.rb +6 -3
  201. data/lib/spontaneous/rack/user_helpers.rb +28 -0
  202. data/lib/spontaneous/render.rb +64 -23
  203. data/lib/spontaneous/render/context_base.rb +143 -0
  204. data/lib/spontaneous/render/format.rb +24 -19
  205. data/lib/spontaneous/render/helpers.rb +14 -0
  206. data/lib/spontaneous/render/helpers/html_helper.rb +69 -0
  207. data/lib/spontaneous/render/helpers/script_helper.rb +17 -0
  208. data/lib/spontaneous/render/helpers/stylesheet_helper.rb +16 -0
  209. data/lib/spontaneous/render/preview_context.rb +8 -0
  210. data/lib/spontaneous/render/preview_renderer.rb +6 -0
  211. data/lib/spontaneous/render/publish_context.rb +22 -0
  212. data/lib/spontaneous/render/published_renderer.rb +12 -13
  213. data/lib/spontaneous/render/publishing_renderer.rb +3 -0
  214. data/lib/spontaneous/render/render_cache.rb +26 -0
  215. data/lib/spontaneous/render/renderer.rb +5 -1
  216. data/lib/spontaneous/render/request_context.rb +8 -0
  217. data/lib/spontaneous/schema.rb +56 -24
  218. data/lib/spontaneous/schema/schema_modification.rb +2 -2
  219. data/lib/spontaneous/schema/uid.rb +22 -106
  220. data/lib/spontaneous/schema/uid_map.rb +120 -0
  221. data/lib/spontaneous/search.rb +11 -0
  222. data/lib/spontaneous/search/compound_indexer.rb +26 -0
  223. data/lib/spontaneous/search/database.rb +72 -0
  224. data/lib/spontaneous/search/field.rb +95 -0
  225. data/lib/spontaneous/search/index.rb +184 -0
  226. data/lib/spontaneous/search/results.rb +34 -0
  227. data/lib/spontaneous/server.rb +5 -1
  228. data/lib/spontaneous/site.rb +56 -16
  229. data/lib/spontaneous/storage.rb +22 -0
  230. data/lib/spontaneous/storage/backend.rb +10 -0
  231. data/lib/spontaneous/storage/cloud.rb +104 -0
  232. data/lib/spontaneous/storage/local.rb +52 -0
  233. data/lib/spontaneous/style.rb +27 -9
  234. data/lib/spontaneous/version.rb +1 -1
  235. data/spontaneous.gemspec +719 -0
  236. data/test/disabled/test_slots.rb +1 -1
  237. data/test/experimental/test_cutaneous.rb +309 -0
  238. data/test/experimental/test_features.rb +129 -0
  239. data/test/fixtures/application/views/{index.erubis → index.erb} +0 -0
  240. data/test/fixtures/back/public/css/sass_include.scss +5 -0
  241. data/test/fixtures/back/public/css/sass_template.scss +4 -0
  242. data/test/fixtures/example_application/templates/client_project.html.cut +4 -4
  243. data/test/fixtures/example_application/templates/client_project/images.html.cut +1 -1
  244. data/test/fixtures/example_application/templates/client_projects.html.cut +2 -2
  245. data/test/fixtures/example_application/templates/inline_image.html.cut +1 -1
  246. data/test/fixtures/example_application/templates/layouts/home.html.cut +7 -7
  247. data/test/fixtures/example_application/templates/layouts/info.html.cut +1 -1
  248. data/test/fixtures/example_application/templates/layouts/project.html.cut +4 -4
  249. data/test/fixtures/example_application/templates/layouts/projects.html.cut +2 -2
  250. data/test/fixtures/example_application/templates/project.html.cut +2 -2
  251. data/test/fixtures/example_application/templates/project/inline.html.cut +3 -3
  252. data/test/fixtures/example_application/templates/project_image.html.cut +1 -1
  253. data/test/fixtures/example_application/templates/text.html.cut +1 -1
  254. data/test/fixtures/fields/youtube_api_response.xml +102 -0
  255. data/test/fixtures/layouts/layouts/custom4.html.cut +0 -0
  256. data/test/fixtures/plugins/schema_plugin/public/css/plugin.css +1 -0
  257. data/test/fixtures/plugins/schema_plugin/public/js/plugin.js +1 -0
  258. data/test/fixtures/plugins/schema_plugin/public/static.html +1 -0
  259. data/test/fixtures/plugins/schema_plugin/public/subdir/image.gif +1 -0
  260. data/test/fixtures/plugins/schema_plugin/public/subdir/include1.scss +3 -0
  261. data/test/fixtures/plugins/schema_plugin/public/subdir/sass.scss +4 -0
  262. data/test/fixtures/plugins/schema_plugin/public/subdir/sass/include2.scss +4 -0
  263. data/test/fixtures/public/templates/layouts/default.html.cut +1 -1
  264. data/test/fixtures/public/templates/layouts/default.pdf.cut +1 -1
  265. data/test/fixtures/public/templates/layouts/default.rss.cut +1 -1
  266. data/test/fixtures/public/templates/layouts/dynamic.html.cut +1 -1
  267. data/test/fixtures/schema_modification/config/database.yml +0 -0
  268. data/test/fixtures/schema_modification/config/environment.rb +2 -0
  269. data/test/fixtures/schema_modification/schema/box.rb +1 -0
  270. data/test/fixtures/schema_modification/schema/custom_box.rb +1 -0
  271. data/test/fixtures/schema_modification/schema/page.rb +6 -0
  272. data/test/fixtures/schema_modification/schema/piece.rb +1 -0
  273. data/test/fixtures/search/config/database.yml +1 -0
  274. data/test/fixtures/search/config/indexes.rb +4 -0
  275. data/test/fixtures/serialisation/root_hash.yaml.erb +16 -20
  276. data/test/fixtures/storage/cloud/environment.rb +12 -0
  277. data/test/fixtures/storage/default/environment.rb +1 -0
  278. data/test/fixtures/templates/aliases/layouts/c_alias.html.cut +1 -1
  279. data/test/fixtures/templates/content/include.html.cut +1 -1
  280. data/test/fixtures/templates/content/include_dir.html.cut +1 -1
  281. data/test/fixtures/templates/content/included.epub.cut +1 -1
  282. data/test/fixtures/templates/content/included.html.cut +1 -1
  283. data/test/fixtures/templates/content/partial/included.html.cut +1 -1
  284. data/test/fixtures/templates/content/preprocess.html.cut +1 -1
  285. data/test/fixtures/templates/content/second.html.cut +1 -1
  286. data/test/fixtures/templates/content/template.epub.cut +1 -1
  287. data/test/fixtures/templates/content/template.html.cut +1 -1
  288. data/test/fixtures/templates/default_style_class.html.cut +1 -1
  289. data/test/fixtures/templates/engine/braces.html.cut +6 -0
  290. data/test/fixtures/templates/engine/multiline.html.cut +5 -0
  291. data/test/fixtures/templates/extended/grandparent.html.cut +7 -7
  292. data/test/fixtures/templates/extended/main.html.cut +5 -5
  293. data/test/fixtures/templates/extended/parent.html.cut +10 -8
  294. data/test/fixtures/templates/extended/partial.html.cut +1 -0
  295. data/test/fixtures/templates/extended/partial_with_locals.html.cut +1 -0
  296. data/test/fixtures/templates/extended/with_includes.html.cut +9 -0
  297. data/test/fixtures/templates/extended/with_includes_and_locals.html.cut +9 -0
  298. data/test/fixtures/templates/layouts/entries.html.cut +7 -7
  299. data/test/fixtures/templates/layouts/page_style.html.cut +1 -1
  300. data/test/fixtures/templates/layouts/params.html.cut +1 -1
  301. data/test/fixtures/templates/layouts/preview_render.html.cut +2 -2
  302. data/test/fixtures/templates/layouts/standard_page.html.cut +1 -1
  303. data/test/fixtures/templates/layouts/subdir_style.html.cut +1 -1
  304. data/test/fixtures/templates/layouts/template_params.html.cut +1 -1
  305. data/test/fixtures/templates/layouts/variables.html.cut +7 -0
  306. data/test/fixtures/templates/page_class/inline_style.html.cut +1 -1
  307. data/test/fixtures/templates/preview_render/variables.html.cut +1 -0
  308. data/test/fixtures/templates/publishing/templates/layouts/dynamic.html.cut +1 -0
  309. data/test/fixtures/templates/publishing/templates/layouts/dynamic.rtf.cut +1 -0
  310. data/test/fixtures/templates/publishing/templates/layouts/static.html.cut +1 -0
  311. data/test/fixtures/templates/template_class/anonymous_style.html.cut +2 -2
  312. data/test/fixtures/templates/template_class/complex_template.html.cut +4 -4
  313. data/test/fixtures/templates/template_class/complex_template.pdf.cut +4 -4
  314. data/test/fixtures/templates/template_class/default_template_style.html.cut +2 -2
  315. data/test/fixtures/templates/template_class/images_with_template.html.cut +3 -3
  316. data/test/fixtures/templates/template_class/slots_template.html.cut +3 -3
  317. data/test/fixtures/templates/template_class/slots_template.pdf.cut +3 -3
  318. data/test/fixtures/templates/template_class/this_template.epub.cut +1 -1
  319. data/test/fixtures/templates/template_class/this_template.html.cut +1 -1
  320. data/test/fixtures/templates/template_class/this_template.pdf.cut +1 -1
  321. data/test/fixtures/templates/with_default_style_class.html.cut +1 -1
  322. data/test/functional/test_application.rb +19 -15
  323. data/test/functional/test_back.rb +130 -98
  324. data/test/functional/test_front.rb +72 -28
  325. data/test/javascript/test_dom.rb +1 -1
  326. data/test/javascript/test_markdown.rb +1 -1
  327. data/test/slow/test_publishing.rb +94 -75
  328. data/test/slow/test_visibility.rb +47 -14
  329. data/test/test_helper.rb +30 -3
  330. data/test/ui/test_page_editing.rb +1 -1
  331. data/test/unit/test_alias.rb +200 -16
  332. data/test/unit/test_authentication.rb +26 -28
  333. data/test/unit/test_boxes.rb +146 -75
  334. data/test/unit/test_config.rb +42 -20
  335. data/test/unit/test_content.rb +156 -37
  336. data/test/unit/test_content_inheritance.rb +4 -2
  337. data/test/unit/test_extensions.rb +7 -1
  338. data/test/unit/test_fields.rb +558 -290
  339. data/test/{experimental → unit}/test_formats.rb +42 -3
  340. data/test/unit/test_generators.rb +3 -2
  341. data/test/unit/test_helpers.rb +54 -0
  342. data/test/unit/test_image_size.rb +1 -1
  343. data/test/unit/test_images.rb +51 -40
  344. data/test/unit/test_layouts.rb +21 -4
  345. data/test/unit/test_logger.rb +1 -1
  346. data/test/unit/test_media.rb +165 -7
  347. data/test/unit/test_page.rb +158 -27
  348. data/test/unit/test_permissions.rb +170 -187
  349. data/test/unit/test_piece.rb +27 -9
  350. data/test/unit/test_plugins.rb +153 -0
  351. data/test/unit/test_prototype_set.rb +60 -2
  352. data/test/unit/test_prototypes.rb +81 -20
  353. data/test/unit/test_render.rb +97 -9
  354. data/test/unit/test_schema.rb +167 -120
  355. data/test/unit/test_search.rb +588 -0
  356. data/test/unit/test_serialisation.rb +26 -10
  357. data/test/unit/test_site.rb +42 -25
  358. data/test/unit/test_storage.rb +88 -0
  359. data/test/unit/test_structure.rb +11 -5
  360. data/test/unit/test_styles.rb +64 -3
  361. data/test/unit/test_table_scoping.rb +76 -0
  362. data/test/unit/test_templates.rb +69 -31
  363. data/test/unit/test_type_hierarchy.rb +9 -1
  364. metadata +274 -208
  365. data/Gemfile.lock +0 -146
  366. data/application/css/min/54ee0ed3c7fac7632bd5c020d69e9a2503e0c88c.css +0 -1
  367. data/application/css/min/c256adc144e2bdd0b0539356b04eb62db01e1dc3.css +0 -1
  368. data/application/js/edit_dialogue.js +0 -137
  369. data/application/js/min/492a209de8ee955fa9c729a765377495001e11b1.js +0 -17
  370. data/application/js/min/80f684d77c940887a1d4a63e3a96102e993baa98.js +0 -88
  371. data/application/js/min/c7140ec9475e5bf868b901e0621338d7d162358b.js +0 -3
  372. data/application/js/min/f07f2bd6630ee31e1c2288ec223383d8f0658ba6.js +0 -2
  373. data/application/js/vendor/.DS_Store +0 -0
  374. data/application/js/vendor/JS.Class-2.1.5/src/command.js +0 -93
  375. data/application/js/vendor/JS.Class-2.1.5/src/comparable.js +0 -37
  376. data/application/js/vendor/JS.Class-2.1.5/src/constant_scope.js +0 -48
  377. data/application/js/vendor/JS.Class-2.1.5/src/core.js +0 -1060
  378. data/application/js/vendor/JS.Class-2.1.5/src/decorator.js +0 -50
  379. data/application/js/vendor/JS.Class-2.1.5/src/enumerable.js +0 -505
  380. data/application/js/vendor/JS.Class-2.1.5/src/forwardable.js +0 -22
  381. data/application/js/vendor/JS.Class-2.1.5/src/hash.js +0 -334
  382. data/application/js/vendor/JS.Class-2.1.5/src/linked_list.js +0 -114
  383. data/application/js/vendor/JS.Class-2.1.5/src/loader.js +0 -553
  384. data/application/js/vendor/JS.Class-2.1.5/src/method_chain.js +0 -172
  385. data/application/js/vendor/JS.Class-2.1.5/src/observable.js +0 -55
  386. data/application/js/vendor/JS.Class-2.1.5/src/package.js +0 -472
  387. data/application/js/vendor/JS.Class-2.1.5/src/proxy.js +0 -58
  388. data/application/js/vendor/JS.Class-2.1.5/src/ruby.js +0 -44
  389. data/application/js/vendor/JS.Class-2.1.5/src/set.js +0 -332
  390. data/application/js/vendor/JS.Class-2.1.5/src/stack_trace.js +0 -151
  391. data/application/js/vendor/JS.Class-2.1.5/src/state.js +0 -95
  392. data/application/js/vendor/JS.Class-2.1.5/src/stdlib.js +0 -2612
  393. data/application/js/vendor/jquery-1.4.2.min.js +0 -154
  394. data/application/js/vendor/jquery-1.4.3.min.js +0 -166
  395. data/application/js/vendor/jquery-1.5.1.min.js +0 -16
  396. data/application/js/vendor/jquery-1.5.1rc1.min.js +0 -24
  397. data/application/js/vendor/jquery-ui-1.8.6.custom.min.js +0 -265
  398. data/application/js/vendor/jquery-ui-1.8.custom.min.js +0 -106
  399. data/application/js/vendor/jquery.hotkeys-0.7.9.js +0 -248
  400. data/application/js/vendor/jquery.hotkeys-0.7.9.min.js +0 -19
  401. data/application/js/vendor/jsdiff.js +0 -169
  402. data/lib/cutaneous/first_pass_parser.rb +0 -23
  403. data/lib/cutaneous/parser_core.rb +0 -18
  404. data/lib/cutaneous/second_pass_parser.rb +0 -23
  405. data/lib/sequel/plugins/yajl_serialization.rb +0 -154
  406. data/lib/spontaneous/plugins.rb +0 -20
  407. data/lib/spontaneous/proxy_object.rb +0 -12
  408. data/lib/spontaneous/publishing/fire_and_forget.rb +0 -57
  409. data/lib/spontaneous/render/context.rb +0 -100
  410. data/spontaneous.gemspec.tmpl +0 -66
  411. data/test/experimental/test_plugins.rb +0 -64
  412. data/test/fixtures/templates/publishing/layouts/dynamic.html.cut +0 -1
  413. data/test/fixtures/templates/publishing/layouts/static.html.cut +0 -1
@@ -1,20 +1,19 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require File.expand_path('../../test_helper', __FILE__)
4
4
 
5
5
 
6
6
  class SchemaTest < MiniTest::Spec
7
7
  include Spontaneous
8
8
 
9
- UID = Spontaneous::Schema::UID
10
9
 
11
- # declare these early so that Piece & Page get loaded
12
- # and are then cleared early by the Schema.reset! call
13
- class X < Spontaneous::Piece; end
14
- class Y < Spontaneous::Page; end
15
10
  def setup
16
- Spontaneous::Schema.schema_loader_class = Spontaneous::Schema::PersistentMap
17
- Spontaneous::Schema.reset!
11
+ @site = setup_site
12
+ @site.schema_loader_class = Spontaneous::Schema::PersistentMap
13
+ end
14
+
15
+ def teardown
16
+ teardown_site
18
17
  end
19
18
 
20
19
  context "Configurable names" do
@@ -62,7 +61,7 @@ class SchemaTest < MiniTest::Spec
62
61
  context "Persistent maps" do
63
62
  context "Schema UIDs" do
64
63
  setup do
65
- Spontaneous.schema_map = File.expand_path('../../fixtures/schema/schema.yml', __FILE__)
64
+ @site.schema.schema_map_file = File.expand_path('../../fixtures/schema/schema.yml', __FILE__)
66
65
  class SchemaClass < Page
67
66
  field :description
68
67
  style :simple
@@ -70,6 +69,7 @@ class SchemaTest < MiniTest::Spec
70
69
  box :posts
71
70
  end
72
71
  @instance = SchemaClass.new
72
+ @uids = @site.uid
73
73
  end
74
74
 
75
75
  teardown do
@@ -81,84 +81,92 @@ class SchemaTest < MiniTest::Spec
81
81
  # end
82
82
 
83
83
  should "be unique" do
84
- ids = (0..10000).map { Schema::UID.generate }
84
+ ids = (0..10000).map { Schema::UIDMap.generate }
85
85
  ids.uniq.length.should == ids.length
86
86
  end
87
87
 
88
+
88
89
  should "be singletons" do
89
- a = UID["xxxxxxxxxxxx"]
90
- b = UID["xxxxxxxxxxxx"]
91
- c = UID["ffffffffffff"]
90
+ a = @uids["xxxxxxxxxxxx"]
91
+ b = @uids["xxxxxxxxxxxx"]
92
+ c = @uids["ffffffffffff"]
92
93
  a.object_id.should == b.object_id
93
94
  a.should == b
94
95
  c.object_id.should_not == b.object_id
95
96
  c.should_not == b
96
97
  end
97
98
 
98
- should "not be creatable" do
99
- lambda { UID.new('sadf') }.must_raise(NoMethodError)
100
- end
99
+ # should "not be creatable" do
100
+ # lambda { UID.new('sadf') }.must_raise(NoMethodError)
101
+ # end
101
102
 
102
103
  should "return nil if passed nil" do
103
- UID[nil].should be_nil
104
+ @uids[nil].should be_nil
104
105
  end
105
106
 
106
107
  should "return nil if passed an empty string" do
107
- UID[""].should be_nil
108
+ @uids[""].should be_nil
108
109
  end
109
110
 
110
111
  should "return the same UID if passed one" do
111
- a = UID["xxxxxxxxxxxx"]
112
- UID[a].should == a
112
+ a = @uids["xxxxxxxxxxxx"]
113
+ @uids[a].should == a
113
114
  end
114
115
 
115
116
  should "test as equal to its string representation" do
116
- UID["llllllllllll"].should == "llllllllllll"
117
+ @uids["llllllllllll"].should == "llllllllllll"
118
+ end
119
+
120
+ should "test as eql? if they have the same id" do
121
+ a = @uids["llllllllllll"]
122
+ b = a.dup
123
+ assert a.eql?(b), "Identical IDs should pass eql? test"
117
124
  end
118
125
 
119
126
  should "be readable by content classes" do
120
- SchemaClass.schema_id.should == UID["xxxxxxxxxxxx"]
127
+ SchemaClass.schema_id.should == @uids["xxxxxxxxxxxx"]
121
128
  end
122
129
 
123
130
  should "be readable by fields" do
124
- @instance.fields[:description].schema_id.should == UID["ffffffffffff"]
131
+ @instance.fields[:description].schema_id.should == @uids["ffffffffffff"]
125
132
  end
126
133
 
127
134
  should "be readable by boxes" do
128
- @instance.boxes[:posts].schema_id.should == UID["bbbbbbbbbbbb"]
135
+ @instance.boxes[:posts].schema_id.should == @uids["bbbbbbbbbbbb"]
129
136
  end
130
137
 
131
138
  should "be readable by styles" do
132
- @instance.styles[:simple].schema_id.should == UID["ssssssssssss"]
139
+ @instance.styles[:simple].schema_id.should == @uids["ssssssssssss"]
133
140
  end
134
141
 
135
142
  should "be readable by layouts" do
136
143
  @instance.layout.name.should == :clean
137
- @instance.layout.schema_id.should == UID["llllllllllll"]
144
+ @instance.layout.schema_id.should == @uids["llllllllllll"]
138
145
  end
139
146
 
140
147
  context "lookups" do
141
148
  should "return classes" do
142
- Schema["xxxxxxxxxxxx"].should == SchemaClass
149
+ Site.schema["xxxxxxxxxxxx"].should == SchemaClass
143
150
  end
144
151
  should "return fields" do
145
- Schema["ffffffffffff"].should == SchemaClass.field_prototypes[:description]
152
+ Site.schema["ffffffffffff"].should == SchemaClass.field_prototypes[:description]
146
153
  end
147
154
  should "return boxes" do
148
- Schema["bbbbbbbbbbbb"].should == SchemaClass.box_prototypes[:posts]
155
+ Site.schema["bbbbbbbbbbbb"].should == SchemaClass.box_prototypes[:posts]
149
156
  end
150
157
  should "return styles" do
151
- Schema["ssssssssssss"].should == SchemaClass.style_prototypes[:simple]
158
+ Site.schema["ssssssssssss"].should == SchemaClass.style_prototypes[:simple]
152
159
  end
153
160
  should "return layouts" do
154
- Schema["llllllllllll"].should == SchemaClass.layout_prototypes[:clean]
161
+ Site.schema["llllllllllll"].should == SchemaClass.layout_prototypes[:clean]
155
162
  end
156
163
  end
164
+
157
165
  end
158
166
 
159
167
  context "schema verification" do
160
168
  setup do
161
- Spontaneous.schema_map = File.expand_path('../../fixtures/schema/before.yml', __FILE__)
169
+ @site.schema.schema_map_file = File.expand_path('../../fixtures/schema/before.yml', __FILE__)
162
170
  class ::Page < Spontaneous::Page
163
171
  field :title
164
172
  end
@@ -191,11 +199,12 @@ class SchemaTest < MiniTest::Spec
191
199
  # between tests
192
200
  # Schema.stubs(:classes).returns([B, C, D, O])
193
201
  # Schema.classes.should == [B, C, D, O]
194
- ::Page.schema_id.should == UID["tttttttttttt"]
195
- B.schema_id.should == UID["bbbbbbbbbbbb"]
196
- C.schema_id.should == UID["cccccccccccc"]
197
- D.schema_id.should == UID["dddddddddddd"]
198
- O.schema_id.should == UID["oooooooooooo"]
202
+ @uids = @site.schema.uids
203
+ ::Page.schema_id.should == @uids["tttttttttttt"]
204
+ B.schema_id.should == @uids["bbbbbbbbbbbb"]
205
+ C.schema_id.should == @uids["cccccccccccc"]
206
+ D.schema_id.should == @uids["dddddddddddd"]
207
+ O.schema_id.should == @uids["oooooooooooo"]
199
208
  end
200
209
 
201
210
  teardown do
@@ -216,10 +225,10 @@ class SchemaTest < MiniTest::Spec
216
225
 
217
226
  should "detect addition of classes" do
218
227
  class E < Content; end
219
- Schema.stubs(:classes).returns([B, C, D, E])
228
+ @site.schema.stubs(:classes).returns([B, C, D, E])
220
229
  exception = nil
221
230
  begin
222
- Schema.validate_schema
231
+ @site.schema.validate_schema
223
232
  flunk("Validation should raise an exception")
224
233
  rescue Spontaneous::SchemaModificationError => e
225
234
  exception = e
@@ -233,9 +242,9 @@ class SchemaTest < MiniTest::Spec
233
242
  should "detect removal of classes" do
234
243
  SchemaTest.send(:remove_const, :C) rescue nil
235
244
  SchemaTest.send(:remove_const, :D) rescue nil
236
- Schema.stubs(:classes).returns([::Page, B, O])
245
+ @site.schema.stubs(:classes).returns([::Page, B, O])
237
246
  begin
238
- Schema.validate_schema
247
+ @site.schema.validate_schema
239
248
  flunk("Validation should raise an exception")
240
249
  rescue Spontaneous::SchemaModificationError => e
241
250
  exception = e
@@ -248,9 +257,9 @@ class SchemaTest < MiniTest::Spec
248
257
  SchemaTest.send(:remove_const, :D) rescue nil
249
258
  class E < Content; end
250
259
  class F < Content; end
251
- Schema.stubs(:classes).returns([::Page, B, E, F, O])
260
+ @site.schema.stubs(:classes).returns([::Page, B, E, F, O])
252
261
  begin
253
- Schema.validate_schema
262
+ @site.schema.validate_schema
254
263
  flunk("Validation should raise an exception if schema is modified")
255
264
  rescue Spontaneous::SchemaModificationError => e
256
265
  exception = e
@@ -264,7 +273,7 @@ class SchemaTest < MiniTest::Spec
264
273
  C.field :location
265
274
  C.field :description
266
275
  begin
267
- Schema.validate_schema
276
+ @site.schema.validate_schema
268
277
  flunk("Validation should raise an exception if new fields are added")
269
278
  rescue Spontaneous::SchemaModificationError => e
270
279
  exception = e
@@ -277,7 +286,7 @@ class SchemaTest < MiniTest::Spec
277
286
  B.stubs(:field_prototypes).returns({:author => field})
278
287
  B.stubs(:fields).returns([field])
279
288
  begin
280
- Schema.validate_schema
289
+ @site.schema.validate_schema
281
290
  flunk("Validation should raise an exception if fields are removed")
282
291
  rescue Spontaneous::SchemaModificationError => e
283
292
  exception = e
@@ -292,7 +301,7 @@ class SchemaTest < MiniTest::Spec
292
301
  B.box :changes
293
302
  B.box :updates
294
303
  begin
295
- Schema.validate_schema
304
+ @site.schema.validate_schema
296
305
  flunk("Validation should raise an exception if new boxes are added")
297
306
  rescue Spontaneous::SchemaModificationError => e
298
307
  exception = e
@@ -306,7 +315,7 @@ class SchemaTest < MiniTest::Spec
306
315
 
307
316
  B.stubs(:box_prototypes).returns(boxes)
308
317
  begin
309
- Schema.validate_schema
318
+ @site.schema.validate_schema
310
319
  flunk("Validation should raise an exception if fields are removed")
311
320
  rescue Spontaneous::SchemaModificationError => e
312
321
  exception = e
@@ -321,7 +330,7 @@ class SchemaTest < MiniTest::Spec
321
330
  B.style :fancy
322
331
  B.style :dirty
323
332
  begin
324
- Schema.validate_schema
333
+ @site.schema.validate_schema
325
334
  flunk("Validation should raise an exception if new styles are added")
326
335
  rescue Spontaneous::SchemaModificationError => e
327
336
  exception = e
@@ -335,7 +344,7 @@ class SchemaTest < MiniTest::Spec
335
344
  B.styles.stubs(:[]).with(:inline).returns(style)
336
345
  B.styles.stubs(:[]).with(:outline).returns(nil)
337
346
  begin
338
- Schema.validate_schema
347
+ @site.schema.validate_schema
339
348
  flunk("Validation should raise an exception if styles are removed")
340
349
  rescue Spontaneous::SchemaModificationError => e
341
350
  exception = e
@@ -350,7 +359,7 @@ class SchemaTest < MiniTest::Spec
350
359
  B.layout :fancy
351
360
  B.layout :dirty
352
361
  begin
353
- Schema.validate_schema
362
+ @site.schema.validate_schema
354
363
  flunk("Validation should raise an exception if new layouts are added")
355
364
  rescue Spontaneous::SchemaModificationError => e
356
365
  exception = e
@@ -364,7 +373,7 @@ class SchemaTest < MiniTest::Spec
364
373
  B.layouts.stubs(:[]).with(:thin).returns(layout)
365
374
  B.layouts.stubs(:[]).with(:fat).returns(nil)
366
375
  begin
367
- Schema.validate_schema
376
+ @site.schema.validate_schema
368
377
  flunk("Validation should raise an exception if fields are removed")
369
378
  rescue Spontaneous::SchemaModificationError => e
370
379
  exception = e
@@ -379,7 +388,7 @@ class SchemaTest < MiniTest::Spec
379
388
  f1 = B.boxes[:publishers].instance_class.field :field3
380
389
  f2 = B.boxes[:promotions].instance_class.field :field3
381
390
  begin
382
- Schema.validate_schema
391
+ @site.schema.validate_schema
383
392
  flunk("Validation should raise an exception if new fields are added to anonymous boxes")
384
393
  rescue Spontaneous::SchemaModificationError => e
385
394
  exception = e
@@ -392,7 +401,7 @@ class SchemaTest < MiniTest::Spec
392
401
  B.boxes[:promotions].instance_class.stubs(:field_prototypes).returns({:field2 => f2})
393
402
  B.boxes[:promotions].instance_class.stubs(:fields).returns([f2])
394
403
  begin
395
- Schema.validate_schema
404
+ @site.schema.validate_schema
396
405
  flunk("Validation should raise an exception if fields are removed from anonymous boxes")
397
406
  rescue Spontaneous::SchemaModificationError => e
398
407
  exception = e
@@ -406,7 +415,7 @@ class SchemaTest < MiniTest::Spec
406
415
  should "detect addition of fields to box types" do
407
416
  O.field :name
408
417
  begin
409
- Schema.validate_schema
418
+ @site.schema.validate_schema
410
419
  flunk("Validation should raise an exception if new fields are added to boxes")
411
420
  rescue Spontaneous::SchemaModificationError => e
412
421
  exception = e
@@ -419,7 +428,7 @@ class SchemaTest < MiniTest::Spec
419
428
  # fields = [O.field_prototypes[:ofield1]]
420
429
  # O.stubs(:fields).returns(fields)
421
430
  # begin
422
- # Schema.validate_schema
431
+ # @site.schema.validate_schema
423
432
  # flunk("Validation should raise an exception if fields are removed")
424
433
  # rescue Spontaneous::SchemaModificationError => e
425
434
  # exception = e
@@ -437,7 +446,7 @@ class SchemaTest < MiniTest::Spec
437
446
  s1 = B.boxes[:publishers].instance_class.style :style3
438
447
  s2 = B.boxes[:promotions].instance_class.style :style3
439
448
  begin
440
- Schema.validate_schema
449
+ @site.schema.validate_schema
441
450
  flunk("Validation should raise an exception if new fields are added to anonymous boxes")
442
451
  rescue Spontaneous::SchemaModificationError => e
443
452
  exception = e
@@ -452,7 +461,7 @@ class SchemaTest < MiniTest::Spec
452
461
  klass.styles.stubs(:[]).with(style.name).returns(style)
453
462
  klass.styles.stubs(:[]).with(:style2).returns(nil)
454
463
  begin
455
- Schema.validate_schema
464
+ @site.schema.validate_schema
456
465
  flunk("Validation should raise an exception if styles are removed")
457
466
  rescue Spontaneous::SchemaModificationError => e
458
467
  exception = e
@@ -464,10 +473,10 @@ class SchemaTest < MiniTest::Spec
464
473
  end
465
474
  end
466
475
  end
476
+
467
477
  context "Transient (testing) maps" do
468
478
  setup do
469
- Spontaneous::Schema.schema_loader_class = Spontaneous::Schema::TransientMap
470
- Spontaneous::Schema.reset!
479
+ @site.schema.schema_loader_class = Spontaneous::Schema::TransientMap
471
480
  class V < Spontaneous::Piece; end
472
481
  class W < Spontaneous::Piece; end
473
482
  end
@@ -491,15 +500,39 @@ class SchemaTest < MiniTest::Spec
491
500
  should "return UID objects" do
492
501
  V.schema_id.must_be_instance_of(Spontaneous::Schema::UID)
493
502
  end
503
+
504
+ context "for inherited boxes" do
505
+ setup do
506
+ class ::A < Spontaneous::Piece
507
+ box :a
508
+ end
509
+ class ::B < ::A
510
+ box :a
511
+ end
512
+ class ::C < ::B
513
+ box :a
514
+ end
515
+ end
516
+ teardown do
517
+ Object.send(:remove_const, :A) rescue nil
518
+ Object.send(:remove_const, :B) rescue nil
519
+ Object.send(:remove_const, :C) rescue nil
520
+ end
521
+ should "be the same as the box in the supertype" do
522
+ B.boxes[:a].schema_id.should == A.boxes[:a].schema_id
523
+ C.boxes[:a].schema_id.should == A.boxes[:a].schema_id
524
+ B.boxes[:a].instance_class.schema_id.should == A.boxes[:a].instance_class.schema_id
525
+ C.boxes[:a].instance_class.schema_id.should == A.boxes[:a].instance_class.schema_id
526
+ end
527
+ end
494
528
  end
495
529
 
496
530
  context "Map writing" do
497
531
  context "Non-existant maps" do
498
532
  setup do
499
- S::Schema.reset!
500
533
  @map_file = File.expand_path('../../../tmp/schema.yml', __FILE__)
501
534
  ::File.exists?(@map_file).should be_false
502
- Spontaneous.schema_map = @map_file
535
+ @site.schema.schema_map_file = @map_file
503
536
  class ::A < Spontaneous::Page
504
537
  field :title
505
538
  field :introduction
@@ -519,8 +552,9 @@ class SchemaTest < MiniTest::Spec
519
552
  FileUtils.rm(@map_file) if ::File.exists?(@map_file)
520
553
  end
521
554
  should "get created with verification" do
522
- S::Schema.validate!
555
+ S.schema.validate!
523
556
  classes = [ ::A, ::B]
557
+ @inheritance_map = nil
524
558
  # would like to do all of this using mocks, but don't know how to do that
525
559
  # without fecking up the whole schema id creation process
526
560
  expected = Hash[ classes.map { |klass| [ klass.schema_id.to_s, klass.schema_name ] } ]
@@ -537,13 +571,13 @@ class SchemaTest < MiniTest::Spec
537
571
  YAML.load_file(@map_file).should == expected
538
572
  end
539
573
  end
574
+
540
575
  context "change resolution" do
541
576
  setup do
542
- S::Schema.reset!
543
577
  @map_file = File.expand_path('../../../tmp/schema.yml', __FILE__)
544
578
  FileUtils.mkdir_p(File.dirname(@map_file))
545
579
  FileUtils.cp(File.expand_path('../../fixtures/schema/resolvable.yml', __FILE__), @map_file)
546
- Spontaneous.schema_map = @map_file
580
+ @site.schema.schema_map_file = @map_file
547
581
  class ::A < Spontaneous::Page
548
582
  field :title
549
583
  field :introduction
@@ -557,8 +591,8 @@ class SchemaTest < MiniTest::Spec
557
591
  field :duration
558
592
  style :daring
559
593
  end
560
- S::Schema.validate!
561
- A.schema_id.should == S::Schema::UID["qLcxinA008"]
594
+ @site.schema.validate!
595
+ A.schema_id.should == S.schema.uids["qLcxinA008"]
562
596
  end
563
597
 
564
598
  teardown do
@@ -567,9 +601,25 @@ class SchemaTest < MiniTest::Spec
567
601
  Object.send(:remove_const, :X) rescue nil
568
602
  Object.send(:remove_const, :Y) rescue nil
569
603
  S::Content.delete
570
- FileUtils.rm(@map_file) if ::File.exists?(@map_file)
604
+ FileUtils.rm(@map_file) if ::File.exists?(@map_file) rescue nil
605
+ end
606
+
607
+ should "update the STI map after addition of classes" do
608
+ ::A.sti_subclasses_array.should == [::A.schema_id.to_s]
609
+ class ::X < ::A
610
+ field :wild
611
+ box :monkeys do
612
+ field :banana
613
+ end
614
+ layout :rich
615
+ end
616
+ S.schema.validate!
617
+ ::X.schema_id.should_not be_nil
618
+ ::X.sti_key_array.should == [::X.schema_id.to_s]
619
+ ::A.sti_subclasses_array.should == [::A.schema_id.to_s, ::X.schema_id.to_s]
571
620
  end
572
621
 
622
+
573
623
  should "be done automatically if only additions are found" do
574
624
  A.field :moose
575
625
  class ::X < ::A
@@ -582,7 +632,7 @@ class SchemaTest < MiniTest::Spec
582
632
  class ::Y < ::B
583
633
  style :risky
584
634
  end
585
- S::Schema.validate!
635
+ S.schema.validate!
586
636
  ::X.schema_id.should_not be_nil
587
637
  ::Y.schema_id.should_not be_nil
588
638
  ::A.field_prototypes[:moose].schema_id.should_not be_nil
@@ -601,9 +651,9 @@ class SchemaTest < MiniTest::Spec
601
651
  should "be done automatically if only classes have been removed" do
602
652
  uid = B.schema_id.to_s
603
653
  Object.send(:remove_const, :B)
604
- S::Schema.stubs(:classes).returns([::A])
605
- S::Schema.reload!
606
- S::Schema.validate!
654
+ S.schema.stubs(:classes).returns([::A])
655
+ S.schema.reload!
656
+ S.schema.validate!
607
657
  m = YAML.load_file(@map_file)
608
658
  m.key?(uid).should be_false
609
659
  end
@@ -611,9 +661,9 @@ class SchemaTest < MiniTest::Spec
611
661
  should "be done automatically if only boxes have been removed" do
612
662
  uid = A.boxes[:posts].schema_id.to_s
613
663
  A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
614
- S::Schema.stubs(:classes).returns([A, B])
615
- S::Schema.reload!
616
- S::Schema.validate!
664
+ S.schema.stubs(:classes).returns([A, B])
665
+ S.schema.reload!
666
+ S.schema.validate!
617
667
  m = YAML.load_file(@map_file)
618
668
  m.key?(uid).should be_false
619
669
  end
@@ -624,8 +674,8 @@ class SchemaTest < MiniTest::Spec
624
674
  f2 = A.field_prototypes[:introduction]
625
675
  A.stubs(:field_prototypes).returns({:introduction => f2})
626
676
  A.stubs(:fields).returns([f2])
627
- S::Schema.reload!
628
- S::Schema.validate!
677
+ S.schema.reload!
678
+ S.schema.validate!
629
679
  m = YAML.load_file(@map_file)
630
680
  m.key?(uid).should be_false
631
681
  end
@@ -634,9 +684,9 @@ class SchemaTest < MiniTest::Spec
634
684
  A.field :moose
635
685
  uid = B.schema_id.to_s
636
686
  Object.send(:remove_const, :B)
637
- S::Schema.stubs(:classes).returns([::A])
638
- S::Schema.reload!
639
- S::Schema.validate!
687
+ S.schema.stubs(:classes).returns([::A])
688
+ S.schema.reload!
689
+ S.schema.validate!
640
690
  ::A.field_prototypes[:moose].schema_id.should_not be_nil
641
691
 
642
692
  m = YAML.load_file(@map_file)
@@ -651,8 +701,8 @@ class SchemaTest < MiniTest::Spec
651
701
  f2 = B.field_prototypes[:duration]
652
702
  B.stubs(:field_prototypes).returns({:duration => f2})
653
703
  B.stubs(:fields).returns([f2])
654
- S::Schema.reload!
655
- S::Schema.validate!
704
+ S.schema.reload!
705
+ S.schema.validate!
656
706
 
657
707
  ::A.field_prototypes[:moose].schema_id.should_not be_nil
658
708
 
@@ -665,9 +715,9 @@ class SchemaTest < MiniTest::Spec
665
715
  B.field :crisis
666
716
  uid = A.boxes[:posts].schema_id.to_s
667
717
  A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
668
- S::Schema.stubs(:classes).returns([A, B])
669
- S::Schema.reload!
670
- S::Schema.validate!
718
+ S.schema.stubs(:classes).returns([A, B])
719
+ S.schema.reload!
720
+ S.schema.validate!
671
721
 
672
722
  ::B.field_prototypes[:crisis].schema_id.should_not be_nil
673
723
  m = YAML.load_file(@map_file)
@@ -681,9 +731,9 @@ class SchemaTest < MiniTest::Spec
681
731
  B.field :crisis
682
732
  B.box :circus
683
733
  A.field :crisis
684
- S::Schema.stubs(:classes).returns([::A, ::B, ::X])
685
- S::Schema.reload!
686
- S::Schema.validate!
734
+ S.schema.stubs(:classes).returns([::A, ::B, ::X])
735
+ S.schema.reload!
736
+ S.schema.validate!
687
737
 
688
738
  ::A.field_prototypes[:crisis].schema_id.should_not be_nil
689
739
  m = YAML.load_file(@map_file)
@@ -710,17 +760,17 @@ class SchemaTest < MiniTest::Spec
710
760
  f3 = A.field_prototypes[:introduction]
711
761
  A.stubs(:field_prototypes).returns({:added => f2, :introduction => f3})
712
762
  A.stubs(:fields).returns([f2, f3])
713
- S::Schema.reload!
714
- lambda { S::Schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
763
+ S.schema.reload!
764
+ lambda { S.schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
715
765
  end
716
766
 
717
767
  should "still raise error in case of addition & deletion of classes" do
718
768
  class ::X < A; end
719
769
  uid = B.schema_id.to_s
720
770
  Object.send(:remove_const, :B)
721
- S::Schema.stubs(:classes).returns([::A, ::X])
722
- S::Schema.reload!
723
- lambda { S::Schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
771
+ S.schema.stubs(:classes).returns([::A, ::X])
772
+ S.schema.reload!
773
+ lambda { S.schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
724
774
  end
725
775
 
726
776
  should "delete box content when a box is removed" do
@@ -735,9 +785,9 @@ class SchemaTest < MiniTest::Spec
735
785
  Content.count.should == 3
736
786
  uid = A.boxes[:posts].schema_id.to_s
737
787
  A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
738
- S::Schema.stubs(:classes).returns([A, B])
739
- S::Schema.reload!
740
- S::Schema.validate!
788
+ S.schema.stubs(:classes).returns([A, B])
789
+ S.schema.reload!
790
+ S.schema.validate!
741
791
  Content.count.should == 1
742
792
  S::Content[instance.id].should == instance
743
793
  end
@@ -754,9 +804,9 @@ class SchemaTest < MiniTest::Spec
754
804
  @f3 = A.field_prototypes[:introduction]
755
805
  A.stubs(:field_prototypes).returns({:a => @af1, :b => @af2, :introduction => @f3})
756
806
  A.stubs(:fields).returns([@af1, @af2, @f3])
757
- S::Schema.reload!
807
+ S.schema.reload!
758
808
  begin
759
- S::Schema.validate!
809
+ S.schema.validate!
760
810
  flunk("Validation should raise error when adding & deleting fields")
761
811
  rescue Spontaneous::SchemaModificationError => e
762
812
  @modification = e.modification
@@ -785,7 +835,7 @@ class SchemaTest < MiniTest::Spec
785
835
  should "enable fixing the problem by deleting field from schema" do
786
836
  action = @modification.actions[0]
787
837
  begin
788
- S::Schema.apply(action)
838
+ S.schema.apply(action)
789
839
  rescue Spontaneous::SchemaModificationError => e
790
840
  flunk("Deletion of field should have resolved schema error")
791
841
  end
@@ -797,7 +847,7 @@ class SchemaTest < MiniTest::Spec
797
847
  should "enable fixing the problem by renaming field 'a'" do
798
848
  action = @modification.actions[1]
799
849
  begin
800
- S::Schema.apply(action)
850
+ S.schema.apply(action)
801
851
  rescue Spontaneous::SchemaModificationError => e
802
852
  flunk("Renaming of field should have resolved schema error")
803
853
  end
@@ -808,7 +858,7 @@ class SchemaTest < MiniTest::Spec
808
858
  should "enable fixing the problem by renaming field 'b'" do
809
859
  action = @modification.actions[2]
810
860
  begin
811
- S::Schema.apply(action)
861
+ S.schema.apply(action)
812
862
  rescue Spontaneous::SchemaModificationError => e
813
863
  flunk("Renaming of field should have resolved schema error")
814
864
  end
@@ -831,9 +881,9 @@ class SchemaTest < MiniTest::Spec
831
881
  @uid2 = @df2.schema_id.to_s
832
882
  A.stubs(:field_prototypes).returns({:a => @af1, :b => @af2, :c => @af3})
833
883
  A.stubs(:fields).returns([@af1, @af2, @af3])
834
- S::Schema.reload!
884
+ S.schema.reload!
835
885
  begin
836
- S::Schema.validate!
886
+ S.schema.validate!
837
887
  flunk("Validation should raise error when adding & deleting fields")
838
888
  rescue Spontaneous::SchemaModificationError => e
839
889
  @modification = e.modification
@@ -870,7 +920,7 @@ class SchemaTest < MiniTest::Spec
870
920
  should "enable fixing the problem by deleting both fields" do
871
921
  action = @modification.actions[0]
872
922
  begin
873
- S::Schema.apply(action)
923
+ S.schema.apply(action)
874
924
  flunk("Deletion of field should not have resolved schema error")
875
925
  rescue Spontaneous::SchemaModificationError => e
876
926
  modification = e.modification
@@ -878,7 +928,7 @@ class SchemaTest < MiniTest::Spec
878
928
  action = modification.actions[0]
879
929
 
880
930
  begin
881
- S::Schema.apply(action)
931
+ S.schema.apply(action)
882
932
  rescue Spontaneous::SchemaModificationError => e
883
933
  flunk("Deletion of field should have resolved schema error")
884
934
  end
@@ -890,7 +940,7 @@ class SchemaTest < MiniTest::Spec
890
940
  should "enable fixing the problem by deleting one field and renaming other as 'a'" do
891
941
  action = @modification.actions[0]
892
942
  begin
893
- S::Schema.apply(action)
943
+ S.schema.apply(action)
894
944
  flunk("Deletion of field should not have resolved schema error")
895
945
  rescue Spontaneous::SchemaModificationError => e
896
946
  modification = e.modification
@@ -898,7 +948,7 @@ class SchemaTest < MiniTest::Spec
898
948
  action = modification.actions[1]
899
949
 
900
950
  begin
901
- S::Schema.apply(action)
951
+ S.schema.apply(action)
902
952
  rescue Spontaneous::SchemaModificationError => e
903
953
  flunk("Deletion of field should have resolved schema error")
904
954
  end
@@ -911,7 +961,7 @@ class SchemaTest < MiniTest::Spec
911
961
  should "enable fixing the problem by renaming one field as 'c' and deleting other" do
912
962
  action = @modification.actions[3]
913
963
  begin
914
- S::Schema.apply(action)
964
+ S.schema.apply(action)
915
965
  flunk("Renaming of field should not have resolved schema error")
916
966
  rescue Spontaneous::SchemaModificationError => e
917
967
  modification = e.modification
@@ -919,7 +969,7 @@ class SchemaTest < MiniTest::Spec
919
969
  action = modification.actions[0]
920
970
 
921
971
  begin
922
- S::Schema.apply(action)
972
+ S.schema.apply(action)
923
973
  rescue Spontaneous::SchemaModificationError => e
924
974
  flunk("Deletion of field should have resolved schema error")
925
975
  end
@@ -932,7 +982,7 @@ class SchemaTest < MiniTest::Spec
932
982
  should "enable fixing the problem by renaming one field as 'c' and renaming other as 'b'" do
933
983
  action = @modification.actions[3]
934
984
  begin
935
- S::Schema.apply(action)
985
+ S.schema.apply(action)
936
986
  flunk("Renaming of field should not have resolved schema error")
937
987
  rescue Spontaneous::SchemaModificationError => e
938
988
  modification = e.modification
@@ -940,7 +990,7 @@ class SchemaTest < MiniTest::Spec
940
990
  action = modification.actions[2]
941
991
 
942
992
  begin
943
- S::Schema.apply(action)
993
+ S.schema.apply(action)
944
994
  rescue Spontaneous::SchemaModificationError => e
945
995
  flunk("Deletion of field should have resolved schema error")
946
996
  end
@@ -962,12 +1012,12 @@ class SchemaTest < MiniTest::Spec
962
1012
  boxes[:added1] = @ab1
963
1013
  boxes[:added2] = @ab2
964
1014
  A.stubs(:box_prototypes).returns(boxes)
965
- classes = S::Schema.classes.dup
1015
+ classes = S.schema.classes.dup
966
1016
  classes.delete(A::PostsBox)
967
- S::Schema.stubs(:classes).returns(classes)
968
- S::Schema.reload!
1017
+ S.schema.stubs(:classes).returns(classes)
1018
+ S.schema.reload!
969
1019
  begin
970
- S::Schema.validate!
1020
+ S.schema.validate!
971
1021
  flunk("Validation should raise error when adding & deleting fields")
972
1022
  rescue Spontaneous::SchemaModificationError => e
973
1023
  @modification = e.modification
@@ -976,7 +1026,7 @@ class SchemaTest < MiniTest::Spec
976
1026
  should "enable fixing by deleting both fields and renaming a box" do
977
1027
  action = @modification.actions[0]
978
1028
  begin
979
- S::Schema.apply(action)
1029
+ S.schema.apply(action)
980
1030
  flunk("Deleting of field should not have resolved schema error")
981
1031
  rescue Spontaneous::SchemaModificationError => e
982
1032
  modification = e.modification
@@ -984,7 +1034,7 @@ class SchemaTest < MiniTest::Spec
984
1034
  action = modification.actions[0]
985
1035
 
986
1036
  begin
987
- S::Schema.apply(action)
1037
+ S.schema.apply(action)
988
1038
  flunk("Deleting of field should not have resolved schema error")
989
1039
  rescue Spontaneous::SchemaModificationError => e
990
1040
  modification = e.modification
@@ -992,7 +1042,7 @@ class SchemaTest < MiniTest::Spec
992
1042
  action = modification.actions[1]
993
1043
 
994
1044
  begin
995
- S::Schema.apply(action)
1045
+ S.schema.apply(action)
996
1046
  rescue Spontaneous::SchemaModificationError => e
997
1047
  flunk("Schema changes should have resolved error")
998
1048
  end
@@ -1000,10 +1050,7 @@ class SchemaTest < MiniTest::Spec
1000
1050
  end
1001
1051
  end
1002
1052
  end
1003
-
1004
-
1005
1053
  end
1006
1054
  end
1007
1055
  end
1008
1056
  end
1009
-