pages_core 3.6.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/Rakefile +3 -1
  4. data/app/assets/builds/pages_core/admin-dist.js +55 -0
  5. data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
  6. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
  7. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
  8. data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
  9. data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
  10. data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
  11. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
  12. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
  13. data/app/assets/stylesheets/pages/admin.scss +0 -1
  14. data/app/assets/stylesheets/pages/errors.css +2 -0
  15. data/app/controller_dummies/admin/admin_controller.rb +3 -1
  16. data/app/controller_dummies/application_controller.rb +3 -1
  17. data/app/controller_dummies/attachments_controller.rb +3 -1
  18. data/app/controller_dummies/frontend_controller.rb +3 -1
  19. data/app/controller_dummies/images_controller.rb +3 -1
  20. data/app/controller_dummies/page_files_controller.rb +3 -1
  21. data/app/controller_dummies/pages_controller.rb +3 -1
  22. data/app/controller_dummies/sitemaps_controller.rb +3 -1
  23. data/app/controllers/admin/attachments_controller.rb +5 -3
  24. data/app/controllers/admin/categories_controller.rb +2 -0
  25. data/app/controllers/admin/images_controller.rb +16 -8
  26. data/app/controllers/admin/invites_controller.rb +4 -1
  27. data/app/controllers/admin/pages_controller.rb +9 -26
  28. data/app/controllers/admin/password_resets_controller.rb +9 -5
  29. data/app/controllers/admin/users_controller.rb +10 -4
  30. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
  31. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  32. data/app/controllers/concerns/pages_core/authentication.rb +13 -5
  33. data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
  34. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  35. data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
  36. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +8 -0
  37. data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
  38. data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
  39. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  40. data/app/controllers/errors_controller.rb +5 -53
  41. data/app/controllers/pages_core/admin_controller.rb +7 -67
  42. data/app/controllers/pages_core/attachments_controller.rb +10 -6
  43. data/app/controllers/pages_core/base_controller.rb +11 -17
  44. data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
  45. data/app/controllers/pages_core/frontend/pages_controller.rb +14 -18
  46. data/app/controllers/pages_core/frontend_controller.rb +3 -0
  47. data/app/controllers/pages_core/images_controller.rb +3 -1
  48. data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
  49. data/app/controllers/sessions_controller.rb +3 -1
  50. data/app/formatters/pages_core/html_formatter.rb +13 -63
  51. data/app/formatters/pages_core/image_embedder.rb +79 -0
  52. data/app/formatters/pages_core/link_renderer.rb +4 -2
  53. data/app/helpers/admin/admin_helper.rb +2 -0
  54. data/app/helpers/admin/menu_helper.rb +6 -4
  55. data/app/helpers/admin/pages_helper.rb +4 -57
  56. data/app/helpers/application_helper.rb +3 -1
  57. data/app/helpers/frontend_helper.rb +3 -1
  58. data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
  59. data/app/helpers/pages_core/admin/content_tabs_helper.rb +31 -0
  60. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  61. data/app/helpers/pages_core/admin/form_builder.rb +8 -0
  62. data/app/helpers/pages_core/admin/image_uploads_helper.rb +47 -0
  63. data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
  64. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  65. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  66. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -39
  67. data/app/helpers/pages_core/application_helper.rb +3 -0
  68. data/app/helpers/pages_core/attachments_helper.rb +31 -27
  69. data/app/helpers/pages_core/form_builder.rb +17 -13
  70. data/app/helpers/pages_core/frontend_helper.rb +3 -3
  71. data/app/helpers/pages_core/head_tags_helper.rb +18 -22
  72. data/app/helpers/pages_core/images_helper.rb +3 -0
  73. data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
  74. data/app/helpers/pages_core/open_graph_tags_helper.rb +8 -6
  75. data/app/helpers/pages_core/page_path_helper.rb +24 -3
  76. data/app/javascript/admin-dist.js +2 -0
  77. data/app/javascript/components/Attachments/Attachment.jsx +121 -0
  78. data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
  79. data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
  80. data/app/javascript/components/Attachments.jsx +165 -0
  81. data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
  82. data/app/javascript/components/EditableImage.jsx +61 -0
  83. data/app/{assets/javascripts/pages/admin/components/file_upload_button.jsx → javascript/components/FileUploadButton.jsx} +11 -1
  84. data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
  85. data/app/javascript/components/ImageCropper/Image.jsx +65 -0
  86. data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
  87. data/app/javascript/components/ImageCropper/useCrop.js +199 -0
  88. data/app/javascript/components/ImageCropper.jsx +90 -0
  89. data/app/javascript/components/ImageEditor/Form.jsx +98 -0
  90. data/app/javascript/components/ImageEditor.jsx +62 -0
  91. data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
  92. data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
  93. data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
  94. data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
  95. data/app/javascript/components/ImageGrid.jsx +257 -0
  96. data/app/javascript/components/ImageUploader.jsx +171 -0
  97. data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
  98. data/app/javascript/components/ModalStore.jsx +12 -0
  99. data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
  100. data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
  101. data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
  102. data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
  103. data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +44 -38
  104. data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +46 -31
  105. data/app/javascript/components/RichTextArea.jsx +213 -0
  106. data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
  107. data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
  108. data/app/javascript/components/TagEditor/Tag.jsx +32 -0
  109. data/app/javascript/components/TagEditor.jsx +61 -0
  110. data/app/javascript/components/Toast.jsx +72 -0
  111. data/app/javascript/components/ToastStore.jsx +14 -0
  112. data/app/javascript/components/drag/draggedOrder.js +51 -0
  113. data/app/javascript/components/drag/useDragCollection.js +84 -0
  114. data/app/javascript/components/drag/useDragUploader.js +112 -0
  115. data/app/javascript/components/drag/useDraggable.js +17 -0
  116. data/app/javascript/components/drag.js +6 -0
  117. data/app/javascript/components.js +14 -0
  118. data/app/javascript/controllers/EditPageController.js +20 -0
  119. data/app/javascript/controllers/LoginController.js +29 -0
  120. data/app/javascript/controllers/MainController.js +65 -0
  121. data/app/javascript/controllers/PageOptionsController.js +62 -0
  122. data/app/javascript/features/RichText.jsx +34 -0
  123. data/app/javascript/hooks.js +2 -0
  124. data/app/javascript/index.js +33 -0
  125. data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +64 -63
  126. data/app/javascript/lib/copyToClipboard.js +13 -0
  127. data/app/javascript/lib/readyHandler.js +22 -0
  128. data/app/javascript/lib/request.js +36 -0
  129. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  130. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  131. data/app/mailers/admin_mailer.rb +4 -14
  132. data/app/models/attachment.rb +10 -8
  133. data/app/models/autopublisher.rb +3 -0
  134. data/app/models/category.rb +3 -1
  135. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  136. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  137. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  138. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  139. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  140. data/app/models/concerns/pages_core/page_model/images.rb +8 -2
  141. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  142. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  143. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  144. data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
  145. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  146. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  147. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  148. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  149. data/app/models/concerns/pages_core/searchable_document.rb +71 -0
  150. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  151. data/app/models/concerns/pages_core/taggable.rb +33 -12
  152. data/app/models/image.rb +14 -1
  153. data/app/models/invite.rb +3 -1
  154. data/app/models/invite_role.rb +5 -3
  155. data/app/models/page.rb +6 -3
  156. data/app/models/page_builder.rb +2 -0
  157. data/app/models/page_category.rb +3 -1
  158. data/app/models/page_exporter.rb +23 -10
  159. data/app/models/page_file.rb +3 -1
  160. data/app/models/page_image.rb +3 -3
  161. data/app/models/page_path.rb +13 -5
  162. data/app/models/password_reset_token.rb +3 -1
  163. data/app/models/role.rb +9 -6
  164. data/app/models/search_document.rb +72 -0
  165. data/app/models/tag.rb +9 -6
  166. data/app/models/tagging.rb +4 -2
  167. data/app/models/user.rb +8 -5
  168. data/app/policies/invite_policy.rb +2 -0
  169. data/app/policies/page_file_policy.rb +2 -0
  170. data/app/policies/page_image_policy.rb +2 -0
  171. data/app/policies/page_policy.rb +2 -0
  172. data/app/policies/policy.rb +2 -0
  173. data/app/policies/user_policy.rb +2 -0
  174. data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +10 -7
  175. data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +13 -11
  176. data/app/resources/admin/page_file_resource.rb +10 -0
  177. data/app/resources/admin/page_image_resource.rb +10 -0
  178. data/app/resources/export/attachment_resource.rb +10 -0
  179. data/app/resources/export/page_image_resource.rb +45 -0
  180. data/app/resources/export/page_resource.rb +42 -0
  181. data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +10 -16
  182. data/app/resources/page_resource.rb +33 -0
  183. data/app/services/pages_core/create_user_service.rb +5 -2
  184. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  185. data/app/services/pages_core/invite_service.rb +4 -2
  186. data/app/views/admin/images/show.json.jbuilder +2 -0
  187. data/app/views/admin/pages/_edit_content.html.erb +1 -1
  188. data/app/views/admin/pages/_edit_files.html.erb +1 -5
  189. data/app/views/admin/pages/_edit_images.html.erb +1 -5
  190. data/app/views/admin/pages/_edit_metadata.html.erb +1 -12
  191. data/app/views/admin/pages/_edit_options.html.erb +74 -55
  192. data/app/views/admin/pages/_form.html.erb +19 -0
  193. data/app/views/admin/pages/edit.html.erb +35 -61
  194. data/app/views/admin/pages/index.html.erb +0 -1
  195. data/app/views/admin/pages/new.html.erb +32 -32
  196. data/app/views/admin/pages/news.html.erb +1 -1
  197. data/app/views/admin/users/_access_control.html.erb +5 -1
  198. data/app/views/admin/users/login.html.erb +12 -4
  199. data/app/views/errors/500.html.erb +2 -20
  200. data/app/views/errors/_generic_help.html.erb +1 -1
  201. data/app/views/feeds/pages.rss.builder +3 -2
  202. data/app/views/layouts/admin/_header.html.erb +1 -1
  203. data/app/views/layouts/admin/_page_header.html.erb +33 -0
  204. data/app/views/layouts/admin.html.erb +23 -42
  205. data/app/views/pages_core/_google_analytics.html.erb +8 -0
  206. data/app/views/sitemaps/show.xml.builder +2 -0
  207. data/config/routes.rb +5 -6
  208. data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
  209. data/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
  210. data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
  211. data/db/migrate/20210210235200_create_search_documents.rb +74 -0
  212. data/lib/pages_core/admin_menu_item.rb +3 -0
  213. data/lib/pages_core/archive_finder.rb +12 -16
  214. data/lib/pages_core/attachment_embedder.rb +4 -6
  215. data/lib/pages_core/cache_sweeper.rb +10 -108
  216. data/lib/pages_core/configuration/base.rb +5 -0
  217. data/lib/pages_core/configuration/pages.rb +4 -2
  218. data/lib/pages_core/configuration.rb +2 -0
  219. data/lib/pages_core/digest_verifier.rb +5 -5
  220. data/lib/pages_core/engine.rb +53 -5
  221. data/lib/pages_core/extensions/string_extensions.rb +3 -1
  222. data/lib/pages_core/extensions.rb +2 -0
  223. data/lib/pages_core/page_path_constraint.rb +2 -0
  224. data/lib/pages_core/pages_plugin.rb +3 -1
  225. data/lib/pages_core/plugin.rb +4 -52
  226. data/lib/pages_core/pub_sub.rb +2 -0
  227. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  228. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  229. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  230. data/lib/pages_core/static_cache.rb +26 -0
  231. data/lib/pages_core/templates/block_configuration.rb +4 -1
  232. data/lib/pages_core/templates/configuration.rb +5 -1
  233. data/lib/pages_core/templates/configuration_handler.rb +5 -3
  234. data/lib/pages_core/templates/configuration_proxy.rb +2 -0
  235. data/lib/pages_core/templates/controller_actions.rb +2 -0
  236. data/lib/pages_core/templates/template_configuration.rb +20 -14
  237. data/lib/pages_core/templates.rb +5 -3
  238. data/lib/pages_core/version.rb +3 -1
  239. data/lib/pages_core.rb +13 -5
  240. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -7
  241. data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
  242. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  243. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
  244. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
  245. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  246. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
  247. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
  248. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
  249. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  250. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +4 -2
  251. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
  253. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
  254. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  255. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  256. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  257. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  258. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
  259. data/lib/tasks/pages/cache.rake +8 -5
  260. data/lib/tasks/pages/export.rake +3 -1
  261. data/lib/tasks/pages/page_paths.rake +2 -0
  262. data/lib/tasks/pages.rake +3 -2
  263. data/template.rb +2 -0
  264. metadata +193 -156
  265. data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
  266. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
  267. data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
  268. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
  269. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
  270. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
  271. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
  272. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -301
  273. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -171
  274. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
  275. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -63
  276. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -58
  277. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -37
  278. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
  279. data/app/assets/javascripts/pages/admin/components.jsx +0 -2
  280. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
  281. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
  282. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
  283. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
  284. data/app/assets/javascripts/pages/admin.jsx +0 -17
  285. data/app/assets/javascripts/pages/login_form.jsx +0 -21
  286. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  287. data/app/serializers/admin/page_file_serializer.rb +0 -6
  288. data/app/serializers/admin/page_image_serializer.rb +0 -6
  289. data/app/serializers/page_export_serializer.rb +0 -30
  290. data/app/serializers/page_file_export_serializer.rb +0 -4
  291. data/app/serializers/page_image_export_serializer.rb +0 -40
  292. data/app/serializers/page_serializer.rb +0 -21
  293. data/app/views/admin_mailer/error_report.html.erb +0 -70
  294. data/app/views/errors/500_critical.html.erb +0 -7
  295. data/app/views/errors/report.html.erb +0 -4
  296. data/app/views/layouts/admin/_analytics.html.erb +0 -16
  297. data/config/removed_migrations.yml +0 -60
  298. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  299. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  300. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  301. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  302. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  303. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  304. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  305. data/db/migrate/20140203183900_create_roles.rb +0 -66
  306. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  307. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  308. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  309. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  310. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  311. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  312. data/db/migrate/20141007173000_create_invites.rb +0 -16
  313. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  314. data/db/migrate/20150401131300_localize_images.rb +0 -38
  315. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  316. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  317. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  318. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  319. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  320. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  321. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  322. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  323. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  324. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  325. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  326. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
  327. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  328. data/lib/tasks/pages/update.rake +0 -17
  329. data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
  330. data/vendor/assets/javascripts/reflux.min.js +0 -1
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Templates
3
5
  class TemplateConfiguration
@@ -5,8 +7,11 @@ module PagesCore
5
7
 
6
8
  class << self
7
9
  def all_blocks
8
- (all_templates.map { |t| configured_block_names(t) } +
9
- all_templates.map { |t| enabled_block_names(t) }).flatten.compact.uniq
10
+ (config.get(:default, :blocks).keys +
11
+ all_templates.map { |t| configured_block_names(t) } +
12
+ all_templates.map do |t|
13
+ enabled_block_names(t)
14
+ end).flatten.compact.uniq
10
15
  end
11
16
 
12
17
  def all_templates
@@ -93,18 +98,19 @@ module PagesCore
93
98
 
94
99
  def default_block_options(block_name)
95
100
  {
96
- title: block_name.to_s.humanize,
101
+ title: block_name.to_s.humanize,
97
102
  optional: true,
98
- size: :small
103
+ size: :small
99
104
  }
100
105
  end
101
106
  end
102
107
 
103
108
  class << self
104
109
  def configure(options = {}, &_block)
105
- if options[:reset] == :defaults
110
+ case options[:reset]
111
+ when :defaults
106
112
  load_default_configuration
107
- elsif options[:reset] == true
113
+ when true
108
114
  @configuration = PagesCore::Templates::Configuration.new
109
115
  end
110
116
  yield configuration if block_given?
@@ -148,26 +154,26 @@ module PagesCore
148
154
 
149
155
  def default_blocks
150
156
  {
151
- name: { size: :field, class: "page_title" },
152
- body: { size: :large },
157
+ name: { size: :field, class: "page_title" },
158
+ body: { size: :large },
153
159
  headline: { size: :field },
154
- excerpt: {},
155
- boxout: {}
160
+ excerpt: {},
161
+ boxout: {}
156
162
  }.merge(default_meta_blocks)
157
163
  end
158
164
 
159
165
  def default_meta_blocks
160
166
  {
161
- meta_title: { size: :field },
162
- meta_description: { size: :small },
163
- open_graph_title: { size: :field },
167
+ meta_title: { size: :field },
168
+ meta_description: { size: :small },
169
+ open_graph_title: { size: :field },
164
170
  open_graph_description: { size: :small }
165
171
  }
166
172
  end
167
173
 
168
174
  def default_block_configuration(default)
169
175
  default.blocks do |block|
170
- default_blocks.keys.each do |name|
176
+ default_blocks.each_key do |name|
171
177
  block.send(
172
178
  name,
173
179
  template_block_localization("#{name}.name"),
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pages_core/templates/block_configuration"
2
4
  require "pages_core/templates/configuration_proxy"
3
5
  require "pages_core/templates/configuration_handler"
@@ -16,8 +18,8 @@ module PagesCore
16
18
 
17
19
  def template_paths
18
20
  [
19
- PagesCore.plugin_root.join("app", "views", "pages", "templates"),
20
- Rails.root.join("app", "views", "pages", "templates")
21
+ PagesCore.plugin_root.join("app/views/pages/templates"),
22
+ Rails.root.join("app/views/pages/templates")
21
23
  ]
22
24
  end
23
25
 
@@ -28,7 +30,7 @@ module PagesCore
28
30
  .uniq
29
31
  .compact
30
32
  .sort
31
- .map { |f| f.gsub(/\.[\w\.]+$/, "") }
33
+ .map { |f| f.gsub(/\.[\w.]+$/, "") }
32
34
  end
33
35
 
34
36
  def template_files_in_dir(dir)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
- VERSION = "3.6.0".freeze unless PagesCore.const_defined?("VERSION")
4
+ VERSION = "3.8.0" unless PagesCore.const_defined?("VERSION")
3
5
  end
data/lib/pages_core.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Ruby Standard Library
2
4
  require "digest/sha1"
3
5
  require "fileutils"
@@ -15,25 +17,31 @@ require "action_mailer"
15
17
 
16
18
  # Gems
17
19
  require "actionpack/page_caching"
18
- require "active_model_serializers"
19
20
  require "acts_as_list"
21
+ require "alba"
20
22
  require "bcrypt"
21
- require "coffee-script"
22
23
  require "country_select"
23
- require "delayed_job"
24
+ require "delayed_job_active_record"
24
25
  require "dis"
25
26
  require "dynamic_image"
27
+ require "healthcheck"
26
28
  require "localizable_model"
29
+ require "lograge"
30
+ require "nokogiri"
27
31
  require "json"
32
+ require "pg_search"
33
+ require "progress_bar"
28
34
  require "rails_i18n"
29
35
  require "RedCloth"
30
36
  require "sass-rails"
37
+ require "typhoeus"
31
38
  require "will_paginate"
32
39
 
40
+ # Must be loaded so that PagesCore::LinkRender can resolve the constant.
41
+ require "will_paginate/view_helpers/action_view"
42
+
33
43
  # Assets
34
44
  require "font-awesome-rails"
35
- require "jquery-ui-rails"
36
- require "jquery/rails/engine"
37
45
  require "react-rails"
38
46
 
39
47
  # Pages
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Generators
3
5
  class FrontendGenerator < Rails::Generators::Base
@@ -49,13 +51,6 @@ module PagesCore
49
51
  File.join("app/assets/stylesheets/components/base.scss")
50
52
  )
51
53
  end
52
-
53
- def create_application_js
54
- template(
55
- "application.js.erb",
56
- File.join("app/assets/javascripts/application.js")
57
- )
58
- end
59
54
  end
60
55
  end
61
56
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Generators
3
5
  class InstallGenerator < Rails::Generators::Base
@@ -57,7 +59,7 @@ module PagesCore
57
59
 
58
60
  def create_delayed_job_script
59
61
  template "delayed_job", File.join("script/delayed_job")
60
- File.chmod(0o755, Rails.root.join("script", "delayed_job"))
62
+ File.chmod(0o755, Rails.root.join("script/delayed_job"))
61
63
  end
62
64
 
63
65
  def create_delayed_job_initializer
@@ -71,12 +73,6 @@ module PagesCore
71
73
  File.join("config/initializers/pages.rb"))
72
74
  end
73
75
 
74
- def create_cache_sweeper_initializer
75
- read_configuration!
76
- template("cache_sweeper_initializer.rb",
77
- File.join("config/initializers/cache_sweeper.rb"))
78
- end
79
-
80
76
  def create_template_initializer
81
77
  read_configuration!
82
78
  template("page_templates_initializer.rb",
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveJob::Base.queue_adapter = :delayed_job
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ApplicationController < PagesCore::BaseController
2
4
  # Put frontend specific code in frontend_controller.rb
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApplicationHelper
2
4
  include PagesCore::ApplicationHelper
3
5
  end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require File.expand_path(
4
5
  File.join(File.dirname(__FILE__), "..", "config", "environment")
@@ -1 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Delayed::Worker.backend = :active_record
4
+
5
+ if Object.const_defined?("Postmark")
6
+ class InvalidRecipientsPlugin < Delayed::Plugin
7
+ callbacks do |lifecycle|
8
+ lifecycle.around(:invoke_job) do |job, *args, &block|
9
+ # Forward the call to the next callback in the callback chain
10
+ block.call(job, *args)
11
+ rescue Postmark::InactiveRecipientError => e
12
+ Rails.logger.error "#{e.class}: #{e.message}"
13
+ end
14
+ end
15
+ end
16
+
17
+ Delayed::Worker.plugins << InvalidRecipientsPlugin
18
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Abstract controller for all frontend controllers.
2
4
  class FrontendController < PagesCore::FrontendController
3
5
  layout "application"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FrontendHelper
2
4
  include PagesCore::FrontendHelper
3
5
  end
@@ -19,7 +19,18 @@
19
19
 
20
20
  # Ignore all logfiles and tempfiles.
21
21
  /log/*.log
22
- /log/error_reports
23
22
  /log/*.sphinx.pid
24
23
  /tmp
25
24
  /public/dynamic_images
25
+
26
+ # Ignore uploaded files in development
27
+ /storage/*
28
+
29
+ /node_modules
30
+ /yarn-error.log
31
+
32
+ .byebug_history
33
+ /coverage
34
+
35
+ # Ignore master key for decrypting credentials and more.
36
+ /config/master.key
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Be sure to restart your web server when you modify this file.
2
4
 
3
5
  # Templates configuration
@@ -10,7 +12,7 @@ PagesCore::Templates.configure do |config|
10
12
  "Headline",
11
13
  size: :field,
12
14
  description: "The main statement, usually largest and boldest, " \
13
- "describing the main story."
15
+ "describing the main story."
14
16
  )
15
17
  block.excerpt(
16
18
  "Standfirst",
@@ -20,7 +22,7 @@ PagesCore::Templates.configure do |config|
20
22
  block.boxout(
21
23
  "Boxout",
22
24
  description: "Part of the page, usually background info or facts " \
23
- "related to the article."
25
+ "related to the article."
24
26
  )
25
27
  end
26
28
 
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PagesController < PagesCore::Frontend::PagesController
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Be sure to restart your web server when you modify this file.
2
4
 
3
5
  PagesCore.configure do |config|
@@ -11,12 +13,6 @@ PagesCore.configure do |config|
11
13
  # Locales and names
12
14
  # config.locales(nb: 'Norwegian', en: 'English')
13
15
 
14
- # Page cache (default: enabled)
15
- # config.page_cache :enabled
16
-
17
- # Domain based page cache (default: disabled)
18
- # config.domain_based_cache :disabled
19
-
20
16
  # Fulltext in RSS feeds (default: disabled)
21
17
  # config.rss_fulltext :disabled
22
18
 
@@ -1,34 +1,38 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Generators
3
5
  class RspecGenerator < Rails::Generators::Base
4
6
  desc "RSpec setup"
5
7
  source_root File.expand_path("templates", __dir__)
6
8
 
7
- def setup_development_gems
8
- gem_group :development do
9
- gem "spring-commands-rspec"
10
- end
11
- end
12
-
13
9
  def setup_test_gems
14
- gem_group :test, :development do
15
- gem "rspec-rails"
16
- gem "shoulda-matchers", require: false
17
- gem "json_spec"
10
+ gem_group :development, :test do
18
11
  gem "capybara"
19
- gem "timecop"
20
12
  gem "factory_bot_rails"
13
+ gem "fuubar"
14
+ gem "json_spec"
15
+ gem "rspec-rails"
16
+ gem "rspec_junit_formatter"
17
+ gem "selenium-webdriver"
18
+ gem "shoulda-matchers", require: false
19
+ gem "simplecov", require: false
21
20
  end
22
21
  end
23
22
 
24
23
  def setup_rspec
25
- create_file File.join(".rspec"), "--colour"
24
+ create_file File.join(".rspec"), "--format Fuubar\n--colour\n" \
25
+ "--require spec_helper"
26
26
  create_file File.join("spec/controllers/.keep")
27
- create_file File.join("spec/factories/.keep")
27
+ create_file File.join("spec/mailers/preview/.keep")
28
28
  create_file File.join("spec/models/.keep")
29
+ create_file File.join("spec/system/.keep")
29
30
  template "spec_helper.rb", File.join("spec/spec_helper.rb")
30
- template "factories.rb", File.join("spec/support/factories.rb")
31
+ template "rails_helper.rb", File.join("spec/rails_helper.rb")
32
+ template "factories.rb", File.join("spec/factories.rb")
31
33
  template "mailer_macros.rb", File.join("spec/support/mailer_macros.rb")
34
+ template("page_templates_spec.rb",
35
+ File.join("spec/system/page_templates_spec.rb"))
32
36
  end
33
37
  end
34
38
  end
@@ -1,9 +1,4 @@
1
- FactoryBot.define do
2
- sequence :email do |n|
3
- "person#{n}@example.com"
4
- end
1
+ # frozen_string_literal: true
5
2
 
6
- sequence :sha1hash do |n|
7
- Digest::SHA1.hexdigest(n.to_s)
8
- end
9
- end
3
+ # FactoryBot.define do
4
+ # end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MailerMacros
2
4
  def last_email
3
5
  ActionMailer::Base.deliveries.last
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ RSpec.describe "Page templates", type: :system do
6
+ subject { page }
7
+
8
+ let(:page_model) do
9
+ create(:page,
10
+ template: template,
11
+ headline: "My headline",
12
+ body: "My body",
13
+ excerpt: "My excerpt")
14
+ end
15
+ let(:template) { "index" }
16
+ let(:locale) { I18n.default_locale }
17
+
18
+ before do
19
+ visit page_path(locale, page_model)
20
+ end
21
+
22
+ describe "default template" do
23
+ it { is_expected.to have_text(page_model.headline) }
24
+ it { is_expected.to have_text(page_model.body) }
25
+ end
26
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
4
+ ENV["RAILS_ENV"] ||= "test"
5
+
6
+ require "simplecov"
7
+ SimpleCov.start "rails" if ARGV.grep(/spec\.rb/).empty?
8
+
9
+ require File.expand_path("../config/environment", __dir__)
10
+
11
+ # Prevent database truncation if the environment is production
12
+ if Rails.env.production?
13
+ abort("The Rails environment is running in production mode!")
14
+ end
15
+ require "spec_helper"
16
+ require "rspec/rails"
17
+ # Add additional requires below this line. Rails is not loaded until this point!
18
+
19
+ require "shoulda-matchers"
20
+
21
+ # Requires supporting ruby files with custom matchers and macros, etc, in
22
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
23
+ # run as spec files by default. This means that files in spec/support that end
24
+ # in _spec.rb will both be required and run as specs, causing the specs to be
25
+ # run twice. It is recommended that you do not name files matching this glob to
26
+ # end with _spec.rb. You can configure this pattern with the --pattern
27
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
28
+ #
29
+ # The following line is provided for convenience purposes. It has the downside
30
+ # of increasing the boot-up time by auto-requiring all files in the support
31
+ # directory. Alternatively, in the individual `*_spec.rb` files, manually
32
+ # require only the support files necessary.
33
+ #
34
+ Dir[Rails.root.join("spec/support/**/*.rb")].sort.each do |f|
35
+ require f
36
+ end
37
+
38
+ # Checks for pending migration and applies them before tests are run.
39
+ # If you are not using ActiveRecord, you can remove this line.
40
+ ActiveRecord::Migration.maintain_test_schema!
41
+
42
+ RSpec.configure do |config|
43
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
44
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
45
+
46
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
47
+ # examples within a transaction, remove the following line or assign false
48
+ # instead of true.
49
+ config.use_transactional_fixtures = true
50
+
51
+ # RSpec Rails can automatically mix in different behaviours to your tests
52
+ # based on their file location, for example enabling you to call `get` and
53
+ # `post` in specs under `spec/controllers`.
54
+ #
55
+ # You can disable this behaviour by removing the line below, and instead
56
+ # explicitly tag your specs with their type, e.g.:
57
+ #
58
+ # RSpec.describe UsersController, :type => :controller do
59
+ # # ...
60
+ # end
61
+ #
62
+ # The different available types are documented in the features, such as in
63
+ # https://relishapp.com/rspec/rspec-rails/docs
64
+ config.infer_spec_type_from_file_location!
65
+
66
+ # Filter lines from Rails gems in backtraces.
67
+ config.filter_rails_from_backtrace!
68
+ # arbitrary gems may also be filtered via:
69
+ # config.filter_gems_from_backtrace("gem name")
70
+
71
+ config.include ActiveJob::TestHelper
72
+ config.include MailerMacros
73
+
74
+ # Use FactoryBot shorthand
75
+ config.include FactoryBot::Syntax::Methods
76
+
77
+ config.before(:each, type: :system) do
78
+ driven_by :rack_test
79
+ end
80
+
81
+ config.before(:each, js: true) do
82
+ driven_by :selenium_chrome_headless
83
+ end
84
+ end
85
+
86
+ Shoulda::Matchers.configure do |config|
87
+ config.integrate do |with|
88
+ with.test_framework :rspec
89
+ with.library :rails
90
+ end
91
+ end
@@ -1,42 +1,95 @@
1
- ENV["RAILS_ENV"] = "test"
1
+ # frozen_string_literal: true
2
2
 
3
- require "rubygems"
4
- require File.expand_path("../config/environment", __dir__)
5
- require "rspec/rails"
6
- require "rspec/autorun"
7
- require "shoulda-matchers"
3
+ # This file was generated by the `rails generate rspec:install`
4
+ # command. Conventionally, all specs live under a `spec` directory,
5
+ # which RSpec adds to the `$LOAD_PATH`. The generated `.rspec` file
6
+ # contains `--require spec_helper` which will cause this file to
7
+ # always be loaded, without a need to explicitly require it in any
8
+ # files.
9
+ #
10
+ # Given that it is always loaded, you are encouraged to keep this file as
11
+ # light-weight as possible. Requiring heavyweight dependencies from this file
12
+ # will add to the boot time of your test suite on EVERY test run, even for an
13
+ # individual file that may not need all of that loaded. Instead, consider making
14
+ # a separate helper file that requires the additional dependencies and performs
15
+ # the additional setup, and require it from the spec files that actually need
16
+ # it.
17
+ #
18
+ # The `.rspec` file also contains a few flags that are not defaults but that
19
+ # users commonly want.
20
+ #
21
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
22
+ RSpec.configure do |config|
23
+ # rspec-expectations config goes here. You can use an alternate
24
+ # assertion/expectation library such as wrong or the stdlib/minitest
25
+ # assertions if you prefer.
26
+ config.expect_with :rspec do |expectations|
27
+ # This option will default to `true` in RSpec 4. It makes the `description`
28
+ # and `failure_message` of custom matchers include text for helper methods
29
+ # defined using `chain`, e.g.:
30
+ # be_bigger_than(2).and_smaller_than(4).description
31
+ # # => "be bigger than 2 and smaller than 4"
32
+ # ...rather than:
33
+ # # => "be bigger than 2"
34
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
35
+ end
8
36
 
9
- # Requires supporting ruby files with custom matchers and macros, etc,
10
- # in spec/support/ and its subdirectories.
11
- Dir[Rails.root.join("spec", "support", "**", "*.rb")].each { |f| load f }
37
+ # rspec-mocks config goes here. You can use an alternate test double
38
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
39
+ config.mock_with :rspec do |mocks|
40
+ # Prevents you from mocking or stubbing a method that does not exist on
41
+ # a real object. This is generally recommended, and will default to
42
+ # `true` in RSpec 4.
43
+ mocks.verify_partial_doubles = true
44
+ end
12
45
 
13
- RSpec.configure do |config|
14
- # == Mock Framework
46
+ # The settings below are suggested to provide a good initial experience
47
+ # with RSpec, but feel free to customize to your heart's content.
48
+ # # These two settings work together to allow you to limit a spec run
49
+ # # to individual examples or groups you care about by tagging them with
50
+ # # `:focus` metadata. When nothing is tagged with `:focus`, all examples
51
+ # # get run.
52
+ # config.filter_run :focus
53
+ # config.run_all_when_everything_filtered = true
15
54
  #
16
- # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
55
+ # # Allows RSpec to persist some state between runs in order to support
56
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
57
+ # # you configure your source control system to ignore this file.
58
+ # config.example_status_persistence_file_path = "spec/examples.txt"
17
59
  #
18
- # config.mock_with :mocha
19
- # config.mock_with :flexmock
20
- # config.mock_with :rr
21
- config.mock_with :rspec
22
-
23
- # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
24
- # config.fixture_path = "#{::Rails.root}/spec/fixtures"
25
-
26
- # Use FactoryBot shorthand
27
- config.include FactoryBot::Syntax::Methods
28
-
29
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
30
- # examples within a transaction, remove the following line or assign false
31
- # instead of true.
32
- config.use_transactional_fixtures = true
33
-
34
- # If true, the base class of anonymous controllers will be inferred
35
- # automatically. This will be the default behavior in future versions of
36
- # rspec-rails.
37
- config.infer_base_class_for_anonymous_controllers = false
38
-
39
- config.include JsonSpec::Helpers
40
- config.include MailerMacros
41
- config.before(:each) { reset_email }
60
+ # # Limits the available syntax to the non-monkey patched syntax that is
61
+ # # recommended. For more details, see:
62
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
63
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-\
64
+ # # expectation-syntax/
65
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-\
66
+ # # monkey-patching-mode
67
+ # config.disable_monkey_patching!
68
+ #
69
+ # # Many RSpec users commonly either run the entire suite or an individual
70
+ # # file, and it's useful to allow more verbose output when running an
71
+ # # individual spec file.
72
+ # if config.files_to_run.one?
73
+ # # Use the documentation formatter for detailed output,
74
+ # # unless a formatter has already been configured
75
+ # # (e.g. via a command-line flag).
76
+ # config.default_formatter = 'doc'
77
+ # end
78
+ #
79
+ # # Print the 10 slowest examples and example groups at the
80
+ # # end of the spec run, to help surface which specs are running
81
+ # # particularly slow.
82
+ # config.profile_examples = 10
83
+ #
84
+ # # Run specs in random order to surface order dependencies. If you find an
85
+ # # order dependency and want to debug it, you can fix the order by
86
+ # # providing the seed, which is printed after each run.
87
+ # # --seed 1234
88
+ # config.order = :random
89
+ #
90
+ # # Seed global randomization in this process using the `--seed` CLI option.
91
+ # # Setting this allows you to use `--seed` to deterministically reproduce
92
+ # # test failures related to randomization by passing the same `--seed`
93
+ # # value as the one that triggered the failure.
94
+ # Kernel.srand config.seed
42
95
  end