spontaneous 0.2.0.beta1 → 0.2.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.locat +42 -0
  4. data/.travis/gemfiles/Gemfile.empty +7 -0
  5. data/.travis.yml +18 -0
  6. data/Gemfile +12 -8
  7. data/LICENSE +1 -1
  8. data/Rakefile +15 -157
  9. data/Readme.markdown +1 -1
  10. data/application/css/core.css.scss +22 -146
  11. data/application/css/definitions.css.scss +7 -3
  12. data/application/css/dialogue.css.scss +26 -1
  13. data/application/css/editing.css.scss +70 -28
  14. data/application/css/font.css.scss +1 -1
  15. data/application/css/popover.css.scss +2 -0
  16. data/application/css/top.css.scss +231 -0
  17. data/application/js/add_alias_dialogue.js +1 -1
  18. data/application/js/add_home_dialogue.js +1 -1
  19. data/application/js/ajax.js +61 -31
  20. data/application/js/box.js +4 -4
  21. data/application/js/conflicted_field_dialogue.js +1 -1
  22. data/application/js/content.js +5 -5
  23. data/application/js/dom.js +5 -0
  24. data/application/js/edit_panel.js +1 -0
  25. data/application/js/editing.js +1 -1
  26. data/application/js/extensions.js +8 -0
  27. data/application/js/field/boolean.js +31 -0
  28. data/application/js/field/file.js +32 -4
  29. data/application/js/field/image.js +24 -9
  30. data/application/js/field/markdown.js +87 -59
  31. data/application/js/field/select.js +1 -1
  32. data/application/js/field/webvideo.js +6 -1
  33. data/application/js/init.js +2 -2
  34. data/application/js/jquery-selection-position.js +130 -0
  35. data/application/js/location.js +4 -25
  36. data/application/js/meta_view/user_admin.js +2 -2
  37. data/application/js/metadata.js +2 -2
  38. data/application/js/page_browser.js +1 -1
  39. data/application/js/panel/root_menu.js +0 -1
  40. data/application/js/popover.js +27 -12
  41. data/application/js/popover_view.js +20 -4
  42. data/application/js/preview.js +31 -16
  43. data/application/js/progress.js +22 -21
  44. data/application/js/publish.js +18 -7
  45. data/application/js/sharded_upload.js +9 -6
  46. data/application/js/spontaneous.js +3 -1
  47. data/application/js/top_bar.js +264 -173
  48. data/application/js/upload.js +12 -5
  49. data/application/js/upload_manager.js +4 -3
  50. data/application/js/user.js +1 -2
  51. data/application/js/views/box_view.js +1 -1
  52. data/application/js/views/page_view.js +16 -5
  53. data/application/js/views/piece_view.js +5 -4
  54. data/application/static/font/fontawesome-webfont-1c66a4738b40ef0f6b1abca0ba9a796d.ttf +0 -0
  55. data/application/views/index.erb +6 -14
  56. data/application/views/login.erb +6 -25
  57. data/application/views/schema_modification_error.html.erb +3 -7
  58. data/db/migrations/20130114120000_create_revision_tables.rb +2 -2
  59. data/db/migrations/20130813111009_increase_path_length.rb +14 -0
  60. data/gem-public_cert.pem +20 -0
  61. data/lib/spontaneous/asset/app_compiler.rb +44 -0
  62. data/lib/spontaneous/asset/environment.rb +225 -0
  63. data/lib/spontaneous/asset.rb +2 -67
  64. data/lib/spontaneous/box.rb +0 -1
  65. data/lib/spontaneous/capistrano/deploy.rb +2 -2
  66. data/lib/spontaneous/capistrano/sync.rb +1 -1
  67. data/lib/spontaneous/cli/init.rb +36 -13
  68. data/lib/spontaneous/cli/server.rb +0 -1
  69. data/lib/spontaneous/cli/site.rb +2 -1
  70. data/lib/spontaneous/cli.rb +3 -1
  71. data/lib/spontaneous/collections/entry_set.rb +4 -12
  72. data/lib/spontaneous/collections/hash_with_fallback.rb +20 -0
  73. data/lib/spontaneous/collections/prototype_set.rb +6 -5
  74. data/lib/spontaneous/crypt.rb +2 -2
  75. data/lib/spontaneous/data_mapper/content_model/associations.rb +115 -63
  76. data/lib/spontaneous/data_mapper.rb +1 -1
  77. data/lib/spontaneous/errors.rb +6 -0
  78. data/lib/spontaneous/extensions/object_space.rb +6 -0
  79. data/lib/spontaneous/facet.rb +1 -0
  80. data/lib/spontaneous/field/base.rb +86 -13
  81. data/lib/spontaneous/field/boolean.rb +65 -0
  82. data/lib/spontaneous/field/file.rb +17 -6
  83. data/lib/spontaneous/field/html.rb +13 -0
  84. data/lib/spontaneous/field/image/size.rb +76 -0
  85. data/lib/spontaneous/field/image.rb +99 -414
  86. data/lib/spontaneous/field/tags.rb +36 -0
  87. data/lib/spontaneous/field/update.rb +1 -1
  88. data/lib/spontaneous/field/webvideo/fallback.rb +41 -0
  89. data/lib/spontaneous/field/webvideo/vimeo.rb +113 -0
  90. data/lib/spontaneous/field/webvideo/vine.rb +94 -0
  91. data/lib/spontaneous/field/webvideo/youtube.rb +133 -0
  92. data/lib/spontaneous/field/webvideo.rb +100 -250
  93. data/lib/spontaneous/field.rb +1 -1
  94. data/lib/spontaneous/generators/site/Gemfile.tt +5 -14
  95. data/lib/spontaneous/generators/site/assets/README.md +20 -0
  96. data/lib/spontaneous/generators/site/assets/css/site.scss +8 -0
  97. data/lib/spontaneous/generators/site/assets/js/site.js +6 -0
  98. data/lib/spontaneous/generators/site/config/deploy.rb.tt +9 -0
  99. data/lib/spontaneous/generators/site/config/user_levels.yml +14 -3
  100. data/lib/spontaneous/generators/site/public/README.md +12 -0
  101. data/lib/spontaneous/generators/site/templates/layouts/standard.html.cut.tt +2 -2
  102. data/lib/spontaneous/generators/site.rb +77 -35
  103. data/lib/spontaneous/layout.rb +6 -7
  104. data/lib/spontaneous/loader.rb +21 -13
  105. data/lib/spontaneous/media/file.rb +22 -9
  106. data/lib/spontaneous/media/image/attributes.rb +33 -0
  107. data/lib/spontaneous/media/image/format/gif.rb +4 -0
  108. data/lib/spontaneous/media/image/format/jpg.rb +17 -0
  109. data/lib/spontaneous/media/image/format/png.rb +4 -0
  110. data/lib/spontaneous/media/image/format/webp.rb +26 -0
  111. data/lib/spontaneous/media/image/format.rb +79 -0
  112. data/lib/spontaneous/media/image/optimizer.rb +69 -0
  113. data/lib/spontaneous/media/image/processor.rb +17 -0
  114. data/lib/spontaneous/media/image/renderable.rb +52 -0
  115. data/lib/spontaneous/media/image/skeptick.rb +70 -0
  116. data/lib/spontaneous/media/image.rb +50 -0
  117. data/lib/spontaneous/media/temp_file.rb +4 -0
  118. data/lib/spontaneous/media.rb +1 -0
  119. data/lib/spontaneous/model/core/aliases.rb +14 -8
  120. data/lib/spontaneous/model/core/boxes.rb +5 -2
  121. data/lib/spontaneous/model/core/entries.rb +4 -0
  122. data/lib/spontaneous/model/core/entry.rb +1 -0
  123. data/lib/spontaneous/model/core/fields.rb +5 -2
  124. data/lib/spontaneous/model/core/locks.rb +16 -0
  125. data/lib/spontaneous/model/core/media.rb +1 -15
  126. data/lib/spontaneous/model/core.rb +31 -1
  127. data/lib/spontaneous/model/page/controllers.rb +2 -2
  128. data/lib/spontaneous/model/page/formats.rb +1 -4
  129. data/lib/spontaneous/model/page/layouts.rb +6 -2
  130. data/lib/spontaneous/model/page/locks.rb +8 -2
  131. data/lib/spontaneous/model/page/page_tree.rb +2 -2
  132. data/lib/spontaneous/model/page/paths.rb +74 -9
  133. data/lib/spontaneous/model/page.rb +11 -3
  134. data/lib/spontaneous/model.rb +6 -6
  135. data/lib/spontaneous/output/context/render_cache.rb +23 -0
  136. data/lib/spontaneous/output/context.rb +56 -30
  137. data/lib/spontaneous/output/helpers/script_helper.rb +9 -53
  138. data/lib/spontaneous/output/helpers/stylesheet_helper.rb +8 -40
  139. data/lib/spontaneous/output/template/renderer.rb +17 -5
  140. data/lib/spontaneous/output.rb +0 -1
  141. data/lib/spontaneous/paths.rb +6 -2
  142. data/lib/spontaneous/permissions/access_key.rb +18 -0
  143. data/lib/spontaneous/permissions/user.rb +1 -1
  144. data/lib/spontaneous/permissions.rb +4 -1
  145. data/lib/spontaneous/plugins/application/state.rb +19 -12
  146. data/lib/spontaneous/prototypes/field_prototype.rb +14 -8
  147. data/lib/spontaneous/published_revision.rb +7 -0
  148. data/lib/spontaneous/publishing/immediate.rb +43 -34
  149. data/lib/spontaneous/publishing/revision.rb +9 -6
  150. data/lib/spontaneous/rack/asset_server.rb +20 -0
  151. data/lib/spontaneous/rack/back/alias.rb +46 -0
  152. data/lib/spontaneous/rack/back/application_assets.rb +28 -0
  153. data/lib/spontaneous/rack/back/base.rb +34 -0
  154. data/lib/spontaneous/rack/back/changes.rb +19 -0
  155. data/lib/spontaneous/rack/back/content.rb +54 -0
  156. data/lib/spontaneous/rack/back/events.rb +38 -0
  157. data/lib/spontaneous/rack/back/field.rb +37 -0
  158. data/lib/spontaneous/rack/back/file.rb +118 -0
  159. data/lib/spontaneous/rack/back/helpers.rb +71 -0
  160. data/lib/spontaneous/rack/back/index.rb +16 -0
  161. data/lib/spontaneous/rack/back/login.rb +47 -0
  162. data/lib/spontaneous/rack/back/map.rb +24 -0
  163. data/lib/spontaneous/rack/back/page.rb +46 -0
  164. data/lib/spontaneous/rack/back/preview.rb +43 -0
  165. data/lib/spontaneous/rack/back/schema.rb +30 -0
  166. data/lib/spontaneous/rack/back/site.rb +25 -0
  167. data/lib/spontaneous/rack/back/site_assets.rb +13 -0
  168. data/lib/spontaneous/rack/back/unsupported_browser.rb +7 -0
  169. data/lib/spontaneous/rack/{user_admin.rb → back/user_admin.rb} +2 -5
  170. data/lib/spontaneous/rack/back.rb +85 -764
  171. data/lib/spontaneous/rack/cacheable_file.rb +3 -3
  172. data/lib/spontaneous/rack/front.rb +16 -9
  173. data/lib/spontaneous/rack/middleware/authenticate.rb +65 -0
  174. data/lib/spontaneous/rack/middleware/csrf.rb +66 -0
  175. data/lib/spontaneous/rack/middleware/reloader.rb +52 -0
  176. data/lib/spontaneous/rack/middleware/scope.rb +60 -0
  177. data/lib/spontaneous/rack/middleware.rb +6 -0
  178. data/lib/spontaneous/rack/page_controller.rb +18 -5
  179. data/lib/spontaneous/rack/public.rb +17 -11
  180. data/lib/spontaneous/rack.rb +34 -24
  181. data/lib/spontaneous/revision.rb +29 -2
  182. data/lib/spontaneous/schema/uid.rb +4 -3
  183. data/lib/spontaneous/schema/uid_map.rb +5 -24
  184. data/lib/spontaneous/schema.rb +1 -0
  185. data/lib/spontaneous/search/database.rb +8 -0
  186. data/lib/spontaneous/search/field.rb +1 -1
  187. data/lib/spontaneous/search/index.rb +3 -5
  188. data/lib/spontaneous/server.rb +1 -1
  189. data/lib/spontaneous/simultaneous.rb +1 -1
  190. data/lib/spontaneous/site/features.rb +4 -5
  191. data/lib/spontaneous/site/helpers.rb +22 -5
  192. data/lib/spontaneous/site/instance.rb +2 -2
  193. data/lib/spontaneous/site/selectors.rb +22 -3
  194. data/lib/spontaneous/storage/cloud.rb +13 -9
  195. data/lib/spontaneous/storage/local.rb +11 -6
  196. data/lib/spontaneous/style.rb +40 -23
  197. data/lib/spontaneous/utils/database/mysql_dumper.rb +1 -1
  198. data/lib/spontaneous/utils/smush_it.rb +1 -1
  199. data/lib/spontaneous/version.rb +1 -1
  200. data/lib/spontaneous.rb +35 -33
  201. data/spontaneous.gemspec +53 -787
  202. data/test/experimental/test_crypt.rb +56 -56
  203. data/test/experimental/test_features.rb +16 -27
  204. data/test/fixtures/assets/public1/css/data.css.scss +3 -0
  205. data/test/fixtures/assets/public1/css/image1.css.scss +4 -0
  206. data/test/fixtures/assets/public1/css/import.css.scss +1 -0
  207. data/test/fixtures/assets/public1/css/urlhash.css.scss +3 -0
  208. data/test/fixtures/assets/public1/js/a.js +1 -1
  209. data/test/fixtures/assets/public1/js/all.js +4 -0
  210. data/test/fixtures/assets/public1/js/{m.coffee → m.js.coffee} +1 -0
  211. data/test/fixtures/assets/public1/x.js +1 -0
  212. data/test/fixtures/assets/public2/css/all.css +4 -0
  213. data/test/fixtures/assets/public2/css/missing.css.scss +3 -0
  214. data/test/fixtures/assets/public2/i/y.png +0 -0
  215. data/test/fixtures/assets/public2/js/b.js +1 -1
  216. data/test/fixtures/assets/public2/js/c.js +1 -1
  217. data/test/fixtures/images/size.extended.webp +0 -0
  218. data/test/fixtures/images/size.lossless.webp +0 -0
  219. data/test/fixtures/images/size.lossy.webp +0 -0
  220. data/test/fixtures/schema/before.yml +4 -4
  221. data/test/fixtures/schema/schema.yml +1 -1
  222. data/test/fixtures/templates/aliases/aaa.html.cut +0 -0
  223. data/test/fixtures/templates/extended/partial_with_renderer.html.cut +1 -0
  224. data/test/fixtures/templates/extended/with_includes_and_renderer.html.cut +2 -0
  225. data/test/functional/test_application.rb +108 -106
  226. data/test/functional/test_back.rb +924 -930
  227. data/test/functional/test_front.rb +285 -238
  228. data/test/functional/test_user_manager.rb +75 -100
  229. data/test/integration/test_installation.rb +1 -1
  230. data/test/support/matchers.rb +12 -0
  231. data/test/support/minitest.rb +121 -0
  232. data/test/support/rack.rb +45 -0
  233. data/test/support/test_start_finish.rb +103 -0
  234. data/test/test_helper.rb +21 -68
  235. data/test/test_integration_helper.rb +1 -3
  236. data/test/unit/test_alias.rb +432 -408
  237. data/test/unit/test_asset_bundler.rb +58 -58
  238. data/test/unit/test_assets.rb +485 -155
  239. data/test/unit/test_async.rb +16 -37
  240. data/test/unit/test_authentication.rb +425 -457
  241. data/test/unit/test_boxes.rb +191 -191
  242. data/test/unit/test_changesets.rb +244 -254
  243. data/test/unit/test_config.rb +128 -142
  244. data/test/unit/test_content.rb +313 -359
  245. data/test/unit/test_content_inheritance.rb +29 -30
  246. data/test/unit/test_datamapper.rb +1205 -1080
  247. data/test/unit/test_datamapper_content.rb +49 -51
  248. data/test/unit/test_extensions.rb +23 -23
  249. data/test/unit/test_fields.rb +1488 -1180
  250. data/test/unit/test_formats.rb +158 -158
  251. data/test/unit/test_generators.rb +98 -40
  252. data/test/unit/test_helpers.rb +73 -76
  253. data/test/unit/test_image_size.rb +53 -22
  254. data/test/unit/test_images.rb +164 -165
  255. data/test/unit/test_layouts.rb +133 -122
  256. data/test/unit/test_logger.rb +14 -17
  257. data/test/unit/test_media.rb +69 -84
  258. data/test/unit/test_modifications.rb +513 -525
  259. data/test/unit/test_page.rb +462 -361
  260. data/test/unit/test_permissions.rb +379 -364
  261. data/test/unit/test_piece.rb +67 -75
  262. data/test/unit/test_plugins.rb +82 -89
  263. data/test/unit/test_prototype_set.rb +215 -216
  264. data/test/unit/test_prototypes.rb +114 -124
  265. data/test/unit/test_publishing.rb +252 -289
  266. data/test/unit/test_render.rb +167 -115
  267. data/test/unit/test_revisions.rb +436 -444
  268. data/test/unit/test_schema.rb +339 -309
  269. data/test/unit/test_search.rb +577 -574
  270. data/test/unit/test_serialisation.rb +136 -147
  271. data/test/unit/test_site.rb +252 -227
  272. data/test/unit/test_skeptick.rb +130 -0
  273. data/test/unit/test_storage.rb +46 -40
  274. data/test/unit/test_structure.rb +57 -66
  275. data/test/unit/test_styles.rb +104 -104
  276. data/test/unit/test_templates.rb +72 -57
  277. data/test/unit/test_type_hierarchy.rb +15 -16
  278. data/test/unit/test_visibility.rb +239 -257
  279. metadata +455 -326
  280. data/application/js/vendor/JS.Class-2.1.5/CHANGELOG +0 -283
  281. data/application/js/vendor/JS.Class-2.1.5/MIT-LICENSE +0 -30
  282. data/application/js/vendor/JS.Class-2.1.5/README +0 -30
  283. data/application/js/vendor/JS.Class-2.1.5/min/command.js +0 -1
  284. data/application/js/vendor/JS.Class-2.1.5/min/comparable.js +0 -1
  285. data/application/js/vendor/JS.Class-2.1.5/min/constant_scope.js +0 -1
  286. data/application/js/vendor/JS.Class-2.1.5/min/decorator.js +0 -1
  287. data/application/js/vendor/JS.Class-2.1.5/min/enumerable.js +0 -1
  288. data/application/js/vendor/JS.Class-2.1.5/min/forwardable.js +0 -1
  289. data/application/js/vendor/JS.Class-2.1.5/min/hash.js +0 -1
  290. data/application/js/vendor/JS.Class-2.1.5/min/linked_list.js +0 -1
  291. data/application/js/vendor/JS.Class-2.1.5/min/loader.js +0 -1
  292. data/application/js/vendor/JS.Class-2.1.5/min/method_chain.js +0 -1
  293. data/application/js/vendor/JS.Class-2.1.5/min/observable.js +0 -1
  294. data/application/js/vendor/JS.Class-2.1.5/min/package.js +0 -1
  295. data/application/js/vendor/JS.Class-2.1.5/min/proxy.js +0 -1
  296. data/application/js/vendor/JS.Class-2.1.5/min/ruby.js +0 -1
  297. data/application/js/vendor/JS.Class-2.1.5/min/set.js +0 -1
  298. data/application/js/vendor/JS.Class-2.1.5/min/stack_trace.js +0 -1
  299. data/application/js/vendor/JS.Class-2.1.5/min/state.js +0 -1
  300. data/application/js/vendor/JS.Class-2.1.5/min/stdlib.js +0 -16
  301. data/application/js/vendor/jquery-1.6.2.min.js +0 -18
  302. data/application/js/vendor/jquery-ui-1.8.16.custom.min.js +0 -791
  303. data/application/js/vendor/jquery-ui-1.8.9.custom.min.js +0 -415
  304. data/application/static/font/fontawesome-webfont-5c5c21100a346972a82c34c5e96ffcfe.ttf +0 -0
  305. data/application/static/select-arrow-6e7dd3745b00e934b0d7a3250c46558b.png +0 -0
  306. data/bin/limit-upload +0 -5
  307. data/bin/unlimit-upload +0 -3
  308. data/lib/spontaneous/asset/file.rb +0 -25
  309. data/lib/spontaneous/asset/source.rb +0 -28
  310. data/lib/spontaneous/image_size.rb +0 -123
  311. data/lib/spontaneous/output/assets/compression.rb +0 -58
  312. data/lib/spontaneous/output/assets.rb +0 -32
  313. data/lib/spontaneous/rack/around_back.rb +0 -20
  314. data/lib/spontaneous/rack/around_front.rb +0 -27
  315. data/lib/spontaneous/rack/around_preview.rb +0 -22
  316. data/lib/spontaneous/rack/assets.rb +0 -126
  317. data/lib/spontaneous/rack/authentication.rb +0 -20
  318. data/lib/spontaneous/rack/cookie_authentication.rb +0 -38
  319. data/lib/spontaneous/rack/helpers.rb +0 -52
  320. data/lib/spontaneous/rack/http.rb +0 -18
  321. data/lib/spontaneous/rack/media.rb +0 -30
  322. data/lib/spontaneous/rack/query_authentication.rb +0 -35
  323. data/lib/spontaneous/rack/reloader.rb +0 -45
  324. data/lib/spontaneous/rack/user_helpers.rb +0 -28
  325. /data/{README → application/js/field/markdown/text_command.js} +0 -0
  326. /data/application/js/vendor/{JS.Class-2.1.5/min/core.js → js.class-2.1.5.min.js} +0 -0
  327. /data/test/fixtures/assets/public1/css/{a.scss → a.css.scss} +0 -0
  328. /data/{lib/spontaneous/generators/site/public/css/site.scss → test/fixtures/assets/public1/x.css} +0 -0
  329. /data/{lib/spontaneous/generators/site/public/js/.empty_directory → test/fixtures/assets/public1/x.png} +0 -0
  330. /data/test/fixtures/assets/public2/css/{b.scss → b.css.scss} +0 -0
  331. /data/test/fixtures/assets/public2/js/{n.coffee → n.js.coffee} +0 -0
  332. /data/test/fixtures/back/{public → assets}/css/sass_include.scss +0 -0
  333. /data/test/fixtures/back/{public → assets}/css/sass_template.scss +0 -0
  334. /data/test/fixtures/back/{public → assets}/js/coffeescript.coffee +0 -0
  335. /data/{lib/spontaneous/generators/site/public/js/site.js → test/fixtures/templates/aliases/aa_alias.html.cut} +0 -0
@@ -4,14 +4,14 @@ require File.expand_path('../../test_helper', __FILE__)
4
4
 
5
5
  require 'sinatra/base'
6
6
 
7
- class RenderTest < MiniTest::Spec
7
+ describe "Render" do
8
8
 
9
- def setup
9
+ before do
10
10
  @site = setup_site
11
11
  Content.delete
12
12
  end
13
13
 
14
- def teardown
14
+ after do
15
15
  teardown_site
16
16
  Spontaneous::Output.cache_templates = false
17
17
  end
@@ -20,8 +20,8 @@ class RenderTest < MiniTest::Spec
20
20
  @template_root ||= File.expand_path(File.join(File.dirname(__FILE__), "../fixtures/templates"))
21
21
  end
22
22
 
23
- context "Publish rendering step" do
24
- setup do
23
+ describe "Publish rendering step" do
24
+ before do
25
25
  @site.paths.add(:templates, template_root)
26
26
 
27
27
  Page.field :title
@@ -51,13 +51,13 @@ class RenderTest < MiniTest::Spec
51
51
  @page = ::Page.create(:title => "Page Title")
52
52
 
53
53
  @content = TemplateClass.new
54
- @content.style.should == TemplateClass.default_style
54
+ @content.style.must_equal TemplateClass.default_style
55
55
  @content.title = "The Title"
56
56
  @content.description = "The Description"
57
57
 
58
58
  @page.sections1 << @content
59
59
 
60
- @section1 = ::Page.new(:title => "Section 1")
60
+ @section1 = ::Page.new(:title => "Section 1", :uid => "section1")
61
61
  @section2 = ::Page.new(:title => "Section 2")
62
62
  @section3 = ::Page.new(:title => "Section 3")
63
63
  @section4 = ::Page.new(:title => "Section 4")
@@ -72,67 +72,74 @@ class RenderTest < MiniTest::Spec
72
72
  Spontaneous::Output.renderer = @renderer
73
73
  end
74
74
 
75
- teardown do
75
+ after do
76
76
  Object.send(:remove_const, :TemplateClass) rescue nil
77
77
  Object.send(:remove_const, :Page) rescue nil
78
78
  end
79
79
 
80
- should "render strings correctly" do
81
- @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).should == "Page Title {{ Time.now }}"
80
+ it "render strings correctly" do
81
+ @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).must_equal "Page Title {{ Time.now }}"
82
82
  end
83
83
 
84
- should "use a cache for the site root" do
84
+ it "use a cache for the site root" do
85
85
  a = @renderer.render_string('#{root.object_id} #{root.object_id}', @page.output(:html), {})
86
- a.should_not == "#{nil.object_id} #{nil.object_id}"
87
- a.split.uniq.length.should == 1
86
+ a.wont_equal "#{nil.object_id} #{nil.object_id}"
87
+ a.split.uniq.length.must_equal 1
88
88
  end
89
89
 
90
- should "iterate through the sections" do
90
+ it "uses a cache for site pages" do
91
+ a = @renderer.render_string("${site_page('$section1').object_id}", @page.output(:html), {})
92
+ a.wont_equal "#{nil.object_id} #{nil.object_id}"
93
+ b = @renderer.render_string("${site_page('$section1').object_id}", @page.output(:html), {})
94
+ a.must_equal b
95
+ end
96
+
97
+ it "iterate through the sections" do
91
98
  template = '%%{ navigation(%s) do |section, active| }${section.title}/${active} %%{ end }'
92
99
  a = @renderer.render_string(template % "", @section1.output(:html), {})
93
- a.should == "Section 1/true Section 2/false Section 4/false Section 3/false "
100
+ a.must_equal "Section 1/true Section 2/false Section 4/false Section 3/false "
94
101
  a = @renderer.render_string(template % "1", @section2.output(:html), {})
95
- a.should == "Section 1/false Section 2/true Section 4/false Section 3/false "
102
+ a.must_equal "Section 1/false Section 2/true Section 4/false Section 3/false "
96
103
  a = @renderer.render_string(template % ":section", @section1.output(:html), {})
97
- a.should == "Section 1/true Section 2/false Section 4/false Section 3/false "
104
+ a.must_equal "Section 1/true Section 2/false Section 4/false Section 3/false "
98
105
  end
99
106
 
100
- should "use a cache for navigation pages" do
107
+ it "use a cache for navigation pages" do
101
108
  a = b = c = nil
102
109
  template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
103
110
  renderer = Spontaneous::Output::Template::PreviewRenderer.new
104
111
  a = renderer.render_string(template, ::Content[@section1.id].output(:html), {}).strip
105
112
  b = renderer.render_string(template, ::Content[@section1.id].output(:html), {}).strip
106
- a.should_not == b
113
+ a.wont_equal b
107
114
 
108
115
  renderer = Spontaneous::Output::Template::PublishRenderer.new
109
116
  template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
110
117
  a = renderer.render_string(template, ::Content[@section1.id].output(:html), {}).strip
111
118
  b = renderer.render_string(template, ::Content[@section1.id].output(:html), {}).strip
112
- a.should == b
119
+ a.must_equal b
113
120
 
114
121
  renderer = Spontaneous::Output::Template::PublishRenderer.new
115
122
  template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
116
123
  c = renderer.render_string(template, ::Content[@section1.id].output(:html), {}).strip
117
- a.should_not == c
124
+ a.wont_equal c
118
125
  end
119
126
 
120
- should "be able to render themselves to HTML" do
121
- @content.render.should == "<html><title>The Title</title><body>The Description</body></html>\n"
127
+ it "be able to render themselves to HTML" do
128
+ @content.render.must_equal "<html><title>The Title</title><body>The Description</body></html>\n"
122
129
  end
123
130
 
124
- should "be able to render themselves to PDF" do
131
+ it "be able to render themselves to PDF" do
125
132
  Page.add_output :pdf
126
- @content.render(:pdf).should == "<PDF><title>The Title</title><body>{The Description}</body></PDF>\n"
133
+ @content.render(:pdf).must_equal "<PDF><title>The Title</title><body>{The Description}</body></PDF>\n"
127
134
  end
128
135
 
129
- should "be able to render themselves to EPUB" do
136
+ it "be able to render themselves to EPUB" do
130
137
  Page.add_output :epub
131
- @content.render(:epub).should == "<EPUB><title>The Title</title><body>The Description</body></EPUB>\n"
138
+ @content.render(:epub).must_equal "<EPUB><title>The Title</title><body>The Description</body></EPUB>\n"
132
139
  end
133
140
 
134
- context "piece trees" do
135
- setup do
141
+ describe "piece trees" do
142
+ before do
136
143
  @page = ::Page.create
137
144
  TemplateClass.style :complex_template, :default => true
138
145
  TemplateClass.box :bits
@@ -147,21 +154,21 @@ class RenderTest < MiniTest::Spec
147
154
  @content.contents.first.style = TemplateClass.get_style(:this_template)
148
155
  end
149
156
 
150
- teardown do
157
+ after do
151
158
  Content.delete
152
159
  end
153
160
 
154
- should "be accessible through #content method" do
161
+ it "be accessible through #content method" do
155
162
  expected = "<complex>\nThe Title\n<piece><html><title>Child Title</title><body>Child Description</body></html>\n</piece>\n</complex>\n"
156
- @content.render.should == expected
163
+ @content.render.must_equal expected
157
164
  end
158
165
 
159
- should "cascade the chosen format to all subsequent #render calls" do
166
+ it "cascade the chosen format to all subsequent #render calls" do
160
167
  ::Page.add_output :pdf
161
- @content.render(:pdf).should == "<pdf>\nThe Title\n<piece><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</piece>\n</pdf>\n"
168
+ @content.render(:pdf).must_equal "<pdf>\nThe Title\n<piece><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</piece>\n</pdf>\n"
162
169
  end
163
170
 
164
- should "only show visible pieces" do
171
+ it "only show visible pieces" do
165
172
  child = TemplateClass.new
166
173
  child.title = "Child2 Title"
167
174
  child.description = "Child2 Description"
@@ -170,12 +177,12 @@ class RenderTest < MiniTest::Spec
170
177
  @content.bits.last.hide!
171
178
 
172
179
  expected = "<complex>\nThe Title\n<piece><html><title>Child Title</title><body>Child Description</body></html>\n</piece>\n</complex>\n"
173
- @content.render.should == expected
180
+ @content.render.must_equal expected
174
181
  end
175
182
  end
176
183
 
177
- context "fields" do
178
- should "render a joined list of field values" do
184
+ describe "fields" do
185
+ it "render a joined list of field values" do
179
186
  Page.field :description, :markdown
180
187
  Page.field :image
181
188
  ::Page.layout do
@@ -186,12 +193,42 @@ class RenderTest < MiniTest::Spec
186
193
  @page.description = "Description & Stuff"
187
194
  lines = @page.render.split(/\n(?=<div)/)
188
195
  @page.fields.each_with_index do |field, i|
189
- lines[i].should =~ /<div.+?>#{field.render(:html)}<\/div>/
196
+ lines[i].must_match /<div.+?>#{field.render(:html)}<\/div>/
197
+ end
198
+ end
199
+
200
+ it "passes arguments onto the render" do
201
+ Page.field :image do
202
+ size :large do; end
203
+ size :small do; end
204
+ end
205
+ Page.layout do
206
+ %{${ image(width: 10, height: 50, alt: "Fish")}}
207
+ end
208
+ @page.image = "/photo.jpg"
209
+ output = @page.render
210
+ output.must_match /width=['"]10['"]/
211
+ output.must_match /height=['"]50['"]/
212
+ output.must_match /alt=['"]Fish['"]/
213
+ end
214
+
215
+ it "passes arguments onto the render for image sizes" do
216
+ Page.field :image do
217
+ size :large do; end
218
+ size :small do; end
219
+ end
220
+ Page.layout do
221
+ %{${ image.large(width: 10, height: 50)}}
190
222
  end
223
+ @page.image = "/photo.jpg"
224
+ output = @page.render
225
+ output.must_match /width=['"]10['"]/
226
+ output.must_match /height=['"]50['"]/
191
227
  end
228
+
192
229
  end
193
- context "boxes" do
194
- setup do
230
+ describe "boxes" do
231
+ before do
195
232
  TemplateClass.style :slots_template, :default => true
196
233
  TemplateClass.box :images
197
234
  @page = ::Page.new
@@ -206,32 +243,32 @@ class RenderTest < MiniTest::Spec
206
243
  @content.images.first.style = TemplateClass.get_style(:this_template)
207
244
  end
208
245
 
209
- should "render box sets as a joined list of each box's output" do
246
+ it "render box sets as a joined list of each box's output" do
210
247
  ::Page.layout do
211
248
  %(${ content })
212
249
  end
213
- @page.render.should == @page.boxes.map(&:render).join("\n")
250
+ @page.render.must_equal @page.boxes.map(&:render).join("\n")
214
251
  end
215
252
 
216
- should "render 'boxes' as a joined list of each box's output" do
253
+ it "render 'boxes' as a joined list of each box's output" do
217
254
  ::Page.layout do
218
255
  %(${ boxes })
219
256
  end
220
- @page.render.should == @page.boxes.map(&:render).join("\n")
257
+ @page.render.must_equal @page.boxes.map(&:render).join("\n")
221
258
  end
222
259
 
223
- should "render boxes" do
224
- @content.render.should == "<boxes>\n <img><html><title>Child Title</title><body>Child Description</body></html>\n</img>\n</boxes>\n"
260
+ it "render boxes" do
261
+ @content.render.must_equal "<boxes>\n <img><html><title>Child Title</title><body>Child Description</body></html>\n</img>\n</boxes>\n"
225
262
  end
226
263
 
227
- should "render boxes to alternate formats" do
264
+ it "render boxes to alternate formats" do
228
265
  ::Page.add_output :pdf
229
- @content.render(:pdf).should == "<boxes-pdf>\n <img><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</img>\n</boxes-pdf>\n"
266
+ @content.render(:pdf).must_equal "<boxes-pdf>\n <img><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</img>\n</boxes-pdf>\n"
230
267
  end
231
268
  end
232
269
 
233
- context "anonymous boxes" do
234
- setup do
270
+ describe "anonymous boxes" do
271
+ before do
235
272
  TemplateClass.style :anonymous_style, :default => true
236
273
  TemplateClass.box :images do
237
274
  field :introduction
@@ -254,17 +291,17 @@ class RenderTest < MiniTest::Spec
254
291
 
255
292
  end
256
293
 
257
- teardown do
294
+ after do
258
295
  Object.send(:remove_const, :AnImage) rescue nil
259
296
  end
260
297
 
261
- should "render using anonymous style" do
262
- @root.render.should == "<root>\nImages below:\n<img>Image 1</img>\n<img>Image 2</img>\n</root>\n"
298
+ it "render using anonymous style" do
299
+ @root.render.must_equal "<root>\nImages below:\n<img>Image 1</img>\n<img>Image 2</img>\n</root>\n"
263
300
  end
264
301
  end
265
302
 
266
- context "default templates" do
267
- setup do
303
+ describe "default templates" do
304
+ before do
268
305
  TemplateClass.style :default_template_style, :default => true
269
306
  TemplateClass.box :images_with_template do
270
307
  field :introduction
@@ -286,17 +323,17 @@ class RenderTest < MiniTest::Spec
286
323
  @root.images_with_template << @image2
287
324
  end
288
325
 
289
- teardown do
326
+ after do
290
327
  Object.send(:remove_const, :AnImage) rescue nil
291
328
  end
292
329
 
293
- should "render using default style if present" do
294
- @root.render.should == "<root>\nImages below:\n<images>\n <img>Image 1</img>\n <img>Image 2</img>\n</images>\n</root>\n"
330
+ it "render using default style if present" do
331
+ @root.render.must_equal "<root>\nImages below:\n<images>\n <img>Image 1</img>\n <img>Image 2</img>\n</images>\n</root>\n"
295
332
  end
296
333
  end
297
334
 
298
- context "page styles" do
299
- setup do
335
+ describe "page styles" do
336
+ before do
300
337
  class ::PageClass < Page
301
338
  field :title, :string
302
339
  end
@@ -306,24 +343,24 @@ class RenderTest < MiniTest::Spec
306
343
  @parent.title = "Parent"
307
344
  end
308
345
 
309
- teardown do
346
+ after do
310
347
  Object.send(:remove_const, :PageClass) rescue nil
311
348
  end
312
349
 
313
- should "find page styles at root of templates dir" do
350
+ it "find page styles at root of templates dir" do
314
351
  @parent.layout = :standard_page
315
- @parent.render.should == "/Parent/\n"
352
+ @parent.render.must_equal "/Parent/\n"
316
353
  end
317
354
 
318
- should "find page styles in class sub dir" do
355
+ it "find page styles in class sub dir" do
319
356
  @parent.layout = :subdir_style
320
- @parent.render.should == "<Parent>\n"
357
+ @parent.render.must_equal "<Parent>\n"
321
358
  end
322
359
  end
323
360
 
324
- context "pages as inline content" do
361
+ describe "pages as inline content" do
325
362
 
326
- setup do
363
+ before do
327
364
  class ::PageClass < Page
328
365
  field :title, :string
329
366
  end
@@ -339,87 +376,102 @@ class RenderTest < MiniTest::Spec
339
376
  @page.save
340
377
  end
341
378
 
342
- teardown do
379
+ after do
343
380
  Object.send(:remove_const, :PageClass) rescue nil
344
381
  end
345
382
 
346
- should "use style assigned by entry" do
347
- @parent.contents.first.style.should == PageClass.default_style
348
- @parent.things.first.style.should == PageClass.default_style
383
+ it "use style assigned by entry" do
384
+ @parent.contents.first.style.must_equal PageClass.default_style
385
+ @parent.things.first.style.must_equal PageClass.default_style
349
386
  end
350
387
 
351
- should "use their default page style when accessed directly" do
388
+ it "use their default page style when accessed directly" do
352
389
  @page = PageClass[@page.id]
353
- @page.layout.should == PageClass.default_layout
390
+ @page.layout.must_equal PageClass.default_layout
354
391
  assert_correct_template(@parent, template_root / 'layouts/page_style')
355
- @page.render.should == "<html></html>\n"
392
+ @page.render.must_equal "<html></html>\n"
356
393
  end
357
394
 
358
- should "persist sub-page style settings" do
395
+ it "persist sub-page style settings" do
359
396
  @parent = Content[@parent.id]
360
- @parent.contents.first.style.should == PageClass.default_style
397
+ @parent.contents.first.style.must_equal PageClass.default_style
361
398
  end
362
399
 
363
- should "render using the inline style" do
400
+ it "render using the inline style" do
364
401
  assert_correct_template(@parent.contents.first, template_root / 'page_class/inline_style')
365
- @parent.contents.first.render.should == "Child\n"
366
- @parent.things.render.should == "Child\n"
367
- @parent.render.should == "<html>Child\n</html>\n"
402
+ @parent.contents.first.render.must_equal "Child\n"
403
+ @parent.things.render.must_equal "Child\n"
404
+ @parent.render.must_equal "<html>Child\n</html>\n"
368
405
  end
369
406
  end
370
407
 
371
- context "params in templates" do
372
- setup do
408
+ describe "params in templates" do
409
+ before do
373
410
  class ::TemplateParams < Page; end
374
411
  TemplateParams.field :image, :default => "/images/fromage.jpg"
375
412
  TemplateParams.layout :template_params
376
413
  @page = TemplateParams.new
377
414
  end
378
- teardown do
415
+ after do
379
416
  Object.send(:remove_const, :TemplateParams) rescue nil
380
417
  end
381
- should "be passed to the render call" do
382
- @page.image.value.should == "/images/fromage.jpg"
383
- @page.image.src.should == "/images/fromage.jpg"
384
- @page.render.should =~ /alt="Smelly"/
418
+ it "be passed to the render call" do
419
+ @page.image.value.must_equal "/images/fromage.jpg"
420
+ @page.image.src.must_equal "/images/fromage.jpg"
421
+ @page.render.must_match /alt="Smelly"/
385
422
  end
386
423
  end
387
424
  end
388
425
 
389
- context "Request rendering" do
390
- setup do
426
+ describe "Request rendering" do
427
+ before do
391
428
  @site.paths.add(:templates, template_root)
392
429
 
393
430
  class ::PreviewRender < Page
394
431
  field :title, :string
395
432
  end
433
+ class ::Image < Piece
434
+ field :src
435
+ template :html, "${ src }/ q={{ query }}"
436
+ end
437
+
396
438
  PreviewRender.style :inline
397
- PreviewRender.box :images
439
+ PreviewRender.box(:images) { allow :Image }
398
440
  PreviewRender.field :description, :markdown
399
441
  @page = PreviewRender.new(:title => "PAGE", :description => "DESCRIPTION")
400
442
  @page.save
401
443
  @session = ::Rack::MockSession.new(::Sinatra::Application)
402
444
  end
403
445
 
404
- teardown do
446
+ after do
405
447
  Object.send(:remove_const, :PreviewRender)
448
+ Object.send(:remove_const, :Image)
406
449
  end
407
450
 
408
- context "Preview render" do
409
- setup do
451
+ describe "Preview render" do
452
+ before do
410
453
  @renderer = Spontaneous::Output::Template::PreviewRenderer.new
411
454
  Spontaneous::Output.renderer = @renderer
412
455
  PreviewRender.layout :preview_render
413
456
  end
414
457
 
415
- should "output both publish & request tags" do
458
+ it "output both publish & request tags" do
416
459
  @now = Time.now
417
460
  ::Time.stubs(:now).returns(@now)
418
- @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).should == "PAGE #{@now.to_s}"
461
+ @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).must_equal "PAGE #{@now.to_s}"
462
+ end
463
+
464
+ it "renders all includes before calling the request render stage" do
465
+ PreviewRender.layout do
466
+ "q={{ query }} <${ images }>"
467
+ end
468
+ @page.images << Image.new(src: 'fish.jpg')
469
+ result = @page.render_using(@renderer, :html, { query: 'frog'})
470
+ result.must_equal "q=frog <fish.jpg/ q=frog>"
419
471
  end
420
472
 
421
- # should "render all tags & include preview edit markers" do
422
- # @page.render.should == <<-HTML
473
+ # it "render all tags & include preview edit markers" do
474
+ # @page.render.must_equal <<-HTML
423
475
  # PAGE <p>DESCRIPTION</p>
424
476
  #
425
477
  # <!-- spontaneous:previewedit:start:box id:#{@page.images.schema_id} -->
@@ -428,24 +480,24 @@ class RenderTest < MiniTest::Spec
428
480
  # HTML
429
481
  # end
430
482
  end
431
- context "Request rendering" do
432
- setup do
483
+ describe "Request rendering" do
484
+ before do
433
485
  @renderer = Spontaneous::Output::Template::PreviewRenderer.new
434
486
  Spontaneous::Output.renderer = @renderer
435
487
  PreviewRender.layout :params
436
488
  end
437
489
 
438
- should "pass on passed params" do
490
+ it "pass on passed params" do
439
491
  result = @page.render({
440
492
  :welcome => "hello"
441
493
  })
442
- result.should == "PAGE hello\n"
494
+ result.must_equal "PAGE hello\n"
443
495
  end
444
496
  end
445
497
 
446
498
 
447
- context "entry parameters" do
448
- setup do
499
+ describe "entry parameters" do
500
+ before do
449
501
  @renderer = Spontaneous::Output::Template::PreviewRenderer.new
450
502
  Spontaneous::Output.renderer = @renderer
451
503
  PreviewRender.layout :entries
@@ -457,13 +509,13 @@ class RenderTest < MiniTest::Spec
457
509
  @page.images << @third
458
510
  @page.save
459
511
  end
460
- should "be available to templates" do
461
- @page.render.should == "0>first\n1second\n2<third\n0:first\n1:second\n2:third\nfirst.second.third\n"
512
+ it "be available to templates" do
513
+ @page.render.must_equal "0>first\n1second\n2<third\n0:first\n1:second\n2:third\nfirst.second.third\n"
462
514
  end
463
515
  end
464
516
 
465
- context "Publishing renderer" do
466
- setup do
517
+ describe "Publishing renderer" do
518
+ before do
467
519
  Spontaneous::Output.write_compiled_scripts = true
468
520
  @temp_template_root = @site.root / "templates"
469
521
  FileUtils.mkdir_p(@temp_template_root)
@@ -490,8 +542,8 @@ class RenderTest < MiniTest::Spec
490
542
  @first.save
491
543
  end
492
544
 
493
- should "ignore compiled template file if it is older than the template" do
494
- @first.render.should == "compiled"
545
+ it "ignore compiled template file if it is older than the template" do
546
+ @first.render.must_equal "compiled"
495
547
  File.open(@temp_template_root / "layouts/standard.html.cut", "w") do |t|
496
548
  t.write("updated template")
497
549
  end
@@ -503,12 +555,12 @@ class RenderTest < MiniTest::Spec
503
555
  # Need to use a new renderer because the existing one will have cached the compiled template
504
556
  @renderer = Spontaneous::Output::Template::PublishRenderer.new
505
557
  Spontaneous::Output.renderer = @renderer
506
- @first.render.should == "updated template"
558
+ @first.render.must_equal "updated template"
507
559
  end
508
560
  end
509
561
 
510
- context "variables in render command" do
511
- setup do
562
+ describe "variables in render command" do
563
+ before do
512
564
  @renderer = Spontaneous::Output::Template::PublishRenderer.new
513
565
  Spontaneous::Output.renderer = @renderer
514
566
 
@@ -521,8 +573,8 @@ class RenderTest < MiniTest::Spec
521
573
  @page.images.first.style = :variables
522
574
  end
523
575
 
524
- should "be passed to page content" do
525
- @page.render(:html, :param => "param").should == "param\n<variable/param/>\n\nlocal\n"
576
+ it "be passed to page content" do
577
+ @page.render(:html, :param => "param").must_equal "param\n<variable/param/>\n\nlocal\n"
526
578
  end
527
579
  end
528
580
  end