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,11 +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 PageTest < MiniTest::Spec
7
7
  include Spontaneous
8
8
 
9
+ def setup
10
+ @site = setup_site
11
+ end
12
+
13
+ def teardown
14
+ teardown_site
15
+ end
16
+
9
17
  context "All pages" do
10
18
  # should "have a pre-defined 'title' field" do
11
19
  # p = Page.new
@@ -16,13 +24,15 @@ class PageTest < MiniTest::Spec
16
24
  context "Pages:" do
17
25
  setup do
18
26
  Content.delete
19
- S::Schema.reset!
20
27
  class Page < Spot::Page
21
28
  field :title, :string
29
+ box :sub
22
30
  end
31
+ class Piece < Spontaneous::Piece; end
23
32
  end
24
33
  teardown do
25
34
  PageTest.send(:remove_const, :Page)
35
+ PageTest.send(:remove_const, :Piece)
26
36
  end
27
37
  context "Root page" do
28
38
  setup do
@@ -71,11 +81,11 @@ class PageTest < MiniTest::Spec
71
81
  o = Page.create(:title => "New Page")
72
82
  p = Page.create(:title => "New Page")
73
83
  o.slug.should == slug
74
- r << o
84
+ r.sub << o
75
85
  o.save
76
86
  o = Page[o.id]
77
87
  o.slug.should == slug
78
- o << p
88
+ o.sub << p
79
89
  o.save
80
90
  o = Page[o.id]
81
91
  o.slug.should == slug
@@ -88,6 +98,14 @@ class PageTest < MiniTest::Spec
88
98
  o.reload
89
99
  o.slug.should == "new-title"
90
100
  end
101
+
102
+ should "not be longer than 255 chars" do
103
+ o = Page.create
104
+ long_slug = (["bang"]*100)
105
+ o.slug = long_slug.join(' ')
106
+ o.slug.length.should == 255
107
+ o.slug.should == long_slug.join('-')[0..254]
108
+ end
91
109
  end
92
110
 
93
111
  context "Pages in tree" do
@@ -95,14 +113,14 @@ class PageTest < MiniTest::Spec
95
113
  Content.delete
96
114
  @p = Page.create
97
115
  @p.root?.should be_true
98
- @q = Page.new
99
- @r = Page.new
100
- @s = Page.new
101
- @t = Page.new
102
- @p << @q
103
- @q << @r
104
- @q << @s
105
- @s << @t
116
+ @q = Page.new(:slug => 'q')
117
+ @r = Page.new(:slug => 'r')
118
+ @s = Page.new(:slug => 's')
119
+ @t = Page.new(:slug => 't')
120
+ @p.sub << @q
121
+ @q.sub << @r
122
+ @q.sub << @s
123
+ @s.sub << @t
106
124
  @p.save
107
125
  @q.save
108
126
  @r.save
@@ -116,12 +134,6 @@ class PageTest < MiniTest::Spec
116
134
  @t = Page[@t.id]
117
135
  end
118
136
 
119
- should "have the right entry classes" do
120
- @p.pieces.first.proxy_class.should == Spontaneous::PagePiece
121
- @q.pieces.first.proxy_class.should == Spontaneous::PagePiece
122
- @s.pieces.first.proxy_class.should == Spontaneous::PagePiece
123
- end
124
-
125
137
  should "have a reference to their parent" do
126
138
  @p.parent.should be_nil
127
139
  @q.parent.should === @p
@@ -129,7 +141,29 @@ class PageTest < MiniTest::Spec
129
141
  @s.parent.should === @q
130
142
  @t.parent.should === @s
131
143
  end
144
+ should "have a reference to their owner" do
145
+ @p.owner.should be_nil
146
+ @q.owner.should === @p
147
+ @r.owner.should === @q
148
+ @s.owner.should === @q
149
+ @t.owner.should === @s
150
+ end
132
151
 
152
+ should "know their container" do
153
+ @p.container.should be_nil
154
+ @q.container.should == @p.sub
155
+ @r.container.should == @q.sub
156
+ @s.container.should == @q.sub
157
+ @t.container.should == @s.sub
158
+ end
159
+
160
+ should "know their containing box" do
161
+ @p.box.should be_nil
162
+ @q.box.should == @p.sub
163
+ @r.box.should == @q.sub
164
+ @s.box.should == @q.sub
165
+ @t.box.should == @s.sub
166
+ end
133
167
 
134
168
  should "have a list of their children" do
135
169
  @p.children.should == [@q]
@@ -154,12 +188,68 @@ class PageTest < MiniTest::Spec
154
188
  @t.depth.should == 3
155
189
  end
156
190
 
191
+ should "have the correct page hierarchy" do
192
+ Page.box :things1
193
+ Page.box :things2
194
+ a = Page.new
195
+ c = Page.new
196
+ d = Page.new
197
+ e = Page.new
198
+ a.things1 << c
199
+ a.things2 << d
200
+ a.things2 << e
201
+ a.save
202
+ a.reload
203
+ c.reload
204
+ d.reload
205
+ e.reload
206
+ c.parent.should == a
207
+ d.parent.should == a
208
+ e.parent.should == a
209
+ c.content_ancestors.should == [a, a.things1]
210
+ d.content_ancestors.should == [a, a.things2]
211
+ e.content_ancestors.should == [a, a.things2]
212
+ # the zeroth box is 'sub'
213
+ c.page_order_string.should == "00001.00000"
214
+ d.page_order_string.should == "00002.00000"
215
+ e.page_order_string.should == "00002.00001"
216
+ end
217
+
218
+ should "have the correct page hierarchy for pages within pieces" do
219
+ Page.box :things
220
+ Piece.box :pages
221
+ a = Page.new
222
+ b = Piece.new
223
+ a.things << b
224
+ c = Page.new
225
+ d = Page.new
226
+ b.pages << c
227
+ b.pages << d
228
+ a.save
229
+ a.reload
230
+ b.reload
231
+ c.reload
232
+ d.reload
233
+ c.parent.should == a
234
+ c.content_ancestors.should == [a, a.things, b, b.pages]
235
+ c.page_order_string.should == "00001.00000.00000.00000"
236
+ d.page_order_string.should == "00001.00000.00000.00001"
237
+ end
238
+
157
239
  should "have correct paths" do
158
240
  @p.path.should == "/"
159
- @q.path.should == "/#{@q.slug}"
160
- @r.path.should == "/#{@q.slug}/#{@r.slug}"
161
- @s.path.should == "/#{@q.slug}/#{@s.slug}"
162
- @t.path.should == "/#{@q.slug}/#{@s.slug}/#{@t.slug}"
241
+ @q.path.should == "/q"
242
+ @r.path.should == "/q/r"
243
+ @s.path.should == "/q/s"
244
+ @t.path.should == "/q/s/t"
245
+ end
246
+
247
+ should "update paths when being adopted" do
248
+ @p.sub.adopt(@s)
249
+ @s.reload
250
+ @t.reload
251
+ @s.path.should == "/s"
252
+ @t.path.should == "/s/t"
163
253
  end
164
254
 
165
255
  should "all have a reference to the root node" do
@@ -217,18 +307,42 @@ class PageTest < MiniTest::Spec
217
307
  @t.ancestor(-1).should == @s
218
308
  @t.ancestor(-2).should == @q
219
309
  end
310
+
311
+ should "test for ancestry" do
312
+ @t.ancestor?(@s).should be_true
313
+ @t.ancestor?(@q).should be_true
314
+ @t.ancestor?(@p).should be_true
315
+ @q.ancestor?(@t).should be_false
316
+ end
317
+
318
+ should "know if it's in the current path" do
319
+ @t.active?(@s).should be_true
320
+ @t.active?(@t).should be_true
321
+ @t.active?(@q).should be_true
322
+ @t.active?(@p).should be_true
323
+ @q.active?(@t).should be_false
324
+ end
325
+
326
+ should "provide a list of pages at any depth" do
327
+ @t.at_depth(2).should == [@r, @s]
328
+ @p.at_depth(1).should == [@q]
329
+ lambda { @p.at_depth(2) }.must_raise(ArgumentError)
330
+ end
220
331
  end
221
332
 
222
333
  context "page pieces" do
223
334
  setup do
335
+ Page.box :things
336
+ Piece.box :things
224
337
  @parent = Page.create
225
338
  @piece = Piece.new
226
339
  @child = Page.new
227
- @parent << @piece
228
- @piece << @child
340
+ @parent.things << @piece
341
+ @piece.things << @child
229
342
  @parent.save
230
343
  @piece.save
231
344
  @child.save
345
+ @page_piece = @parent.things.first.things.first
232
346
  end
233
347
 
234
348
  should "report their depth according to their position in the piece tree" do
@@ -236,9 +350,26 @@ class PageTest < MiniTest::Spec
236
350
  @parent.pieces.first.depth.should == 1
237
351
  @parent.pieces.first.pieces.first.depth.should == 2
238
352
  end
239
- end
240
- end
241
353
 
354
+ should "know their page" do
355
+ @page_piece.page.should == @parent
356
+ end
357
+
358
+ should "know their container" do
359
+ @page_piece.container.should == @piece.things
360
+ end
242
361
 
243
- # context ""
362
+ should "know their box" do
363
+ @page_piece.box.should == @piece.things
364
+ end
365
+
366
+ should "know their parent" do
367
+ @page_piece.parent.should == @piece
368
+ end
369
+
370
+ should "know their owner" do
371
+ @page_piece.owner.should == @piece
372
+ end
373
+ end
374
+ end
244
375
  end
@@ -1,18 +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 PermissionsTest < MiniTest::Spec
7
7
 
8
8
  def setup
9
- Spontaneous::Schema.reset!
9
+ @site = setup_site
10
10
  Spontaneous::Content.delete
11
11
  Permissions::UserLevel.reset!
12
- Permissions::UserLevel.level_file = File.expand_path('../../fixtures/permissions', __FILE__) / 'config/user_levels.yml'
12
+ Permissions::UserLevel.stubs(:level_file).returns(File.expand_path('../../fixtures/permissions', __FILE__) / 'config/user_levels.yml')
13
13
  end
14
14
 
15
15
  def teardown
16
+ teardown_site
16
17
  Permissions::AccessGroup.delete
17
18
  Permissions::AccessKey.delete
18
19
  Permissions::User.delete
@@ -424,6 +425,7 @@ class PermissionsTest < MiniTest::Spec
424
425
 
425
426
  context "Guards" do
426
427
  setup do
428
+ Permissions::User.delete
427
429
  @visitor = Permissions::User.create(:email => "visitor@example.com", :login => "visitor", :name => "visitor", :password => "visitorpass", :password_confirmation => "visitorpass")
428
430
  @editor = Permissions::User.create(:email => "editor@example.com", :login => "editor", :name => "editor", :password => "editorpass", :password_confirmation => "editorpass")
429
431
  @admin = Permissions::User.create(:email => "admin@example.com", :login => "admin", :name => "admin", :password => "adminpass", :password_confirmation => "adminpass")
@@ -503,152 +505,133 @@ class PermissionsTest < MiniTest::Spec
503
505
  should "protect field reads" do
504
506
  # without user (e.g. terminal/console access) everything is always
505
507
  # possible
506
- @i.field_readable?(:editor_level).should be_true
507
- @i.field_readable?(:admin_level).should be_true
508
- @i.field_readable?(:root_level).should be_true
509
- @i.field_readable?(:mixed_level).should be_true
510
- @i.field_readable?(:default_level).should be_true
511
-
512
- Permissions.with_user(@visitor) do
513
- @i.field_readable?(:editor_level).should be_false
514
- @i.field_readable?(:admin_level).should be_false
515
- @i.field_readable?(:root_level).should be_false
516
- @i.field_readable?(:mixed_level).should be_false
517
- @i.field_readable?(:default_level).should be_true
518
- end
519
- Permissions.with_user(@editor) do
520
- @i.field_readable?(:editor_level).should be_true
521
- @i.field_readable?(:admin_level).should be_false
522
- @i.field_readable?(:root_level).should be_false
523
- @i.field_readable?(:mixed_level).should be_true
524
- @i.field_readable?(:default_level).should be_true
525
- end
526
- Permissions.with_user(@admin) do
527
- @i.field_readable?(:editor_level).should be_true
528
- @i.field_readable?(:admin_level).should be_true
529
- @i.field_readable?(:root_level).should be_false
530
- @i.field_readable?(:mixed_level).should be_true
531
- @i.field_readable?(:default_level).should be_true
532
- end
533
- Permissions.with_user(@root) do
534
- @i.field_readable?(:editor_level).should be_true
535
- @i.field_readable?(:admin_level).should be_true
536
- @i.field_readable?(:root_level).should be_true
537
- @i.field_readable?(:mixed_level).should be_true
538
- @i.field_readable?(:default_level).should be_true
539
- end
508
+ @i.field_readable?(nil, :editor_level).should be_true
509
+ @i.field_readable?(nil, :admin_level).should be_true
510
+ @i.field_readable?(nil, :root_level).should be_true
511
+ @i.field_readable?(nil, :mixed_level).should be_true
512
+ @i.field_readable?(nil, :default_level).should be_true
513
+
514
+ @i.field_readable?(@visitor, :editor_level).should be_false
515
+ @i.field_readable?(@visitor, :admin_level).should be_false
516
+ @i.field_readable?(@visitor, :root_level).should be_false
517
+ @i.field_readable?(@visitor, :mixed_level).should be_false
518
+ @i.field_readable?(@visitor, :default_level).should be_true
519
+
520
+ @i.field_readable?(@editor, :editor_level).should be_true
521
+ @i.field_readable?(@editor, :admin_level).should be_false
522
+ @i.field_readable?(@editor, :root_level).should be_false
523
+ @i.field_readable?(@editor, :mixed_level).should be_true
524
+ @i.field_readable?(@editor, :default_level).should be_true
525
+
526
+ @i.field_readable?(@admin, :editor_level).should be_true
527
+ @i.field_readable?(@admin, :admin_level).should be_true
528
+ @i.field_readable?(@admin, :root_level).should be_false
529
+ @i.field_readable?(@admin, :mixed_level).should be_true
530
+ @i.field_readable?(@admin, :default_level).should be_true
531
+
532
+ @i.field_readable?(@root, :editor_level).should be_true
533
+ @i.field_readable?(@root, :admin_level).should be_true
534
+ @i.field_readable?(@root, :root_level).should be_true
535
+ @i.field_readable?(@root, :mixed_level).should be_true
536
+ @i.field_readable?(@root, :default_level).should be_true
540
537
  end
541
538
 
542
539
  should "protect field writes" do
543
540
  # without user (e.g. terminal/console access) everything is always
544
541
  # possible
545
- @i.field_writable?(:editor_level).should be_true
546
- @i.field_writable?(:admin_level).should be_true
547
- @i.field_writable?(:root_level).should be_true
548
- @i.field_writable?(:mixed_level).should be_true
549
- @i.field_writable?(:default_level).should be_true
550
-
551
- Permissions.with_user(@visitor) do
552
- @i.field_writable?(:editor_level).should be_false
553
- @i.field_writable?(:admin_level).should be_false
554
- @i.field_writable?(:root_level).should be_false
555
- @i.field_writable?(:mixed_level).should be_false
556
- @i.field_writable?(:default_level).should be_false
557
- end
558
- Permissions.with_user(@editor) do
559
- @i.field_writable?(:editor_level).should be_true
560
- @i.field_writable?(:admin_level).should be_false
561
- @i.field_writable?(:root_level).should be_false
562
- @i.field_writable?(:mixed_level).should be_false
563
- @i.field_writable?(:default_level).should be_true
564
- end
565
- Permissions.with_user(@admin) do
566
- @i.field_writable?(:editor_level).should be_true
567
- @i.field_writable?(:admin_level).should be_true
568
- @i.field_writable?(:root_level).should be_false
569
- @i.field_writable?(:mixed_level).should be_false
570
- @i.field_writable?(:default_level).should be_true
571
- end
572
- Permissions.with_user(@root) do
573
- @i.field_writable?(:editor_level).should be_true
574
- @i.field_writable?(:admin_level).should be_true
575
- @i.field_writable?(:root_level).should be_true
576
- @i.field_writable?(:mixed_level).should be_true
577
- @i.field_writable?(:default_level).should be_true
578
- end
542
+ @i.field_writable?(nil, :editor_level).should be_true
543
+ @i.field_writable?(nil, :admin_level).should be_true
544
+ @i.field_writable?(nil, :root_level).should be_true
545
+ @i.field_writable?(nil, :mixed_level).should be_true
546
+ @i.field_writable?(nil, :default_level).should be_true
547
+
548
+ @i.field_writable?(@visitor, :editor_level).should be_false
549
+ @i.field_writable?(@visitor, :admin_level).should be_false
550
+ @i.field_writable?(@visitor, :root_level).should be_false
551
+ @i.field_writable?(@visitor, :mixed_level).should be_false
552
+ @i.field_writable?(@visitor, :default_level).should be_false
553
+
554
+ @i.field_writable?(@editor, :editor_level).should be_true
555
+ @i.field_writable?(@editor, :admin_level).should be_false
556
+ @i.field_writable?(@editor, :root_level).should be_false
557
+ @i.field_writable?(@editor, :mixed_level).should be_false
558
+ @i.field_writable?(@editor, :default_level).should be_true
559
+
560
+ @i.field_writable?(@admin, :editor_level).should be_true
561
+ @i.field_writable?(@admin, :admin_level).should be_true
562
+ @i.field_writable?(@admin, :root_level).should be_false
563
+ @i.field_writable?(@admin, :mixed_level).should be_false
564
+ @i.field_writable?(@admin, :default_level).should be_true
565
+
566
+ @i.field_writable?(@root, :editor_level).should be_true
567
+ @i.field_writable?(@root, :admin_level).should be_true
568
+ @i.field_writable?(@root, :root_level).should be_true
569
+ @i.field_writable?(@root, :mixed_level).should be_true
570
+ @i.field_writable?(@root, :default_level).should be_true
579
571
  end
580
572
 
581
573
  should "protect box reads" do
582
- @i.box_readable?(:editor_level).should be_true
583
- @i.box_readable?(:admin_level).should be_true
584
- @i.box_readable?(:root_level).should be_true
585
- @i.box_readable?(:mixed_level).should be_true
586
- @i.box_readable?(:default_level).should be_true
587
-
588
- Permissions.with_user(@visitor) do
589
- @i.box_readable?(:editor_level).should be_false
590
- @i.box_readable?(:admin_level).should be_false
591
- @i.box_readable?(:root_level).should be_false
592
- @i.box_readable?(:mixed_level).should be_false
593
- @i.box_readable?(:default_level).should be_true
594
- end
595
- Permissions.with_user(@editor) do
596
- @i.box_readable?(:editor_level).should be_true
597
- @i.box_readable?(:admin_level).should be_false
598
- @i.box_readable?(:root_level).should be_false
599
- @i.box_readable?(:mixed_level).should be_true
600
- @i.box_readable?(:default_level).should be_true
601
- end
602
- Permissions.with_user(@admin) do
603
- @i.box_readable?(:editor_level).should be_true
604
- @i.box_readable?(:admin_level).should be_true
605
- @i.box_readable?(:root_level).should be_false
606
- @i.box_readable?(:mixed_level).should be_true
607
- @i.box_readable?(:default_level).should be_true
608
- end
609
- Permissions.with_user(@root) do
610
- @i.box_readable?(:editor_level).should be_true
611
- @i.box_readable?(:admin_level).should be_true
612
- @i.box_readable?(:root_level).should be_true
613
- @i.box_readable?(:mixed_level).should be_true
614
- @i.box_readable?(:default_level).should be_true
615
- end
574
+ @i.box_readable?(nil, :editor_level).should be_true
575
+ @i.box_readable?(nil, :admin_level).should be_true
576
+ @i.box_readable?(nil, :root_level).should be_true
577
+ @i.box_readable?(nil, :mixed_level).should be_true
578
+ @i.box_readable?(nil, :default_level).should be_true
579
+
580
+ @i.box_readable?(@visitor, :editor_level).should be_false
581
+ @i.box_readable?(@visitor, :admin_level).should be_false
582
+ @i.box_readable?(@visitor, :root_level).should be_false
583
+ @i.box_readable?(@visitor, :mixed_level).should be_false
584
+ @i.box_readable?(@visitor, :default_level).should be_true
585
+
586
+ @i.box_readable?(@editor, :editor_level).should be_true
587
+ @i.box_readable?(@editor, :admin_level).should be_false
588
+ @i.box_readable?(@editor, :root_level).should be_false
589
+ @i.box_readable?(@editor, :mixed_level).should be_true
590
+ @i.box_readable?(@editor, :default_level).should be_true
591
+
592
+ @i.box_readable?(@admin, :editor_level).should be_true
593
+ @i.box_readable?(@admin, :admin_level).should be_true
594
+ @i.box_readable?(@admin, :root_level).should be_false
595
+ @i.box_readable?(@admin, :mixed_level).should be_true
596
+ @i.box_readable?(@admin, :default_level).should be_true
597
+
598
+ @i.box_readable?(@root, :editor_level).should be_true
599
+ @i.box_readable?(@root, :admin_level).should be_true
600
+ @i.box_readable?(@root, :root_level).should be_true
601
+ @i.box_readable?(@root, :mixed_level).should be_true
602
+ @i.box_readable?(@root, :default_level).should be_true
616
603
  end
617
604
  should "protect box writes" do
618
- @i.box_writable?(:editor_level).should be_true
619
- @i.box_writable?(:admin_level).should be_true
620
- @i.box_writable?(:root_level).should be_true
621
- @i.box_writable?(:mixed_level).should be_true
622
- @i.box_writable?(:default_level).should be_true
623
-
624
- Permissions.with_user(@visitor) do
625
- @i.box_writable?(:editor_level).should be_false
626
- @i.box_writable?(:admin_level).should be_false
627
- @i.box_writable?(:root_level).should be_false
628
- @i.box_writable?(:mixed_level).should be_false
629
- @i.box_writable?(:default_level).should be_false
630
- end
631
- Permissions.with_user(@editor) do
632
- @i.box_writable?(:editor_level).should be_true
633
- @i.box_writable?(:admin_level).should be_false
634
- @i.box_writable?(:root_level).should be_false
635
- @i.box_writable?(:mixed_level).should be_false
636
- @i.box_writable?(:default_level).should be_true
637
- end
638
- Permissions.with_user(@admin) do
639
- @i.box_writable?(:editor_level).should be_true
640
- @i.box_writable?(:admin_level).should be_true
641
- @i.box_writable?(:root_level).should be_false
642
- @i.box_writable?(:mixed_level).should be_false
643
- @i.box_writable?(:default_level).should be_true
644
- end
645
- Permissions.with_user(@root) do
646
- @i.box_writable?(:editor_level).should be_true
647
- @i.box_writable?(:admin_level).should be_true
648
- @i.box_writable?(:root_level).should be_true
649
- @i.box_writable?(:mixed_level).should be_true
650
- @i.box_writable?(:default_level).should be_true
651
- end
605
+ @i.box_writable?(nil, :editor_level).should be_true
606
+ @i.box_writable?(nil, :admin_level).should be_true
607
+ @i.box_writable?(nil, :root_level).should be_true
608
+ @i.box_writable?(nil, :mixed_level).should be_true
609
+ @i.box_writable?(nil, :default_level).should be_true
610
+
611
+ @i.box_writable?(@visitor, :editor_level).should be_false
612
+ @i.box_writable?(@visitor, :admin_level).should be_false
613
+ @i.box_writable?(@visitor, :root_level).should be_false
614
+ @i.box_writable?(@visitor, :mixed_level).should be_false
615
+ @i.box_writable?(@visitor, :default_level).should be_false
616
+
617
+ @i.box_writable?(@editor, :editor_level).should be_true
618
+ @i.box_writable?(@editor, :admin_level).should be_false
619
+ @i.box_writable?(@editor, :root_level).should be_false
620
+ @i.box_writable?(@editor, :mixed_level).should be_false
621
+ @i.box_writable?(@editor, :default_level).should be_true
622
+
623
+ @i.box_writable?(@admin, :editor_level).should be_true
624
+ @i.box_writable?(@admin, :admin_level).should be_true
625
+ @i.box_writable?(@admin, :root_level).should be_false
626
+ @i.box_writable?(@admin, :mixed_level).should be_false
627
+ @i.box_writable?(@admin, :default_level).should be_true
628
+
629
+
630
+ @i.box_writable?(@root, :editor_level).should be_true
631
+ @i.box_writable?(@root, :admin_level).should be_true
632
+ @i.box_writable?(@root, :root_level).should be_true
633
+ @i.box_writable?(@root, :mixed_level).should be_true
634
+ @i.box_writable?(@root, :default_level).should be_true
652
635
  end
653
636
 
654
637
  should "serialise only things in class viewable by the current user" do
@@ -669,60 +652,60 @@ class PermissionsTest < MiniTest::Spec
669
652
  ["default_level", expected]
670
653
  ]
671
654
 
672
- Permissions.with_user(@root) do
673
- C.export[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
674
- C.export[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
675
- C.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
655
+ # Permissions.with_user(@root) do
656
+ C.export(@root)[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
657
+ C.export(@root)[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
658
+ C.export(@root)[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
676
659
  ["editor_level", expected],
677
660
  ["admin_level", expected],
678
661
  ["root_level", expected],
679
662
  ["mixed_level", expected],
680
663
  ["default_level", expected]
681
664
  ]
682
- end
665
+ # end
683
666
 
684
- Permissions.with_user(@visitor) do
667
+ # Permissions.with_user(@visitor) do
685
668
  expected = [
686
669
  ["default_level", false]
687
670
  ]
688
- C.export[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
689
- C.export[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
690
- C.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
671
+ C.export(@visitor)[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
672
+ C.export(@visitor)[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
673
+ C.export(@visitor)[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
691
674
  ["default_level", expected ]
692
675
  ]
693
- end
676
+ # end
694
677
 
695
- Permissions.with_user(@editor) do
678
+ # Permissions.with_user(@editor) do
696
679
  expected = [
697
680
  ["editor_level", true],
698
681
  ["mixed_level", false],
699
682
  ["default_level", true]
700
683
  ]
701
- C.export[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
702
- C.export[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
703
- C.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
684
+ C.export(@editor)[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
685
+ C.export(@editor)[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
686
+ C.export(@editor)[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
704
687
  ["editor_level", expected],
705
688
  ["mixed_level", expected],
706
689
  ["default_level", expected]
707
690
  ]
708
- end
691
+ # end
709
692
 
710
- Permissions.with_user(@admin) do
693
+ # Permissions.with_user(@admin) do
711
694
  expected = [
712
695
  ["editor_level", true],
713
696
  ["admin_level", true],
714
697
  ["mixed_level", false],
715
698
  ["default_level", true]
716
699
  ]
717
- C.export[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
718
- C.export[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
719
- C.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
700
+ C.export(@admin)[:fields].map { |f| [f[:name], f[:writable]] }.should == expected
701
+ C.export(@admin)[:boxes].map { |f| [f[:name], f[:writable]] }.should == expected
702
+ C.export(@admin)[:boxes].map { |b| [b[:name], b[:fields].map {|f| [f[:name], f[:writable]]}] }.should == [
720
703
  ["editor_level", expected],
721
704
  ["admin_level", expected],
722
705
  ["mixed_level", expected],
723
706
  ["default_level", expected]
724
707
  ]
725
- end
708
+ # end
726
709
  end
727
710
 
728
711
  should "only list allowed types addable by the user" do
@@ -735,32 +718,32 @@ class PermissionsTest < MiniTest::Spec
735
718
  ]
736
719
  C.export[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
737
720
 
738
- Permissions.with_user(@root) do
739
- C.export[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
740
- end
741
- Permissions.with_user(@visitor) do
721
+ # Permissions.with_user(@root) do
722
+ C.export(@root)[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
723
+ # end
724
+ # Permissions.with_user(@visitor) do
742
725
  expected = [
743
726
  ["default_level", []]
744
727
  ]
745
- C.export[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
746
- end
747
- Permissions.with_user(@editor) do
728
+ C.export(@visitor)[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
729
+ # end
730
+ # Permissions.with_user(@editor) do
748
731
  expected = [
749
732
  ["editor_level", ["D"]],
750
733
  ["mixed_level", []],
751
734
  ["default_level", ["C"]]
752
735
  ]
753
- C.export[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
754
- end
755
- Permissions.with_user(@admin) do
736
+ C.export(@editor)[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
737
+ # end
738
+ # Permissions.with_user(@admin) do
756
739
  expected = [
757
740
  ["editor_level", ["D", "C"]],
758
741
  ["admin_level", ["C"]],
759
742
  ["mixed_level", []],
760
743
  ["default_level", ["C"]]
761
744
  ]
762
- C.export[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
763
- end
745
+ C.export(@admin)[:boxes].map { |b| [b[:name], b[:allowed_types]] }.should == expected
746
+ # end
764
747
  end
765
748
 
766
749
  should "serialise only things in instance viewable by the current user" do
@@ -779,55 +762,55 @@ class PermissionsTest < MiniTest::Spec
779
762
  ["mixed_level", expected],
780
763
  ["default_level", expected]
781
764
  ]
782
- Permissions.with_user(@root) do
783
- @i.export[:boxes].map { |f| f[:name] }.should == expected
784
- @i.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
765
+ # Permissions.with_user(@root) do
766
+ @i.export(@root)[:boxes].map { |f| f[:name] }.should == expected
767
+ @i.export(@root)[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
785
768
  ["editor_level", expected],
786
769
  ["admin_level", expected],
787
770
  ["root_level", expected],
788
771
  ["mixed_level", expected],
789
772
  ["default_level", expected]
790
773
  ]
791
- end
774
+ # end
792
775
 
793
- Permissions.with_user(@visitor) do
794
- @i.export[:boxes].map { |f| f[:name] }.should == [
776
+ # Permissions.with_user(@visitor) do
777
+ @i.export(@visitor)[:boxes].map { |f| f[:name] }.should == [
795
778
  "default_level"
796
779
  ]
797
- @i.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
780
+ @i.export(@visitor)[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
798
781
  ["default_level", ["default_level"]]
799
782
  ]
800
- end
783
+ # end
801
784
 
802
- Permissions.with_user(@editor) do
785
+ # Permissions.with_user(@editor) do
803
786
  expected = [
804
787
  "editor_level",
805
788
  "mixed_level",
806
789
  "default_level"
807
790
  ]
808
- @i.export[:boxes].map { |f| f[:name] }.should == expected
809
- @i.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
791
+ @i.export(@editor)[:boxes].map { |f| f[:name] }.should == expected
792
+ @i.export(@editor)[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
810
793
  ["editor_level", expected],
811
794
  ["mixed_level", expected],
812
795
  ["default_level", expected]
813
796
  ]
814
- end
797
+ # end
815
798
 
816
- Permissions.with_user(@admin) do
799
+ # Permissions.with_user(@admin) do
817
800
  expected = [
818
801
  "editor_level",
819
802
  "admin_level",
820
803
  "mixed_level",
821
804
  "default_level"
822
805
  ]
823
- @i.export[:boxes].map { |f| f[:name] }.should == expected
824
- @i.export[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
806
+ @i.export(@admin)[:boxes].map { |f| f[:name] }.should == expected
807
+ @i.export(@admin)[:boxes].map { |b| [b[:name], b[:fields].map {|f| f[:name]}] }.should == [
825
808
  ["editor_level", expected],
826
809
  ["admin_level", expected],
827
810
  ["mixed_level", expected],
828
811
  ["default_level", expected]
829
812
  ]
830
- end
813
+ # end
831
814
 
832
815
  end
833
816
  end