pages_core 3.4.3 → 3.7.0

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 (375) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +74 -15
  3. data/Rakefile +2 -0
  4. data/app/assets/javascripts/pages/admin.jsx +17 -0
  5. data/app/assets/javascripts/pages/admin/components.jsx +2 -0
  6. data/app/assets/javascripts/pages/admin/components/attachment.jsx +130 -0
  7. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +131 -0
  8. data/app/assets/javascripts/pages/admin/components/attachments.jsx +211 -0
  9. data/app/assets/javascripts/pages/admin/components/date_range_select.jsx +174 -0
  10. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +174 -0
  11. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +57 -0
  12. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +44 -0
  13. data/app/assets/javascripts/pages/admin/components/focal_point.jsx +82 -0
  14. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +124 -0
  15. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +496 -0
  16. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +306 -0
  17. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +176 -0
  18. data/app/assets/javascripts/pages/admin/components/modal.jsx +48 -0
  19. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +20 -0
  20. data/app/assets/javascripts/pages/admin/components/page_dates.jsx +58 -0
  21. data/app/assets/javascripts/pages/admin/components/page_files.jsx +14 -0
  22. data/app/assets/javascripts/pages/admin/components/page_images.jsx +16 -0
  23. data/app/assets/javascripts/pages/admin/components/page_tree.jsx +300 -0
  24. data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +396 -0
  25. data/app/assets/javascripts/pages/admin/components/page_tree_store.jsx +203 -0
  26. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +64 -0
  27. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +91 -0
  28. data/app/assets/javascripts/pages/admin/components/toast.jsx +34 -0
  29. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +52 -0
  30. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +72 -0
  31. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +97 -0
  32. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +14 -0
  33. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +160 -0
  34. data/app/assets/javascripts/pages/admin/lib/tree.jsx +294 -0
  35. data/app/assets/javascripts/pages/login_form.jsx +21 -0
  36. data/app/assets/stylesheets/pages/admin.scss +144 -0
  37. data/app/assets/stylesheets/pages/admin/components/archive.scss +6 -0
  38. data/app/assets/stylesheets/pages/admin/components/attachments.scss +130 -0
  39. data/app/assets/stylesheets/pages/admin/components/buttons.scss +23 -0
  40. data/app/assets/stylesheets/pages/admin/components/forms.scss +169 -0
  41. data/app/assets/stylesheets/pages/admin/components/header.scss +157 -0
  42. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +195 -0
  43. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +181 -0
  44. data/app/assets/stylesheets/pages/admin/components/image_uploader.scss +53 -0
  45. data/app/assets/stylesheets/pages/admin/components/layout.scss +44 -0
  46. data/app/assets/stylesheets/pages/admin/components/links.scss +43 -0
  47. data/app/assets/stylesheets/pages/admin/components/list_table.scss +61 -0
  48. data/app/assets/stylesheets/pages/admin/{login.css.scss.erb → components/login.scss} +3 -9
  49. data/app/assets/stylesheets/pages/admin/components/modal.scss +106 -0
  50. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +179 -0
  51. data/app/assets/stylesheets/pages/admin/components/pagination.scss +49 -0
  52. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +28 -0
  53. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +59 -0
  54. data/app/assets/stylesheets/pages/admin/components/textarea.scss +6 -0
  55. data/app/assets/stylesheets/pages/admin/components/toast.scss +51 -0
  56. data/app/assets/stylesheets/pages/admin/components/toolbar.scss +108 -0
  57. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +184 -0
  58. data/app/assets/stylesheets/pages/admin/controllers/{users.css.erb → users.scss} +2 -2
  59. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +21 -0
  60. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +7 -0
  61. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +7 -0
  62. data/app/assets/stylesheets/pages/admin/vars.scss +30 -0
  63. data/app/assets/stylesheets/pages/errors.css +2 -0
  64. data/app/controller_dummies/admin/admin_controller.rb +1 -1
  65. data/app/controller_dummies/application_controller.rb +3 -3
  66. data/app/controller_dummies/attachments_controller.rb +4 -0
  67. data/app/controller_dummies/frontend_controller.rb +1 -1
  68. data/app/controller_dummies/images_controller.rb +1 -1
  69. data/app/controller_dummies/page_files_controller.rb +1 -1
  70. data/app/controller_dummies/pages_controller.rb +1 -1
  71. data/app/controller_dummies/sitemaps_controller.rb +1 -1
  72. data/app/controllers/admin/attachments_controller.rb +50 -0
  73. data/app/controllers/admin/categories_controller.rb +3 -4
  74. data/app/controllers/admin/images_controller.rb +29 -18
  75. data/app/controllers/admin/invites_controller.rb +20 -23
  76. data/app/controllers/admin/pages_controller.rb +59 -111
  77. data/app/controllers/admin/password_resets_controller.rb +23 -21
  78. data/app/controllers/admin/users_controller.rb +23 -23
  79. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +67 -0
  80. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  81. data/app/controllers/concerns/pages_core/authentication.rb +4 -3
  82. data/app/controllers/concerns/pages_core/error_renderer.rb +36 -0
  83. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  84. data/app/controllers/concerns/pages_core/policies_helper.rb +16 -13
  85. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +44 -0
  86. data/app/controllers/concerns/pages_core/process_titler.rb +4 -4
  87. data/app/controllers/concerns/pages_core/rss_controller.rb +25 -0
  88. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  89. data/app/controllers/errors_controller.rb +20 -30
  90. data/app/controllers/pages_core/admin_controller.rb +21 -70
  91. data/app/controllers/pages_core/attachments_controller.rb +40 -0
  92. data/app/controllers/pages_core/{application_controller.rb → base_controller.rb} +13 -8
  93. data/app/controllers/pages_core/frontend/page_files_controller.rb +7 -24
  94. data/app/controllers/pages_core/frontend/pages_controller.rb +39 -228
  95. data/app/controllers/pages_core/frontend_controller.rb +10 -3
  96. data/app/controllers/pages_core/images_controller.rb +2 -2
  97. data/app/controllers/pages_core/sitemaps_controller.rb +15 -10
  98. data/app/controllers/sessions_controller.rb +4 -14
  99. data/app/formatters/pages_core/html_formatter.rb +52 -48
  100. data/app/formatters/pages_core/image_embedder.rb +79 -0
  101. data/app/formatters/pages_core/link_renderer.rb +17 -0
  102. data/app/helpers/admin/admin_helper.rb +1 -1
  103. data/app/helpers/admin/menu_helper.rb +19 -16
  104. data/app/helpers/admin/pages_helper.rb +27 -30
  105. data/app/helpers/application_helper.rb +1 -1
  106. data/app/helpers/frontend_helper.rb +1 -1
  107. data/app/helpers/pages_core/admin/admin_helper.rb +44 -71
  108. data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
  109. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  110. data/app/helpers/pages_core/admin/form_builder.rb +44 -0
  111. data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
  112. data/app/helpers/pages_core/admin/labelled_field_helper.rb +19 -19
  113. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  114. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  115. data/app/helpers/pages_core/admin/tag_editor_helper.rb +16 -14
  116. data/app/helpers/pages_core/application_helper.rb +15 -26
  117. data/app/helpers/pages_core/attachments_helper.rb +40 -0
  118. data/app/helpers/pages_core/form_builder.rb +71 -134
  119. data/app/helpers/pages_core/frontend_helper.rb +2 -8
  120. data/app/helpers/pages_core/head_tags_helper.rb +36 -169
  121. data/app/helpers/pages_core/images_helper.rb +5 -4
  122. data/app/helpers/pages_core/meta_tags_helper.rb +96 -0
  123. data/app/helpers/pages_core/open_graph_tags_helper.rb +51 -0
  124. data/app/helpers/pages_core/page_path_helper.rb +66 -0
  125. data/app/jobs/pages_core/autopublish_job.rb +2 -2
  126. data/app/jobs/pages_core/sweep_cache_job.rb +3 -3
  127. data/app/mailers/admin_mailer.rb +8 -31
  128. data/app/models/attachment.rb +78 -0
  129. data/app/models/autopublisher.rb +7 -4
  130. data/app/models/category.rb +10 -11
  131. data/app/models/concerns/pages_core/has_roles.rb +5 -4
  132. data/app/models/concerns/pages_core/humanizable_param.rb +11 -8
  133. data/app/models/concerns/pages_core/page_model/attachments.rb +41 -0
  134. data/app/models/concerns/pages_core/page_model/autopublishable.rb +25 -0
  135. data/app/models/concerns/pages_core/page_model/dated_page.rb +59 -0
  136. data/app/models/concerns/pages_core/page_model/images.rb +51 -0
  137. data/app/models/concerns/pages_core/page_model/localizable.rb +38 -0
  138. data/app/models/concerns/pages_core/page_model/pathable.rb +114 -0
  139. data/app/models/concerns/pages_core/page_model/redirectable.rb +36 -0
  140. data/app/models/concerns/pages_core/page_model/sortable.rb +53 -0
  141. data/app/models/concerns/pages_core/page_model/status.rb +50 -0
  142. data/app/models/concerns/pages_core/page_model/templateable.rb +85 -0
  143. data/app/models/concerns/pages_core/page_model/tree.rb +134 -0
  144. data/app/models/concerns/pages_core/sweepable.rb +3 -3
  145. data/app/models/concerns/pages_core/taggable.rb +11 -4
  146. data/app/models/image.rb +15 -1
  147. data/app/models/invite.rb +3 -11
  148. data/app/models/invite_role.rb +5 -3
  149. data/app/models/page.rb +49 -234
  150. data/app/models/page_builder.rb +5 -7
  151. data/app/models/page_category.rb +7 -0
  152. data/app/models/page_exporter.rb +100 -0
  153. data/app/models/page_file.rb +26 -50
  154. data/app/models/page_image.rb +7 -40
  155. data/app/models/page_path.rb +52 -0
  156. data/app/models/password_reset_token.rb +7 -9
  157. data/app/models/role.rb +23 -7
  158. data/app/models/tag.rb +28 -19
  159. data/app/models/tagging.rb +6 -5
  160. data/app/models/user.rb +38 -32
  161. data/app/policies/invite_policy.rb +2 -0
  162. data/app/policies/page_file_policy.rb +15 -17
  163. data/app/policies/page_image_policy.rb +15 -17
  164. data/app/policies/page_policy.rb +29 -23
  165. data/app/policies/policy.rb +4 -8
  166. data/app/policies/user_policy.rb +34 -32
  167. data/app/serializers/admin/attachment_serializer.rb +31 -0
  168. data/app/serializers/admin/image_serializer.rb +55 -6
  169. data/app/serializers/admin/page_file_serializer.rb +8 -0
  170. data/app/serializers/admin/page_image_serializer.rb +3 -1
  171. data/app/serializers/page_export_serializer.rb +32 -0
  172. data/app/serializers/page_file_export_serializer.rb +6 -0
  173. data/app/serializers/page_image_export_serializer.rb +42 -0
  174. data/app/serializers/page_image_serializer.rb +4 -0
  175. data/app/serializers/page_serializer.rb +2 -0
  176. data/app/services/pages_core/create_user_service.rb +39 -0
  177. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  178. data/app/services/pages_core/invite_service.rb +43 -0
  179. data/app/views/admin/images/show.json.jbuilder +8 -0
  180. data/app/views/admin/invites/new.html.erb +2 -1
  181. data/app/views/admin/invites/show.html.erb +3 -4
  182. data/app/views/admin/pages/_edit_content.html.erb +11 -2
  183. data/app/views/admin/pages/_edit_files.html.erb +8 -0
  184. data/app/views/admin/pages/_edit_images.html.erb +8 -84
  185. data/app/views/admin/pages/_edit_metadata.html.erb +23 -12
  186. data/app/views/admin/pages/_edit_options.html.erb +25 -25
  187. data/app/views/admin/pages/_list_item.html.erb +50 -0
  188. data/app/views/admin/pages/deleted.html.erb +42 -0
  189. data/app/views/admin/pages/edit.html.erb +11 -91
  190. data/app/views/admin/pages/index.html.erb +10 -54
  191. data/app/views/admin/pages/new.html.erb +5 -4
  192. data/app/views/admin/pages/news.html.erb +61 -47
  193. data/app/views/admin/password_resets/show.html.erb +6 -9
  194. data/app/views/admin/users/_access_control.html.erb +4 -1
  195. data/app/views/admin/users/_list.html.erb +12 -7
  196. data/app/views/admin/users/edit.html.erb +5 -11
  197. data/app/views/admin/users/login.html.erb +58 -15
  198. data/app/views/admin/users/show.html.erb +1 -1
  199. data/app/views/admin_mailer/invite.text.erb +1 -1
  200. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  201. data/app/views/errors/401.html.erb +6 -0
  202. data/app/views/errors/403.html.erb +1 -1
  203. data/app/views/errors/422.html.erb +7 -0
  204. data/app/views/errors/500.html.erb +2 -15
  205. data/app/views/errors/_generic_help.html.erb +1 -1
  206. data/app/views/feeds/pages.rss.builder +2 -2
  207. data/app/views/layouts/admin.html.erb +83 -79
  208. data/app/views/layouts/admin/_analytics.html.erb +1 -3
  209. data/app/views/layouts/admin/_header.html.erb +4 -4
  210. data/app/views/layouts/errors.html.erb +3 -7
  211. data/app/views/sitemaps/show.xml.builder +2 -0
  212. data/config/locales/en.yml +50 -1
  213. data/config/routes.rb +57 -58
  214. data/db/migrate/20111219033112_create_pages_tables.rb +191 -276
  215. data/lib/pages_core.rb +34 -32
  216. data/lib/pages_core/admin_menu_item.rb +18 -4
  217. data/lib/pages_core/archive_finder.rb +49 -20
  218. data/lib/pages_core/attachment_embedder.rb +36 -0
  219. data/lib/pages_core/cache_sweeper.rb +9 -89
  220. data/lib/pages_core/configuration.rb +3 -3
  221. data/lib/pages_core/configuration/base.rb +8 -9
  222. data/lib/pages_core/configuration/pages.rb +8 -9
  223. data/lib/pages_core/digest_verifier.rb +70 -0
  224. data/lib/pages_core/engine.rb +72 -5
  225. data/lib/pages_core/extensions.rb +2 -3
  226. data/lib/pages_core/extensions/string_extensions.rb +2 -2
  227. data/lib/pages_core/page_path_constraint.rb +23 -0
  228. data/lib/pages_core/pages_plugin.rb +13 -2
  229. data/lib/pages_core/plugin.rb +8 -52
  230. data/lib/pages_core/pub_sub.rb +38 -0
  231. data/lib/pages_core/static_cache.rb +26 -0
  232. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  233. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  234. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  235. data/lib/pages_core/templates.rb +10 -10
  236. data/lib/pages_core/templates/block_configuration.rb +4 -3
  237. data/lib/pages_core/templates/configuration.rb +115 -34
  238. data/lib/pages_core/templates/configuration_handler.rb +9 -5
  239. data/lib/pages_core/templates/configuration_proxy.rb +12 -12
  240. data/lib/pages_core/templates/controller_actions.rb +1 -1
  241. data/lib/pages_core/templates/template_configuration.rb +102 -98
  242. data/lib/pages_core/version.rb +2 -2
  243. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +11 -16
  244. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +1 -2
  245. data/lib/rails/generators/pages_core/frontend/templates/{application.css.scss.erb → application.scss.erb} +0 -0
  246. data/lib/rails/generators/pages_core/frontend/templates/{base.css.scss.erb → base.scss.erb} +0 -0
  247. data/lib/rails/generators/pages_core/frontend/templates/{breakpoints.css.scss.erb → breakpoints.scss.erb} +0 -0
  248. data/lib/rails/generators/pages_core/frontend/templates/clearfix.scss.erb +7 -0
  249. data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +0 -3
  250. data/lib/rails/generators/pages_core/install/install_generator.rb +25 -66
  251. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -2
  253. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +1 -1
  254. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  255. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +16 -1
  256. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +1 -1
  257. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +1 -1
  258. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  259. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +9 -15
  260. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +1 -1
  261. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +5 -23
  262. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +19 -14
  263. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  264. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  265. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  266. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  267. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -45
  268. data/lib/tasks/pages.rake +2 -63
  269. data/lib/tasks/pages/cache.rake +12 -5
  270. data/lib/tasks/pages/export.rake +11 -0
  271. data/lib/tasks/pages/page_paths.rake +12 -0
  272. data/template.rb +5 -3
  273. data/vendor/assets/javascripts/ReactCrop.min.js +1 -0
  274. data/vendor/assets/javascripts/reflux.min.js +1 -0
  275. data/vendor/assets/stylesheets/ReactCrop.css +167 -0
  276. metadata +356 -192
  277. data/app/assets/images/pages/admin/description-bg.gif +0 -0
  278. data/app/assets/images/pages/admin/drag-handle.gif +0 -0
  279. data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
  280. data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
  281. data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
  282. data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
  283. data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
  284. data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
  285. data/app/assets/javascripts/pages/admin.js.coffee +0 -54
  286. data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +0 -4
  287. data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +0 -139
  288. data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +0 -9
  289. data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +0 -47
  290. data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +0 -122
  291. data/app/assets/javascripts/pages/admin/features/modal.js.coffee +0 -66
  292. data/app/assets/javascripts/pages/admin/features/page_images.js +0 -329
  293. data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +0 -40
  294. data/app/assets/javascripts/pages/admin/features/tag_editor.js +0 -159
  295. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +0 -17
  296. data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +0 -21
  297. data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +0 -57
  298. data/app/assets/javascripts/pages/login_form.js.coffee +0 -17
  299. data/app/assets/stylesheets/pages/admin.css.erb +0 -404
  300. data/app/assets/stylesheets/pages/admin/buttons.css.erb +0 -5
  301. data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +0 -94
  302. data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +0 -58
  303. data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +0 -178
  304. data/app/assets/stylesheets/pages/admin/editable_image.css.erb +0 -19
  305. data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +0 -73
  306. data/app/assets/stylesheets/pages/admin/header.css.erb +0 -129
  307. data/app/assets/stylesheets/pages/admin/images.css.scss.erb +0 -160
  308. data/app/assets/stylesheets/pages/admin/links.css.erb +0 -34
  309. data/app/assets/stylesheets/pages/admin/list_table.css.erb +0 -56
  310. data/app/assets/stylesheets/pages/admin/modal.css.erb +0 -14
  311. data/app/assets/stylesheets/pages/admin/pagination.css.scss +0 -22
  312. data/app/assets/stylesheets/pages/admin/print.css.erb +0 -17
  313. data/app/assets/stylesheets/pages/admin/sidebar.css.erb +0 -39
  314. data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +0 -18
  315. data/app/assets/stylesheets/pages/admin/tag_editor.css.scss.erb +0 -48
  316. data/app/assets/stylesheets/pages/admin/textarea.css.erb +0 -55
  317. data/app/controllers/admin/page_comments_controller.rb +0 -61
  318. data/app/controllers/admin/page_files_controller.rb +0 -81
  319. data/app/controllers/admin/page_images_controller.rb +0 -116
  320. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -28
  321. data/app/controllers/concerns/pages_core/exception_handler.rb +0 -114
  322. data/app/helpers/pages_core/login_helper.rb +0 -14
  323. data/app/indices/page_file_index.rb +0 -9
  324. data/app/indices/page_index.rb +0 -29
  325. data/app/indices/user_index.rb +0 -11
  326. data/app/models/concerns/pages_core/page_tree.rb +0 -85
  327. data/app/models/concerns/pages_core/searchable_page.rb +0 -33
  328. data/app/models/concerns/pages_core/templateable.rb +0 -85
  329. data/app/models/localization.rb +0 -27
  330. data/app/models/page_comment.rb +0 -18
  331. data/app/views/admin/pages/_edit_comments.html.erb +0 -21
  332. data/app/views/admin/pages/_pagelisting.html.erb +0 -63
  333. data/app/views/admin/users/_login_form.html.erb +0 -47
  334. data/app/views/admin_mailer/comment_notification.text.erb +0 -7
  335. data/app/views/admin_mailer/error_report.html.erb +0 -70
  336. data/app/views/errors/500_critical.html.erb +0 -7
  337. data/app/views/errors/report.html.erb +0 -4
  338. data/config/removed_migrations.yml +0 -60
  339. data/db/migrate/20120627033112_rename_textbits.rb +0 -19
  340. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -83
  341. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -11
  342. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -11
  343. data/db/migrate/20130303160632_remove_imagesets.rb +0 -24
  344. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -16
  345. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -25
  346. data/db/migrate/20140203183900_create_roles.rb +0 -63
  347. data/db/migrate/20140414150500_change_locale_names.rb +0 -13
  348. data/db/migrate/20140515130100_remove_sphinx_deltas.rb +0 -15
  349. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  350. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -79
  351. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  352. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  353. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  354. data/db/migrate/20141007173000_create_invites.rb +0 -16
  355. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  356. data/db/migrate/20150401131300_localize_images.rb +0 -39
  357. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  358. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  359. data/lib/pages_core/extensions/hash_extensions.rb +0 -23
  360. data/lib/pages_core/localizable.rb +0 -49
  361. data/lib/pages_core/localizable/active_record_extension.rb +0 -41
  362. data/lib/pages_core/localizable/class_methods.rb +0 -51
  363. data/lib/pages_core/localizable/configuration.rb +0 -50
  364. data/lib/pages_core/localizable/instance_methods.rb +0 -130
  365. data/lib/pages_core/localizable/localizer.rb +0 -72
  366. data/lib/pages_core/localizable/scope_extension.rb +0 -22
  367. data/lib/pages_core/paginates.rb +0 -102
  368. data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +0 -8
  369. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -11
  370. data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +0 -12
  371. data/lib/tasks/db.rake +0 -96
  372. data/lib/tasks/pages/assets.rake +0 -65
  373. data/lib/tasks/pages/update.rake +0 -19
  374. data/vendor/assets/javascripts/jquery.dimscreen.js +0 -77
  375. data/vendor/assets/javascripts/jquery.fieldselection.js +0 -59
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveJob::Base.queue_adapter = :delayed_job
@@ -1,6 +1,6 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- class ApplicationController < PagesCore::ApplicationController
3
+ class ApplicationController < PagesCore::BaseController
4
4
  # Put frontend specific code in frontend_controller.rb
5
5
 
6
6
  helper :all # include all helpers, all the time
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module ApplicationHelper
4
4
  include PagesCore::ApplicationHelper
@@ -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,3 +1,18 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
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,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Abstract controller for all frontend controllers.
4
4
  class FrontendController < PagesCore::FrontendController
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module FrontendHelper
4
4
  include PagesCore::FrontendHelper
@@ -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,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Be sure to restart your web server when you modify this file.
4
4
 
@@ -18,16 +18,13 @@ PagesCore::Templates.configure do |config|
18
18
  "Standfirst",
19
19
  description: "An introductory paragraph before the start of the body."
20
20
  )
21
- block.body(
22
- "Body",
23
- size: :large
24
- )
21
+ block.body("Body", size: :large)
25
22
  block.boxout(
26
23
  "Boxout",
27
24
  description: "Part of the page, usually background info or facts " \
28
25
  "related to the article."
29
26
  )
30
- end
27
+ end
31
28
 
32
29
  # Default template (default: :autodetect, root: 'index')
33
30
  default.template :autodetect, root: "index"
@@ -36,19 +33,16 @@ PagesCore::Templates.configure do |config|
36
33
  default.image :enabled, linkable: false
37
34
 
38
35
  # Enables file uploads (default: :disabled)
39
- default.files :disabled
40
-
41
- # Enables comments (default: :disabled)
42
- default.comments :disabled
43
-
44
- # New pages are open for comments by default (default: :enabled)
45
- default.comments_allowed :enabled
36
+ # default.files :enabled
46
37
 
47
38
  # Pages can have tags (default: :disabled)
48
- default.tags :disabled
39
+ # default.tags :enabled
40
+
41
+ # Pages can have dates (default: :disabled)
42
+ # default.dates :enabled
49
43
 
50
44
  # Only use the blocks enabled here by default
51
- default.enabled_blocks [:headline, :excerpt, :body]
45
+ default.enabled_blocks %i[headline excerpt body]
52
46
 
53
47
  # Subpages will have this template. Will fall back to default.template
54
48
  # unless specified. (default: nil)
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class PagesController < PagesCore::Frontend::PagesController
4
4
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Be sure to restart your web server when you modify this file.
4
4
 
@@ -13,33 +13,15 @@ PagesCore.configure do |config|
13
13
  # Locales and names
14
14
  # config.locales(nb: 'Norwegian', en: 'English')
15
15
 
16
- # ReCAPTCHA (default: disabled)
17
- # config.recaptcha :disabled
18
-
19
- # Page cache (default: enabled)
20
- # config.page_cache :enabled
21
-
22
- # Domain based page cache (default: disabled)
23
- # config.domain_based_cache :disabled
24
-
25
- # Scoped path for pages (default: nil)
26
- # config.pages_path_scope "/foo"
27
-
28
16
  # Fulltext in RSS feeds (default: disabled)
29
17
  # config.rss_fulltext :disabled
30
18
 
31
19
  # New pages will be created by the user with this email address:
32
20
  # config.default_author "email@example.com"
33
21
 
34
- # Send notifications when new comments are posted
35
- # config :comment_notifications, [:author, 'your@email.com']
36
-
37
- # Automatically close comments after a certain amount of time has
38
- # passed. (default: disabled)
39
- # config.close_comments_after 60.days
22
+ # Layout for 404 errors
23
+ # config.error_404_layout "errors"
40
24
 
41
- # Comment honeypot.
42
- # Add <%%= comment_honeypot_field %> to your form
43
- # and .comment_email { display: none; } to your CSS.
44
- # config.comment_honeypot :disabled
25
+ # Custom attachment embedder
26
+ # config.attachment_embedder PagesCore::AttachmentEmbedder
45
27
  end
@@ -1,33 +1,38 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Generators
5
5
  class RspecGenerator < Rails::Generators::Base
6
6
  desc "RSpec setup"
7
- source_root File.expand_path("../templates", __FILE__)
7
+ source_root File.expand_path("templates", __dir__)
8
8
 
9
- def setup_gems
10
- gem_group :development do
11
- gem "spring-commands-rspec"
12
- end
13
- gem_group :test, :development do
9
+ def setup_test_gems
10
+ gem_group :development, :test do
11
+ gem "capybara"
12
+ gem "factory_bot_rails"
13
+ gem "fuubar"
14
+ gem "json_spec"
14
15
  gem "rspec-rails"
16
+ gem "rspec_junit_formatter"
17
+ gem "selenium-webdriver"
15
18
  gem "shoulda-matchers", require: false
16
- gem "json_spec"
17
- gem "capybara"
18
- gem "timecop"
19
- gem "factory_girl_rails"
19
+ gem "simplecov", require: false
20
20
  end
21
21
  end
22
22
 
23
23
  def setup_rspec
24
- create_file File.join(".rspec"), "--colour"
24
+ create_file File.join(".rspec"), "--format Fuubar\n--colour\n" \
25
+ "--require spec_helper"
25
26
  create_file File.join("spec/controllers/.keep")
26
- create_file File.join("spec/factories/.keep")
27
+ create_file File.join("spec/mailers/preview/.keep")
27
28
  create_file File.join("spec/models/.keep")
29
+ create_file File.join("spec/system/.keep")
28
30
  template "spec_helper.rb", File.join("spec/spec_helper.rb")
29
- 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")
30
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"))
31
36
  end
32
37
  end
33
38
  end
@@ -1,9 +1,4 @@
1
- FactoryGirl.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}")
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,51 +1,95 @@
1
- ENV["RAILS_ENV"] = "test"
1
+ # frozen_string_literal: true
2
2
 
3
- require "rubygems"
4
- require File.expand_path("../../config/environment", __FILE__)
5
- require "rspec/rails"
6
- require "rspec/autorun"
7
- require "thinking_sphinx/test"
8
- 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
9
36
 
10
- # Requires supporting ruby files with custom matchers and macros, etc,
11
- # in spec/support/ and its subdirectories.
12
- 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
13
45
 
14
- RSpec.configure do |config|
15
- # == 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
16
54
  #
17
- # 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"
18
59
  #
19
- # config.mock_with :mocha
20
- # config.mock_with :flexmock
21
- # config.mock_with :rr
22
- config.mock_with :rspec
23
-
24
- # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
25
- # config.fixture_path = "#{::Rails.root}/spec/fixtures"
26
-
27
- # Use FactoryGirl shorthand
28
- config.include FactoryGirl::Syntax::Methods
29
-
30
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
31
- # examples within a transaction, remove the following line or assign false
32
- # instead of true.
33
- config.use_transactional_fixtures = true
34
-
35
- # If true, the base class of anonymous controllers will be inferred
36
- # automatically. This will be the default behavior in future versions of
37
- # rspec-rails.
38
- config.infer_base_class_for_anonymous_controllers = false
39
-
40
- config.include JsonSpec::Helpers
41
- config.include MailerMacros
42
- config.before(:each) { reset_email }
43
-
44
- config.before(:suite) do
45
- # Ensure sphinx directories exist for the test environment
46
- ThinkingSphinx::Test.init
47
- # Configure and start Sphinx, and automatically
48
- # stop Sphinx at the end of the test suite.
49
- ThinkingSphinx::Test.start_with_autostop
50
- end
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
51
95
  end