alchemy_cms 6.1.5 → 7.0.0.pre.b

Sign up to get free protection for your applications and to get access to all the features.
Files changed (363) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/brakeman-analysis.yml +2 -2
  3. data/.github/workflows/ci.yml +7 -10
  4. data/.github/workflows/lint.yml +17 -0
  5. data/.gitignore +1 -6
  6. data/.hound.yml +2 -3
  7. data/.rubocop.yml +4 -350
  8. data/.standard.yml +3 -0
  9. data/CHANGELOG.md +49 -19
  10. data/Gemfile +4 -2
  11. data/README.md +7 -9
  12. data/Rakefile +12 -7
  13. data/alchemy_cms.gemspec +3 -3
  14. data/app/assets/javascripts/alchemy/admin.js +0 -1
  15. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +1 -1
  16. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +18 -32
  17. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +2 -2
  18. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +2 -2
  19. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +33 -30
  20. data/app/assets/stylesheets/alchemy/elements.scss +16 -35
  21. data/app/assets/stylesheets/alchemy/forms.scss +0 -4
  22. data/app/assets/stylesheets/alchemy/node-select.scss +2 -2
  23. data/app/components/alchemy/ingredients/audio_view.rb +37 -0
  24. data/app/components/alchemy/ingredients/base_view.rb +38 -0
  25. data/app/components/alchemy/ingredients/boolean_view.rb +13 -0
  26. data/app/components/alchemy/ingredients/datetime_view.rb +22 -0
  27. data/app/components/alchemy/ingredients/file_view.rb +40 -0
  28. data/app/components/alchemy/ingredients/headline_view.rb +20 -0
  29. data/app/components/alchemy/ingredients/html_view.rb +9 -0
  30. data/app/components/alchemy/ingredients/link_view.rb +25 -0
  31. data/app/components/alchemy/ingredients/node_view.rb +11 -0
  32. data/app/components/alchemy/ingredients/page_view.rb +15 -0
  33. data/app/components/alchemy/ingredients/picture_view.rb +108 -0
  34. data/app/components/alchemy/ingredients/richtext_view.rb +22 -0
  35. data/app/components/alchemy/ingredients/select_view.rb +6 -0
  36. data/app/components/alchemy/ingredients/text_view.rb +41 -0
  37. data/app/components/alchemy/ingredients/video_view.rb +39 -0
  38. data/app/controllers/alchemy/admin/attachments_controller.rb +3 -4
  39. data/app/controllers/alchemy/admin/base_controller.rb +7 -7
  40. data/app/controllers/alchemy/admin/clipboard_controller.rb +2 -2
  41. data/app/controllers/alchemy/admin/elements_controller.rb +33 -43
  42. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  43. data/app/controllers/alchemy/admin/nodes_controller.rb +2 -2
  44. data/app/controllers/alchemy/admin/pages_controller.rb +11 -11
  45. data/app/controllers/alchemy/admin/pictures_controller.rb +15 -15
  46. data/app/controllers/alchemy/admin/resources_controller.rb +28 -46
  47. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  48. data/app/controllers/alchemy/admin/tags_controller.rb +11 -11
  49. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  50. data/app/controllers/alchemy/api/elements_controller.rb +11 -13
  51. data/app/controllers/alchemy/api/ingredients_controller.rb +1 -1
  52. data/app/controllers/alchemy/api/nodes_controller.rb +1 -1
  53. data/app/controllers/alchemy/api/pages_controller.rb +14 -12
  54. data/app/controllers/alchemy/attachments_controller.rb +3 -3
  55. data/app/controllers/alchemy/base_controller.rb +1 -1
  56. data/app/controllers/alchemy/messages_controller.rb +18 -18
  57. data/app/controllers/alchemy/pages_controller.rb +10 -16
  58. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +1 -0
  59. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -7
  60. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +5 -5
  61. data/app/decorators/alchemy/element_editor.rb +13 -33
  62. data/app/decorators/alchemy/ingredient_editor.rb +6 -6
  63. data/app/helpers/alchemy/admin/attachments_helper.rb +1 -1
  64. data/app/helpers/alchemy/admin/base_helper.rb +21 -22
  65. data/app/helpers/alchemy/admin/elements_helper.rb +1 -3
  66. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  67. data/app/helpers/alchemy/admin/navigation_helper.rb +7 -7
  68. data/app/helpers/alchemy/admin/pages_helper.rb +2 -2
  69. data/app/helpers/alchemy/admin/tags_helper.rb +3 -3
  70. data/app/helpers/alchemy/base_helper.rb +2 -2
  71. data/app/helpers/alchemy/elements_block_helper.rb +13 -48
  72. data/app/helpers/alchemy/elements_helper.rb +15 -23
  73. data/app/helpers/alchemy/pages_helper.rb +11 -15
  74. data/app/helpers/alchemy/url_helper.rb +1 -1
  75. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  76. data/app/models/alchemy/attachment.rb +12 -9
  77. data/app/models/alchemy/base_record.rb +3 -0
  78. data/app/models/alchemy/eager_loading.rb +6 -7
  79. data/app/models/alchemy/element/definitions.rb +1 -1
  80. data/app/models/alchemy/element/element_ingredients.rb +4 -11
  81. data/app/models/alchemy/element/presenters.rb +9 -25
  82. data/app/models/alchemy/element.rb +4 -19
  83. data/app/models/alchemy/elements_repository.rb +1 -1
  84. data/app/models/alchemy/image_cropper_settings.rb +2 -2
  85. data/app/models/alchemy/ingredient.rb +29 -16
  86. data/app/models/alchemy/ingredient_validator.rb +1 -1
  87. data/app/models/alchemy/ingredients/audio.rb +2 -0
  88. data/app/models/alchemy/ingredients/datetime.rb +3 -1
  89. data/app/models/alchemy/ingredients/file.rb +7 -0
  90. data/app/models/alchemy/ingredients/headline.rb +6 -0
  91. data/app/models/alchemy/ingredients/link.rb +2 -0
  92. data/app/models/alchemy/ingredients/node.rb +2 -0
  93. data/app/models/alchemy/ingredients/page.rb +2 -0
  94. data/app/models/alchemy/ingredients/picture.rb +29 -0
  95. data/app/models/alchemy/ingredients/richtext.rb +17 -8
  96. data/app/models/alchemy/ingredients/select.rb +1 -0
  97. data/app/models/alchemy/ingredients/text.rb +8 -0
  98. data/app/models/alchemy/ingredients/video.rb +2 -0
  99. data/app/models/alchemy/language/code.rb +1 -1
  100. data/app/models/alchemy/language.rb +4 -4
  101. data/app/models/alchemy/legacy_page_url.rb +1 -1
  102. data/app/models/alchemy/node.rb +11 -8
  103. data/app/models/alchemy/page/page_elements.rb +19 -40
  104. data/app/models/alchemy/page/page_layouts.rb +0 -14
  105. data/app/models/alchemy/page/page_naming.rb +4 -4
  106. data/app/models/alchemy/page/page_natures.rb +1 -11
  107. data/app/models/alchemy/page/page_scopes.rb +5 -5
  108. data/app/models/alchemy/page.rb +11 -19
  109. data/app/models/alchemy/picture/calculations.rb +2 -2
  110. data/app/models/alchemy/picture/transformations.rb +2 -32
  111. data/app/models/alchemy/picture/url.rb +5 -5
  112. data/app/models/alchemy/picture.rb +22 -20
  113. data/app/models/alchemy/picture_thumb/create.rb +7 -18
  114. data/app/models/alchemy/picture_thumb/file_store.rb +33 -0
  115. data/app/models/alchemy/picture_thumb.rb +11 -11
  116. data/app/models/alchemy/picture_variant.rb +2 -3
  117. data/app/models/alchemy/tag.rb +8 -0
  118. data/app/models/concerns/alchemy/picture_thumbnails.rb +8 -8
  119. data/app/serializers/alchemy/base_serializer.rb +1 -1
  120. data/app/serializers/alchemy/element_serializer.rb +1 -6
  121. data/app/serializers/alchemy/page_tree_serializer.rb +7 -7
  122. data/app/services/alchemy/delete_elements.rb +1 -7
  123. data/app/services/alchemy/duplicate_element.rb +2 -7
  124. data/app/services/alchemy/tag_validations.rb +1 -1
  125. data/app/views/alchemy/admin/elements/_element.html.erb +8 -22
  126. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  127. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  128. data/app/views/alchemy/admin/elements/order.js.erb +1 -1
  129. data/app/views/alchemy/admin/elements/update.js.erb +1 -2
  130. data/app/views/alchemy/admin/pages/_external_link.html.erb +2 -2
  131. data/app/views/alchemy/admin/pages/_file_link.html.erb +2 -2
  132. data/app/views/alchemy/admin/pages/_internal_link.html.erb +2 -2
  133. data/app/views/alchemy/admin/pages/edit.html.erb +1 -4
  134. data/app/views/alchemy/admin/pages/update.js.erb +10 -4
  135. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -3
  136. data/app/views/alchemy/admin/pictures/_infos.html.erb +4 -6
  137. data/app/views/alchemy/ingredients/_audio_view.html.erb +1 -14
  138. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
  139. data/app/views/alchemy/ingredients/_boolean_view.html.erb +1 -1
  140. data/app/views/alchemy/ingredients/_datetime_view.html.erb +3 -9
  141. data/app/views/alchemy/ingredients/_file_view.html.erb +3 -16
  142. data/app/views/alchemy/ingredients/_headline_editor.html.erb +1 -1
  143. data/app/views/alchemy/ingredients/_headline_view.html.erb +4 -10
  144. data/app/views/alchemy/ingredients/_html_editor.html.erb +1 -1
  145. data/app/views/alchemy/ingredients/_html_view.html.erb +1 -1
  146. data/app/views/alchemy/ingredients/_link_view.html.erb +4 -9
  147. data/app/views/alchemy/ingredients/_node_editor.html.erb +1 -1
  148. data/app/views/alchemy/ingredients/_node_view.html.erb +1 -1
  149. data/app/views/alchemy/ingredients/_page_view.html.erb +1 -4
  150. data/app/views/alchemy/ingredients/_picture_editor.html.erb +4 -4
  151. data/app/views/alchemy/ingredients/_picture_view.html.erb +4 -5
  152. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +11 -2
  153. data/app/views/alchemy/ingredients/_richtext_view.html.erb +3 -3
  154. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -2
  155. data/app/views/alchemy/ingredients/_select_view.html.erb +1 -1
  156. data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
  157. data/app/views/alchemy/ingredients/_text_view.html.erb +3 -19
  158. data/app/views/alchemy/ingredients/_video_view.html.erb +3 -18
  159. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +4 -3
  160. data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +1 -0
  161. data/app/views/alchemy/pages/_meta_data.html.erb +0 -1
  162. data/app/views/layouts/alchemy/admin.html.erb +10 -8
  163. data/bin/setup +37 -0
  164. data/bin/start +17 -0
  165. data/config/alchemy/config.yml +6 -6
  166. data/config/brakeman.ignore +56 -57
  167. data/config/initializers/assets.rb +1 -0
  168. data/config/initializers/dragonfly.rb +1 -0
  169. data/config/initializers/mime_types.rb +1 -0
  170. data/config/initializers/mini_profiler.rb +1 -0
  171. data/config/initializers/simple_form.rb +3 -2
  172. data/config/locales/alchemy.en.yml +98 -112
  173. data/config/routes.rb +22 -36
  174. data/config/spring.rb +1 -0
  175. data/db/migrate/20230121212637_alchemy_six_point_one.rb +248 -0
  176. data/db/migrate/20230505132743_add_indexes_to_alchemy_pictures.rb +6 -0
  177. data/lib/alchemy/admin/locale.rb +3 -3
  178. data/lib/alchemy/admin/preview_url.rb +2 -2
  179. data/lib/alchemy/auth_accessors.rb +1 -1
  180. data/lib/alchemy/cache_digests/template_tracker.rb +6 -7
  181. data/lib/alchemy/config.rb +3 -3
  182. data/lib/alchemy/controller_actions.rb +4 -4
  183. data/lib/alchemy/deprecation.rb +2 -1
  184. data/lib/alchemy/dragonfly/processors/thumbnail.rb +1 -1
  185. data/lib/alchemy/element_definition.rb +2 -2
  186. data/lib/alchemy/engine.rb +2 -1
  187. data/lib/alchemy/errors.rb +0 -11
  188. data/lib/alchemy/filetypes.rb +7 -7
  189. data/lib/alchemy/forms/builder.rb +4 -4
  190. data/lib/alchemy/hints.rb +10 -10
  191. data/lib/alchemy/i18n.rb +6 -4
  192. data/lib/alchemy/install/tasks.rb +2 -1
  193. data/lib/alchemy/name_conversions.rb +1 -1
  194. data/lib/alchemy/page_layout.rb +1 -1
  195. data/lib/alchemy/permissions.rb +5 -17
  196. data/lib/alchemy/resource.rb +10 -10
  197. data/lib/alchemy/resources_helper.rb +7 -7
  198. data/lib/alchemy/routing_constraints.rb +5 -5
  199. data/lib/alchemy/searchable_resource.rb +38 -0
  200. data/lib/alchemy/seeder.rb +4 -3
  201. data/lib/alchemy/shell.rb +2 -1
  202. data/lib/alchemy/taggable.rb +3 -2
  203. data/lib/alchemy/tasks/tidy.rb +1 -38
  204. data/lib/alchemy/test_support/capybara_helpers.rb +69 -0
  205. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  206. data/lib/alchemy/test_support/factories/element_factory.rb +2 -4
  207. data/lib/alchemy/test_support/factories/ingredient_factory.rb +1 -1
  208. data/lib/alchemy/test_support/factories/page_factory.rb +5 -3
  209. data/lib/alchemy/test_support/having_crop_action_examples.rb +9 -9
  210. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +33 -33
  211. data/lib/alchemy/test_support/integration_helpers.rb +4 -3
  212. data/lib/alchemy/test_support/shared_contexts.rb +2 -1
  213. data/lib/alchemy/test_support/shared_dom_ids_examples.rb +10 -10
  214. data/lib/alchemy/test_support/shared_ingredient_examples.rb +13 -7
  215. data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -0
  216. data/lib/alchemy/tinymce.rb +3 -43
  217. data/lib/alchemy/upgrader/seven_point_zero.rb +45 -0
  218. data/lib/alchemy/upgrader/tasks/.keep +0 -0
  219. data/lib/alchemy/upgrader.rb +9 -3
  220. data/lib/alchemy/version.rb +1 -1
  221. data/lib/alchemy.rb +0 -19
  222. data/lib/alchemy_cms.rb +2 -2
  223. data/lib/generators/alchemy/base.rb +3 -2
  224. data/lib/generators/alchemy/elements/elements_generator.rb +2 -2
  225. data/lib/generators/alchemy/elements/templates/view.html.erb +1 -10
  226. data/lib/generators/alchemy/elements/templates/view.html.haml +1 -9
  227. data/lib/generators/alchemy/elements/templates/view.html.slim +1 -9
  228. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +1 -0
  229. data/lib/generators/alchemy/install/files/alchemy.en.yml +7 -8
  230. data/lib/generators/alchemy/install/files/application.html.erb +1 -1
  231. data/lib/generators/alchemy/install/install_generator.rb +20 -23
  232. data/lib/generators/alchemy/install/templates/elements.yml.tt +12 -12
  233. data/lib/generators/alchemy/module/module_generator.rb +1 -0
  234. data/lib/generators/alchemy/page_layouts/page_layouts_generator.rb +1 -0
  235. data/lib/generators/alchemy/site_layouts/site_layouts_generator.rb +1 -0
  236. data/lib/generators/alchemy/views/views_generator.rb +2 -1
  237. data/lib/tasks/alchemy/thumbnails.rake +6 -25
  238. data/lib/tasks/alchemy/tidy.rake +2 -12
  239. data/lib/tasks/alchemy/upgrade.rake +13 -49
  240. data/package/admin.js +2 -0
  241. data/package/dist/admin.js +16 -0
  242. data/package/dist/admin.js.map +7 -0
  243. data/package/src/datepicker.js +1 -0
  244. data/package/src/tinymce.js +142 -0
  245. data/package.json +5 -3
  246. metadata +41 -135
  247. data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +0 -93
  248. data/app/controllers/alchemy/admin/contents_controller.rb +0 -21
  249. data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -30
  250. data/app/controllers/alchemy/admin/essence_files_controller.rb +0 -31
  251. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +0 -43
  252. data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -34
  253. data/app/controllers/alchemy/api/contents_controller.rb +0 -52
  254. data/app/decorators/alchemy/content_editor.rb +0 -119
  255. data/app/helpers/alchemy/admin/contents_helper.rb +0 -42
  256. data/app/helpers/alchemy/admin/essences_helper.rb +0 -31
  257. data/app/models/alchemy/content/factory.rb +0 -143
  258. data/app/models/alchemy/content.rb +0 -247
  259. data/app/models/alchemy/element/element_contents.rb +0 -200
  260. data/app/models/alchemy/element/element_essences.rb +0 -133
  261. data/app/models/alchemy/essence_audio.rb +0 -13
  262. data/app/models/alchemy/essence_boolean.rb +0 -20
  263. data/app/models/alchemy/essence_date.rb +0 -25
  264. data/app/models/alchemy/essence_file.rb +0 -49
  265. data/app/models/alchemy/essence_headline.rb +0 -41
  266. data/app/models/alchemy/essence_html.rb +0 -23
  267. data/app/models/alchemy/essence_link.rb +0 -21
  268. data/app/models/alchemy/essence_node.rb +0 -19
  269. data/app/models/alchemy/essence_page.rb +0 -17
  270. data/app/models/alchemy/essence_picture.rb +0 -67
  271. data/app/models/alchemy/essence_picture_view.rb +0 -90
  272. data/app/models/alchemy/essence_richtext.rb +0 -44
  273. data/app/models/alchemy/essence_select.rb +0 -19
  274. data/app/models/alchemy/essence_text.rb +0 -23
  275. data/app/models/alchemy/essence_video.rb +0 -13
  276. data/app/presenters/alchemy/picture_view.rb +0 -88
  277. data/app/serializers/alchemy/content_serializer.rb +0 -17
  278. data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -10
  279. data/app/serializers/alchemy/essence_date_serializer.rb +0 -10
  280. data/app/serializers/alchemy/essence_file_serializer.rb +0 -13
  281. data/app/serializers/alchemy/essence_html_serializer.rb +0 -10
  282. data/app/serializers/alchemy/essence_link_serializer.rb +0 -13
  283. data/app/serializers/alchemy/essence_picture_serializer.rb +0 -28
  284. data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -11
  285. data/app/serializers/alchemy/essence_select_serializer.rb +0 -10
  286. data/app/serializers/alchemy/essence_text_serializer.rb +0 -22
  287. data/app/views/alchemy/admin/contents/create.js.erb +0 -21
  288. data/app/views/alchemy/admin/essence_audios/edit.html.erb +0 -7
  289. data/app/views/alchemy/admin/essence_files/edit.html.erb +0 -21
  290. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +0 -5
  291. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +0 -30
  292. data/app/views/alchemy/admin/essence_pictures/save_link.js.erb +0 -3
  293. data/app/views/alchemy/admin/essence_pictures/update.js.erb +0 -8
  294. data/app/views/alchemy/admin/essence_videos/edit.html.erb +0 -12
  295. data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +0 -13
  296. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -4
  297. data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -15
  298. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +0 -11
  299. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +0 -2
  300. data/app/views/alchemy/essences/_essence_date_editor.html.erb +0 -16
  301. data/app/views/alchemy/essences/_essence_date_view.html.erb +0 -10
  302. data/app/views/alchemy/essences/_essence_file_editor.html.erb +0 -54
  303. data/app/views/alchemy/essences/_essence_file_view.html.erb +0 -18
  304. data/app/views/alchemy/essences/_essence_headline_editor.html.erb +0 -36
  305. data/app/views/alchemy/essences/_essence_headline_view.html.erb +0 -10
  306. data/app/views/alchemy/essences/_essence_html_editor.html.erb +0 -10
  307. data/app/views/alchemy/essences/_essence_html_view.html.erb +0 -2
  308. data/app/views/alchemy/essences/_essence_link_editor.html.erb +0 -30
  309. data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -10
  310. data/app/views/alchemy/essences/_essence_node_editor.html.erb +0 -27
  311. data/app/views/alchemy/essences/_essence_node_view.html.erb +0 -1
  312. data/app/views/alchemy/essences/_essence_page_editor.html.erb +0 -26
  313. data/app/views/alchemy/essences/_essence_page_view.html.erb +0 -5
  314. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +0 -59
  315. data/app/views/alchemy/essences/_essence_picture_view.html.erb +0 -6
  316. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +0 -14
  317. data/app/views/alchemy/essences/_essence_richtext_view.html.erb +0 -4
  318. data/app/views/alchemy/essences/_essence_select_editor.html.erb +0 -28
  319. data/app/views/alchemy/essences/_essence_select_view.html.erb +0 -2
  320. data/app/views/alchemy/essences/_essence_text_editor.html.erb +0 -29
  321. data/app/views/alchemy/essences/_essence_text_view.html.erb +0 -17
  322. data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -4
  323. data/app/views/alchemy/essences/_essence_video_view.html.erb +0 -19
  324. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +0 -59
  325. data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +0 -20
  326. data/app/views/alchemy/pages/show.rss.builder +0 -21
  327. data/db/migrate/20200226213334_alchemy_four_point_four.rb +0 -313
  328. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +0 -11
  329. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +0 -28
  330. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +0 -8
  331. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +0 -27
  332. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +0 -6
  333. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +0 -24
  334. data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +0 -22
  335. data/db/migrate/20200907111332_remove_tri_state_booleans.rb +0 -33
  336. data/db/migrate/20201207131309_create_page_versions.rb +0 -19
  337. data/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +0 -76
  338. data/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb +0 -10
  339. data/db/migrate/20210326105046_add_sanitized_body_to_alchemy_essence_richtexts.rb +0 -7
  340. data/db/migrate/20210406093436_add_alchemy_essence_headlines.rb +0 -12
  341. data/db/migrate/20210506135919_create_essence_audios.rb +0 -19
  342. data/db/migrate/20210506140258_create_essence_videos.rb +0 -23
  343. data/db/migrate/20210508091432_create_alchemy_ingredients.rb +0 -22
  344. data/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb +0 -13
  345. data/db/migrate/20220622130905_add_playsinline_to_alchemy_essence_videos.rb +0 -9
  346. data/lib/alchemy/essence.rb +0 -250
  347. data/lib/alchemy/test_support/essence_shared_examples.rb +0 -271
  348. data/lib/alchemy/test_support/factories/content_factory.rb +0 -20
  349. data/lib/alchemy/test_support/factories/essence_audio_factory.rb +0 -7
  350. data/lib/alchemy/test_support/factories/essence_file_factory.rb +0 -7
  351. data/lib/alchemy/test_support/factories/essence_page_factory.rb +0 -7
  352. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +0 -11
  353. data/lib/alchemy/test_support/factories/essence_text_factory.rb +0 -7
  354. data/lib/alchemy/test_support/factories/essence_video_factory.rb +0 -7
  355. data/lib/alchemy/upgrader/five_point_zero.rb +0 -41
  356. data/lib/alchemy/upgrader/six_point_zero.rb +0 -21
  357. data/lib/alchemy/upgrader/tasks/add_page_versions.rb +0 -33
  358. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +0 -34
  359. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +0 -29
  360. data/lib/alchemy/upgrader/tasks/ingredients_migrator.rb +0 -74
  361. data/lib/generators/alchemy/essence/essence_generator.rb +0 -49
  362. data/lib/generators/alchemy/essence/templates/editor.html.erb +0 -17
  363. data/lib/generators/alchemy/essence/templates/view.html.erb +0 -2
@@ -12,6 +12,12 @@ module Alchemy
12
12
  :level,
13
13
  :size
14
14
 
15
+ allow_settings %i[
16
+ anchor
17
+ levels
18
+ sizes
19
+ ]
20
+
15
21
  before_create :set_level_and_size
16
22
 
17
23
  def preview_text(maxlength = 30)
@@ -10,6 +10,8 @@ module Alchemy
10
10
  :link_target,
11
11
  :link_title
12
12
 
13
+ allow_settings %i[text]
14
+
13
15
  alias_method :link, :value
14
16
  end
15
17
  end
@@ -9,6 +9,8 @@ module Alchemy
9
9
  class Node < Alchemy::Ingredient
10
10
  related_object_alias :node, class_name: "Alchemy::Node"
11
11
 
12
+ allow_settings %i[query_params]
13
+
12
14
  # The first 30 characters of node name
13
15
  #
14
16
  # Used by the Element#preview_text method.
@@ -9,6 +9,8 @@ module Alchemy
9
9
  class Page < Alchemy::Ingredient
10
10
  related_object_alias :page, class_name: "Alchemy::Page"
11
11
 
12
+ allow_settings %i[query_params]
13
+
12
14
  # The first 30 characters of page name
13
15
  #
14
16
  # Used by the Element#preview_text method.
@@ -27,6 +27,17 @@ module Alchemy
27
27
 
28
28
  related_object_alias :picture, class_name: "Alchemy::Picture"
29
29
 
30
+ allow_settings %i[
31
+ crop
32
+ css_classes
33
+ fixed_ratio
34
+ linkable
35
+ size
36
+ sizes
37
+ srcset
38
+ upsample
39
+ ]
40
+
30
41
  # The first 30 characters of the pictures name
31
42
  #
32
43
  # Used by the Element#preview_text method.
@@ -36,6 +47,24 @@ module Alchemy
36
47
  def preview_text(max_length = 30)
37
48
  picture&.name.to_s[0..max_length - 1]
38
49
  end
50
+
51
+ # The picture view component with mapped options.
52
+ #
53
+ # @param options [Hash] - Passed to the view component
54
+ # @param html_options [Hash] - Passed to the view component
55
+ #
56
+ # @return Alchemy::Ingredients::PictureView
57
+ def as_view_component(options: {}, html_options: {})
58
+ PictureView.new(
59
+ self,
60
+ show_caption: options.delete(:show_caption),
61
+ disable_link: options.delete(:disable_link),
62
+ srcset: options.delete(:srcset),
63
+ sizes: options.delete(:sizes),
64
+ picture_options: options,
65
+ html_options: html_options
66
+ )
67
+ end
39
68
  end
40
69
  end
41
70
  end
@@ -9,6 +9,12 @@ module Alchemy
9
9
  :stripped_body,
10
10
  :sanitized_body
11
11
 
12
+ allow_settings %i[
13
+ plain_text
14
+ sanitizer
15
+ tinymce
16
+ ]
17
+
12
18
  before_save :strip_content
13
19
  before_save :sanitize_content
14
20
 
@@ -22,15 +28,23 @@ module Alchemy
22
28
  stripped_body.to_s[0..max_length - 1]
23
29
  end
24
30
 
25
- # Returns css class names for the editor textarea.
26
- def tinymce_class_name
27
- "has_tinymce#{has_custom_tinymce_config? ? " #{element.name}_#{role}" : ""}"
31
+ def element_id
32
+ "tinymce_#{id}"
28
33
  end
29
34
 
30
35
  def has_tinymce?
31
36
  true
32
37
  end
33
38
 
39
+ # Returns true if there is a tinymce setting defined that contains settings.
40
+ def has_custom_tinymce_config?
41
+ custom_tinymce_config.is_a?(Hash)
42
+ end
43
+
44
+ def custom_tinymce_config
45
+ settings[:tinymce]
46
+ end
47
+
34
48
  private
35
49
 
36
50
  def strip_content
@@ -47,11 +61,6 @@ module Alchemy
47
61
  def sanitizer_settings
48
62
  settings[:sanitizer] || {}
49
63
  end
50
-
51
- # Returns true if there is a tinymce setting defined that contains settings.
52
- def has_custom_tinymce_config?
53
- settings[:tinymce].is_a?(Hash)
54
- end
55
64
  end
56
65
  end
57
66
  end
@@ -5,6 +5,7 @@ module Alchemy
5
5
  # A text value from a select box
6
6
  #
7
7
  class Select < Alchemy::Ingredient
8
+ allow_settings %i[display_inline select_values]
8
9
  end
9
10
  end
10
11
  end
@@ -15,6 +15,14 @@ module Alchemy
15
15
  :link_target,
16
16
  :link_title,
17
17
  :link_class_name
18
+
19
+ allow_settings %i[
20
+ anchor
21
+ disable_link
22
+ display_inline
23
+ input_type
24
+ linkable
25
+ ]
18
26
  end
19
27
  end
20
28
  end
@@ -16,6 +16,8 @@ module Alchemy
16
16
  :preload,
17
17
  :width
18
18
 
19
+ allow_settings %i[except only]
20
+
19
21
  related_object_alias :attachment, class_name: "Alchemy::Attachment"
20
22
 
21
23
  delegate :name, to: :attachment, allow_nil: true
@@ -17,7 +17,7 @@ module Alchemy::Language::Code
17
17
  codes << "" if codes.length == 1
18
18
  on_current_site.find_by(
19
19
  language_code: codes[0],
20
- country_code: codes[1],
20
+ country_code: codes[1]
21
21
  )
22
22
  end
23
23
  end
@@ -38,11 +38,11 @@ module Alchemy
38
38
 
39
39
  validates :language_code,
40
40
  presence: true,
41
- uniqueness: { scope: [:site_id, :country_code], case_sensitive: false },
42
- format: { with: /\A[a-z]{2}\z/, if: -> { language_code.present? } }
41
+ uniqueness: {scope: [:site_id, :country_code], case_sensitive: false},
42
+ format: {with: /\A[a-z]{2}\z/, if: -> { language_code.present? }}
43
43
 
44
44
  validates :country_code,
45
- format: { with: /\A[a-zA-Z]{2}\z/, if: -> { country_code.present? } }
45
+ format: {with: /\A[a-zA-Z]{2}\z/, if: -> { country_code.present? }}
46
46
 
47
47
  validate :presence_of_default_language
48
48
  validate :publicity_of_default_language
@@ -60,7 +60,7 @@ module Alchemy
60
60
  end
61
61
 
62
62
  scope :published, -> { where(public: true) }
63
- scope :with_root_page, -> { joins(:pages).where(Page.table_name => { language_root: true }) }
63
+ scope :with_root_page, -> { joins(:pages).where(Page.table_name => {language_root: true}) }
64
64
 
65
65
  class << self
66
66
  def on_site(site)
@@ -18,5 +18,5 @@ class Alchemy::LegacyPageUrl < ActiveRecord::Base
18
18
 
19
19
  validates :urlname,
20
20
  presence: true,
21
- format: {with: /\A[:\.\w\-+_\/\?&%;=#]*\z/}
21
+ format: {with: /\A[:.\w\-+_\/?&%;=#]*\z/}
22
22
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module Alchemy
4
4
  class Node < BaseRecord
5
- VALID_URL_REGEX = /\A(\/|\D[a-z\+\d\.\-]+:)/
5
+ VALID_URL_REGEX = /\A(\/|\D[a-z+\d.-]+:)/
6
6
 
7
- before_destroy :check_if_related_essence_nodes_present
7
+ before_destroy :check_if_related_node_ingredients_present
8
8
 
9
9
  acts_as_nested_set scope: "language_id", touch: true
10
10
  stampable stamper_class_name: Alchemy.user_class.name
@@ -14,14 +14,17 @@ module Alchemy
14
14
 
15
15
  has_one :site, through: :language
16
16
 
17
- has_many :essence_nodes, class_name: "Alchemy::EssenceNode", foreign_key: :node_id, inverse_of: :ingredient_association
17
+ has_many :node_ingredients,
18
+ class_name: "Alchemy::Ingredients::Node",
19
+ foreign_key: :related_object_id,
20
+ inverse_of: :related_object
18
21
 
19
22
  before_validation :translate_root_menu_name, if: -> { root? }
20
23
  before_validation :set_menu_type_from_root, unless: -> { root? }
21
24
 
22
25
  validates :menu_type, presence: true
23
26
  validates :name, presence: true, if: -> { page.nil? }
24
- validates :url, format: { with: VALID_URL_REGEX }, unless: -> { url.nil? }
27
+ validates :url, format: {with: VALID_URL_REGEX}, unless: -> { url.nil? }
25
28
 
26
29
  # Returns the name
27
30
  #
@@ -76,10 +79,10 @@ module Alchemy
76
79
 
77
80
  private
78
81
 
79
- def check_if_related_essence_nodes_present
80
- dependent_essence_nodes = self_and_descendants.flat_map(&:essence_nodes)
81
- if dependent_essence_nodes.any?
82
- errors.add(:base, :essence_nodes_present, page_names: dependent_essence_nodes.map(&:page).map(&:name).to_sentence)
82
+ def check_if_related_node_ingredients_present
83
+ dependent_node_ingredients = self_and_descendants.flat_map(&:node_ingredients)
84
+ if dependent_node_ingredients.any?
85
+ errors.add(:base, :node_ingredients_present, page_names: dependent_node_ingredients.map { |i| i.element&.page&.name }.to_sentence)
83
86
  throw(:abort)
84
87
  end
85
88
  end
@@ -12,14 +12,14 @@ module Alchemy
12
12
  class_name: "Alchemy::Element",
13
13
  through: :public_version,
14
14
  inverse_of: :page,
15
- source: :elements,
15
+ source: :elements
16
16
  ) do
17
17
  has_many :all_elements
18
18
  has_many :elements, -> { not_nested.unfixed.published }
19
19
  has_many :fixed_elements, -> { fixed.published }
20
20
  end
21
21
 
22
- has_many :contents, through: :elements
22
+ has_many :ingredients, through: :elements
23
23
  has_and_belongs_to_many :to_be_swept_elements, -> { distinct },
24
24
  class_name: "Alchemy::Element",
25
25
  join_table: ElementToPage.table_name
@@ -42,7 +42,7 @@ module Alchemy
42
42
  repository.not_nested.each.with_index(1) do |element, position|
43
43
  Alchemy::DuplicateElement.new(element, repository: repository).call(
44
44
  page_version_id: target.draft_version.id,
45
- position: position,
45
+ position: position
46
46
  )
47
47
  end
48
48
  end
@@ -58,25 +58,25 @@ module Alchemy
58
58
  #
59
59
  # - name: headline
60
60
  # unique: true
61
- # contents:
61
+ # ingredients:
62
62
  # - name: headline
63
- # type: EssenceText
63
+ # type: Text
64
64
  #
65
65
  # == Example of limited element:
66
66
  #
67
67
  # - name: article
68
68
  # amount: 2
69
- # contents:
69
+ # ingredients:
70
70
  # - name: text
71
- # type: EssenceRichtext
71
+ # type: Richtext
72
72
  #
73
73
  def available_element_definitions(only_element_named = nil)
74
74
  @_element_definitions ||= if only_element_named
75
- definition = Element.definition_by_name(only_element_named)
76
- element_definitions_by_name(definition["nestable_elements"])
77
- else
78
- element_definitions
79
- end
75
+ definition = Element.definition_by_name(only_element_named)
76
+ element_definitions_by_name(definition["nestable_elements"])
77
+ else
78
+ element_definitions
79
+ end
80
80
 
81
81
  return [] if @_element_definitions.blank?
82
82
 
@@ -98,13 +98,13 @@ module Alchemy
98
98
  #
99
99
  def available_elements_within_current_scope(parent)
100
100
  @_available_elements = if parent
101
- parents_unique_nested_elements = parent.nested_elements.where(unique: true).pluck(:name)
102
- available_element_definitions(parent.name).reject do |e|
103
- parents_unique_nested_elements.include? e["name"]
104
- end
105
- else
106
- available_element_definitions
101
+ parents_unique_nested_elements = parent.nested_elements.where(unique: true).pluck(:name)
102
+ available_element_definitions(parent.name).reject do |e|
103
+ parents_unique_nested_elements.include? e["name"]
107
104
  end
105
+ else
106
+ available_element_definitions
107
+ end
108
108
  end
109
109
 
110
110
  # All element definitions defined for page's page layout
@@ -156,32 +156,11 @@ module Alchemy
156
156
  end
157
157
  end
158
158
 
159
- # Returns all elements that should be feeded via rss.
160
- #
161
- # Define feedable elements in your +page_layouts.yml+:
162
- #
163
- # - name: news
164
- # feed: true
165
- # feed_elements: [element_name, element_2_name]
166
- #
167
- def feed_elements
168
- elements.named(definition["feed_elements"])
169
- end
170
-
171
- # Returns an array of all EssenceRichtext contents ids from not folded elements
172
- #
173
- def richtext_contents_ids
174
- Alchemy::Content.joins(:element)
175
- .where(Element.table_name => { page_version_id: draft_version.id, folded: false })
176
- .select(&:has_tinymce?)
177
- .collect(&:id)
178
- end
179
-
180
159
  # Returns an array of all Richtext ingredients ids from not folded elements
181
160
  #
182
161
  def richtext_ingredients_ids
183
162
  Alchemy::Ingredient.richtexts.joins(:element)
184
- .where(Element.table_name => { page_version_id: draft_version.id, folded: false })
163
+ .where(Element.table_name => {page_version_id: draft_version.id, folded: false})
185
164
  .select(&:has_tinymce?)
186
165
  .collect(&:id)
187
166
  end
@@ -23,20 +23,6 @@ module Alchemy
23
23
  mapped_layouts_for_select(selectable_layouts(language_id, layoutpages: layoutpages))
24
24
  end
25
25
 
26
- # Returns page layouts including given layout ready for Rails' select form helper.
27
- #
28
- def layouts_with_own_for_select(page_layout_name, language_id, layoutpages: false)
29
- layouts = selectable_layouts(language_id, layoutpages: layoutpages)
30
- if layouts.detect { |l| l["name"] == page_layout_name }.nil?
31
- @map_array = [[human_layout_name(page_layout_name), page_layout_name]]
32
- else
33
- @map_array = []
34
- end
35
- mapped_layouts_for_select(layouts)
36
- end
37
-
38
- deprecate :layouts_with_own_for_select, deprecator: Alchemy::Deprecation
39
-
40
26
  # Returns all layouts that can be used for creating a new page.
41
27
  #
42
28
  # It removes all layouts from available layouts that are unique and already taken and that are marked as hide.
@@ -5,7 +5,7 @@ module Alchemy
5
5
  module PageNaming
6
6
  extend ActiveSupport::Concern
7
7
  include NameConversions
8
- RESERVED_URLNAMES = %w(admin messages new)
8
+ RESERVED_URLNAMES = %w[admin messages new]
9
9
 
10
10
  included do
11
11
  before_validation :set_urlname,
@@ -15,9 +15,9 @@ module Alchemy
15
15
  validates :name,
16
16
  presence: true
17
17
  validates :urlname,
18
- uniqueness: { scope: [:language_id, :layoutpage], if: -> { urlname.present? }, case_sensitive: false },
19
- exclusion: { in: RESERVED_URLNAMES },
20
- length: { minimum: 3, if: -> { urlname.present? } }
18
+ uniqueness: {scope: [:language_id, :layoutpage], if: -> { urlname.present? }, case_sensitive: false},
19
+ exclusion: {in: RESERVED_URLNAMES},
20
+ length: {minimum: 3, if: -> { urlname.present? }}
21
21
 
22
22
  before_save :set_title,
23
23
  if: -> { title.blank? }
@@ -17,12 +17,6 @@ module Alchemy
17
17
  public_until ? public_until - Time.current : nil
18
18
  end
19
19
 
20
- def taggable?
21
- definition["taggable"] == true
22
- end
23
-
24
- deprecate :taggable?, deprecator: Alchemy::Deprecation
25
-
26
20
  def rootpage?
27
21
  !new_record? && parent_id.blank?
28
22
  end
@@ -33,10 +27,6 @@ module Alchemy
33
27
  folded_pages.where(user_id: user_id, folded: true).any?
34
28
  end
35
29
 
36
- def contains_feed?
37
- definition["feed"]
38
- end
39
-
40
30
  # Returns an Array of Alchemy roles which are able to edit this template
41
31
  #
42
32
  # # config/alchemy/page_layouts.yml
@@ -68,7 +58,7 @@ module Alchemy
68
58
  {
69
59
  public: public?,
70
60
  locked: locked?,
71
- restricted: restricted?,
61
+ restricted: restricted?
72
62
  }
73
63
  end
74
64
 
@@ -49,9 +49,9 @@ module Alchemy
49
49
  #
50
50
  scope :published,
51
51
  -> {
52
- joins(:language, :versions).
53
- merge(Language.published).
54
- merge(PageVersion.public_on(Time.current))
52
+ joins(:language, :versions)
53
+ .merge(Language.published)
54
+ .merge(PageVersion.public_on(Time.current))
55
55
  }
56
56
 
57
57
  # All pages that are a published language root
@@ -59,7 +59,7 @@ module Alchemy
59
59
  scope :public_language_roots,
60
60
  -> {
61
61
  published.language_roots.where(
62
- language_code: Language.published.pluck(:language_code),
62
+ language_code: Language.published.pluck(:language_code)
63
63
  )
64
64
  }
65
65
 
@@ -98,7 +98,7 @@ module Alchemy
98
98
  #
99
99
  scope :from_current_site,
100
100
  -> {
101
- where(Language.table_name => { site_id: Site.current || Site.default }).joins(:language)
101
+ where(Language.table_name => {site_id: Site.current || Site.default}).joins(:language)
102
102
  }
103
103
 
104
104
  # All pages for xml sitemap
@@ -53,10 +53,10 @@ module Alchemy
53
53
  public_on: nil,
54
54
  public_until: nil,
55
55
  locked_at: nil,
56
- locked_by: nil,
56
+ locked_by: nil
57
57
  }
58
58
 
59
- SKIPPED_ATTRIBUTES_ON_COPY = %w(
59
+ SKIPPED_ATTRIBUTES_ON_COPY = %w[
60
60
  id
61
61
  updated_at
62
62
  created_at
@@ -67,7 +67,7 @@ module Alchemy
67
67
  depth
68
68
  urlname
69
69
  cached_tag_list
70
- )
70
+ ]
71
71
 
72
72
  PERMITTED_ATTRIBUTES = [
73
73
  :meta_description,
@@ -85,7 +85,7 @@ module Alchemy
85
85
  :title,
86
86
  :urlname,
87
87
  :layoutpage,
88
- :menu_id,
88
+ :menu_id
89
89
  ]
90
90
 
91
91
  acts_as_nested_set(dependent: :destroy, scope: [:layoutpage, :language_id])
@@ -163,14 +163,6 @@ module Alchemy
163
163
  # site_name accessor
164
164
  delegate :name, to: :site, prefix: true, allow_nil: true
165
165
 
166
- # Old public_on and public_until attributes for historical reasons
167
- #
168
- # These attributes now exist on the page versions
169
- #
170
- attr_readonly :legacy_public_on, :legacy_public_until
171
- deprecate :legacy_public_on, deprecator: Alchemy::Deprecation
172
- deprecate :legacy_public_until, deprecator: Alchemy::Deprecation
173
-
174
166
  # Class methods
175
167
  #
176
168
  class << self
@@ -193,12 +185,12 @@ module Alchemy
193
185
  [
194
186
  {
195
187
  name: :by_page_layout,
196
- values: PageLayout.all.map { |p| [Alchemy.t(p["name"], scope: "page_layout_names"), p["name"]] },
188
+ values: PageLayout.all.map { |p| [Alchemy.t(p["name"], scope: "page_layout_names"), p["name"]] }
197
189
  },
198
190
  {
199
191
  name: :status,
200
- values: %w[published not_public restricted],
201
- },
192
+ values: %w[published not_public restricted]
193
+ }
202
194
  ]
203
195
  end
204
196
 
@@ -256,7 +248,7 @@ module Alchemy
256
248
  parent: new_parent,
257
249
  language: new_parent&.language,
258
250
  name: new_name,
259
- title: new_name,
251
+ title: new_name
260
252
  })
261
253
  if source.children.any?
262
254
  source.copy_children_to(page)
@@ -284,7 +276,7 @@ module Alchemy
284
276
  link_target_options = Config.get(:link_target_options)
285
277
  link_target_options.each do |option|
286
278
  options << [Alchemy.t(option, scope: "link_target_options",
287
- default: option.to_s.humanize), option]
279
+ default: option.to_s.humanize), option]
288
280
  end
289
281
  options
290
282
  end
@@ -458,7 +450,7 @@ module Alchemy
458
450
  new_child = Page.copy(child, {
459
451
  parent_id: new_parent.id,
460
452
  language_id: new_parent.language_id,
461
- language_code: new_parent.language_code,
453
+ language_code: new_parent.language_code
462
454
  })
463
455
  new_child.move_to_child_of(new_parent)
464
456
  child.copy_children_to(new_child) unless child.children.blank?
@@ -499,7 +491,7 @@ module Alchemy
499
491
  # A tree node with new lft, rgt, depth, url, parent_id and restricted indexes to be updated
500
492
  #
501
493
  def update_node!(node)
502
- hash = { lft: node.left, rgt: node.right, parent_id: node.parent, depth: node.depth, restricted: node.restricted }
494
+ hash = {lft: node.left, rgt: node.right, parent_id: node.parent, depth: node.depth, restricted: node.restricted}
503
495
 
504
496
  if urlname != node.url
505
497
  LegacyPageUrl.create(page_id: id, urlname: urlname)
@@ -32,7 +32,7 @@ module Alchemy
32
32
 
33
33
  {
34
34
  width: width,
35
- height: height,
35
+ height: height
36
36
  }
37
37
  end
38
38
 
@@ -41,7 +41,7 @@ module Alchemy
41
41
  def image_size
42
42
  {
43
43
  width: image_file_width,
44
- height: image_file_height,
44
+ height: image_file_height
45
45
  }
46
46
  end
47
47
  end
@@ -33,36 +33,6 @@ module Alchemy
33
33
  image_file.thumbnail(upsample ? size : "#{size}>")
34
34
  end
35
35
 
36
- # Returns true if picture's width is greater than it's height
37
- #
38
- def landscape_format?
39
- image_file.landscape?
40
- end
41
-
42
- alias_method :landscape?, :landscape_format?
43
- deprecate landscape_format?: "Use image_file.landscape? instead", deprecator: Alchemy::Deprecation
44
- deprecate landscape?: "Use image_file.landscape? instead", deprecator: Alchemy::Deprecation
45
-
46
- # Returns true if picture's width is smaller than it's height
47
- #
48
- def portrait_format?
49
- image_file.portrait?
50
- end
51
-
52
- alias_method :portrait?, :portrait_format?
53
- deprecate portrait_format?: "Use image_file.portrait? instead", deprecator: Alchemy::Deprecation
54
- deprecate portrait?: "Use image_file.portrait? instead", deprecator: Alchemy::Deprecation
55
-
56
- # Returns true if picture's width and height is equal
57
- #
58
- def square_format?
59
- image_file.aspect_ratio == 1.0
60
- end
61
-
62
- alias_method :square?, :square_format?
63
- deprecate square_format?: "Use image_file.aspect_ratio instead", deprecator: Alchemy::Deprecation
64
- deprecate square?: "Use image_file.aspect_ratio instead", deprecator: Alchemy::Deprecation
65
-
66
36
  # Returns true if the class we're included in has a meaningful render_size attribute
67
37
  #
68
38
  def render_size?
@@ -89,7 +59,7 @@ module Alchemy
89
59
  y = 0 if y.nil?
90
60
  {
91
61
  x: x,
92
- y: y,
62
+ y: y
93
63
  }
94
64
  end
95
65
 
@@ -138,7 +108,7 @@ module Alchemy
138
108
  def reduce_to_image(dimensions)
139
109
  {
140
110
  width: [dimensions[:width].to_i, image_file_width.to_i].min,
141
- height: [dimensions[:height].to_i, image_file_height.to_i].min,
111
+ height: [dimensions[:height].to_i, image_file_height.to_i].min
142
112
  }
143
113
  end
144
114
  end
@@ -36,7 +36,7 @@ module Alchemy
36
36
  else
37
37
  uid = PictureThumb::Uid.call(signature, variant)
38
38
  ActiveRecord::Base.connected_to(role: ActiveRecord::Base.writing_role) do
39
- PictureThumb.generator_class.call(variant, signature, uid)
39
+ PictureThumb::Create.call(variant, signature, uid)
40
40
  end
41
41
  uid
42
42
  end
@@ -44,10 +44,10 @@ module Alchemy
44
44
 
45
45
  def find_thumb_by(signature)
46
46
  @thumb = if variant.picture.thumbs.loaded?
47
- variant.picture.thumbs.find { |t| t.signature == signature }
48
- else
49
- variant.picture.thumbs.find_by(signature: signature)
50
- end
47
+ variant.picture.thumbs.find { |t| t.signature == signature }
48
+ else
49
+ variant.picture.thumbs.find_by(signature: signature)
50
+ end
51
51
  end
52
52
  end
53
53
  end