alchemy_cms 6.1.2 → 7.0.0.pre.a

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 (243) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +0 -3
  3. data/.gitignore +1 -6
  4. data/CHANGELOG.md +22 -8
  5. data/Gemfile +1 -0
  6. data/Rakefile +13 -8
  7. data/alchemy_cms.gemspec +1 -3
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +1 -1
  9. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +18 -32
  10. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +2 -2
  11. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +2 -2
  12. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +27 -29
  13. data/app/assets/stylesheets/alchemy/elements.scss +16 -35
  14. data/app/assets/stylesheets/alchemy/forms.scss +0 -4
  15. data/app/assets/stylesheets/alchemy/node-select.scss +2 -2
  16. data/app/controllers/alchemy/admin/attachments_controller.rb +0 -1
  17. data/app/controllers/alchemy/admin/elements_controller.rb +7 -32
  18. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  19. data/app/controllers/alchemy/admin/pictures_controller.rb +1 -1
  20. data/app/controllers/alchemy/admin/resources_controller.rb +1 -18
  21. data/app/controllers/alchemy/api/elements_controller.rb +0 -2
  22. data/app/controllers/alchemy/api/pages_controller.rb +6 -4
  23. data/app/controllers/alchemy/messages_controller.rb +9 -9
  24. data/app/controllers/alchemy/pages_controller.rb +19 -28
  25. data/app/decorators/alchemy/element_editor.rb +10 -30
  26. data/app/helpers/alchemy/admin/elements_helper.rb +0 -2
  27. data/app/helpers/alchemy/elements_block_helper.rb +5 -42
  28. data/app/helpers/alchemy/elements_helper.rb +3 -11
  29. data/app/helpers/alchemy/pages_helper.rb +0 -4
  30. data/app/models/alchemy/attachment.rb +6 -3
  31. data/app/models/alchemy/base_record.rb +2 -0
  32. data/app/models/alchemy/eager_loading.rb +0 -1
  33. data/app/models/alchemy/element/element_ingredients.rb +1 -8
  34. data/app/models/alchemy/element/presenters.rb +9 -25
  35. data/app/models/alchemy/element.rb +2 -16
  36. data/app/models/alchemy/ingredient.rb +17 -6
  37. data/app/models/alchemy/ingredients/audio.rb +2 -0
  38. data/app/models/alchemy/ingredients/datetime.rb +3 -1
  39. data/app/models/alchemy/ingredients/file.rb +7 -0
  40. data/app/models/alchemy/ingredients/headline.rb +6 -0
  41. data/app/models/alchemy/ingredients/link.rb +2 -0
  42. data/app/models/alchemy/ingredients/node.rb +2 -0
  43. data/app/models/alchemy/ingredients/page.rb +2 -0
  44. data/app/models/alchemy/ingredients/picture.rb +11 -0
  45. data/app/models/alchemy/ingredients/richtext.rb +6 -0
  46. data/app/models/alchemy/ingredients/select.rb +1 -0
  47. data/app/models/alchemy/ingredients/text.rb +8 -0
  48. data/app/models/alchemy/ingredients/video.rb +2 -0
  49. data/app/models/alchemy/node.rb +9 -6
  50. data/app/models/alchemy/page/page_elements.rb +5 -26
  51. data/app/models/alchemy/page/page_layouts.rb +0 -14
  52. data/app/models/alchemy/page/page_natures.rb +0 -10
  53. data/app/models/alchemy/page.rb +0 -8
  54. data/app/models/alchemy/picture/transformations.rb +0 -30
  55. data/app/models/alchemy/picture/url.rb +1 -1
  56. data/app/models/alchemy/picture.rb +12 -10
  57. data/app/models/alchemy/picture_thumb/create.rb +7 -18
  58. data/app/models/alchemy/picture_thumb/file_store.rb +33 -0
  59. data/app/models/alchemy/picture_thumb.rb +10 -10
  60. data/app/models/concerns/alchemy/picture_thumbnails.rb +2 -2
  61. data/app/serializers/alchemy/element_serializer.rb +1 -6
  62. data/app/services/alchemy/delete_elements.rb +1 -7
  63. data/app/services/alchemy/duplicate_element.rb +1 -6
  64. data/app/views/alchemy/admin/elements/_element.html.erb +5 -22
  65. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  66. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  67. data/app/views/alchemy/admin/elements/order.js.erb +1 -1
  68. data/app/views/alchemy/admin/elements/update.js.erb +1 -2
  69. data/app/views/alchemy/admin/pages/_external_link.html.erb +2 -2
  70. data/app/views/alchemy/admin/pages/_file_link.html.erb +2 -2
  71. data/app/views/alchemy/admin/pages/_internal_link.html.erb +2 -2
  72. data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +3 -6
  73. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  74. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -3
  75. data/app/views/alchemy/admin/pictures/_infos.html.erb +4 -6
  76. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
  77. data/app/views/alchemy/ingredients/_headline_editor.html.erb +1 -1
  78. data/app/views/alchemy/ingredients/_html_editor.html.erb +1 -1
  79. data/app/views/alchemy/ingredients/_node_editor.html.erb +1 -1
  80. data/app/views/alchemy/ingredients/_picture_editor.html.erb +4 -4
  81. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -2
  82. data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
  83. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +3 -3
  84. data/app/views/alchemy/pages/_meta_data.html.erb +0 -1
  85. data/app/views/layouts/alchemy/admin.html.erb +5 -1
  86. data/config/alchemy/config.yml +6 -6
  87. data/config/brakeman.ignore +56 -57
  88. data/config/locales/alchemy.en.yml +98 -112
  89. data/config/routes.rb +1 -16
  90. data/db/migrate/20230121212637_alchemy_six_point_one.rb +248 -0
  91. data/lib/alchemy/cache_digests/template_tracker.rb +6 -7
  92. data/lib/alchemy/config.rb +2 -2
  93. data/lib/alchemy/deprecation.rb +1 -1
  94. data/lib/alchemy/errors.rb +0 -11
  95. data/lib/alchemy/hints.rb +10 -10
  96. data/lib/alchemy/install/tasks.rb +7 -1
  97. data/lib/alchemy/permissions.rb +0 -13
  98. data/lib/alchemy/routing_constraints.rb +3 -3
  99. data/lib/alchemy/searchable_resource.rb +38 -0
  100. data/lib/alchemy/tasks/tidy.rb +0 -38
  101. data/lib/alchemy/test_support/capybara_helpers.rb +69 -0
  102. data/lib/alchemy/test_support/factories/element_factory.rb +0 -6
  103. data/lib/alchemy/test_support/factories/ingredient_factory.rb +1 -1
  104. data/lib/alchemy/test_support/factories/page_factory.rb +4 -2
  105. data/lib/alchemy/test_support/shared_dom_ids_examples.rb +1 -1
  106. data/lib/alchemy/test_support/shared_ingredient_examples.rb +1 -1
  107. data/lib/alchemy/tinymce.rb +1 -18
  108. data/lib/alchemy/upgrader/seven_point_zero.rb +45 -0
  109. data/lib/alchemy/upgrader/tasks/.keep +0 -0
  110. data/lib/alchemy/upgrader.rb +8 -3
  111. data/lib/alchemy/version.rb +1 -1
  112. data/lib/alchemy.rb +0 -19
  113. data/lib/alchemy_cms.rb +2 -3
  114. data/lib/generators/alchemy/elements/elements_generator.rb +0 -1
  115. data/lib/generators/alchemy/elements/templates/view.html.erb +1 -10
  116. data/lib/generators/alchemy/elements/templates/view.html.haml +1 -9
  117. data/lib/generators/alchemy/elements/templates/view.html.slim +1 -9
  118. data/lib/generators/alchemy/install/files/alchemy.en.yml +7 -8
  119. data/lib/generators/alchemy/install/files/application.html.erb +1 -1
  120. data/lib/generators/alchemy/install/install_generator.rb +18 -22
  121. data/lib/generators/alchemy/install/templates/elements.yml.tt +12 -12
  122. data/lib/non_stupid_digest_assets.rb +55 -0
  123. data/lib/tasks/alchemy/thumbnails.rake +2 -21
  124. data/lib/tasks/alchemy/tidy.rake +1 -12
  125. data/lib/tasks/alchemy/upgrade.rake +10 -47
  126. data/package/dist/admin.js +16 -0
  127. data/package/dist/admin.js.map +7 -0
  128. data/package.json +5 -3
  129. metadata +15 -154
  130. data/app/controllers/alchemy/admin/contents_controller.rb +0 -21
  131. data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -30
  132. data/app/controllers/alchemy/admin/essence_files_controller.rb +0 -31
  133. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +0 -43
  134. data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -34
  135. data/app/controllers/alchemy/api/contents_controller.rb +0 -52
  136. data/app/decorators/alchemy/content_editor.rb +0 -119
  137. data/app/helpers/alchemy/admin/contents_helper.rb +0 -42
  138. data/app/helpers/alchemy/admin/essences_helper.rb +0 -31
  139. data/app/models/alchemy/content/factory.rb +0 -143
  140. data/app/models/alchemy/content.rb +0 -247
  141. data/app/models/alchemy/element/element_contents.rb +0 -200
  142. data/app/models/alchemy/element/element_essences.rb +0 -133
  143. data/app/models/alchemy/essence_audio.rb +0 -13
  144. data/app/models/alchemy/essence_boolean.rb +0 -20
  145. data/app/models/alchemy/essence_date.rb +0 -25
  146. data/app/models/alchemy/essence_file.rb +0 -49
  147. data/app/models/alchemy/essence_headline.rb +0 -41
  148. data/app/models/alchemy/essence_html.rb +0 -23
  149. data/app/models/alchemy/essence_link.rb +0 -21
  150. data/app/models/alchemy/essence_node.rb +0 -19
  151. data/app/models/alchemy/essence_page.rb +0 -17
  152. data/app/models/alchemy/essence_picture.rb +0 -67
  153. data/app/models/alchemy/essence_picture_view.rb +0 -90
  154. data/app/models/alchemy/essence_richtext.rb +0 -44
  155. data/app/models/alchemy/essence_select.rb +0 -19
  156. data/app/models/alchemy/essence_text.rb +0 -23
  157. data/app/models/alchemy/essence_video.rb +0 -13
  158. data/app/serializers/alchemy/content_serializer.rb +0 -17
  159. data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -10
  160. data/app/serializers/alchemy/essence_date_serializer.rb +0 -10
  161. data/app/serializers/alchemy/essence_file_serializer.rb +0 -13
  162. data/app/serializers/alchemy/essence_html_serializer.rb +0 -10
  163. data/app/serializers/alchemy/essence_link_serializer.rb +0 -13
  164. data/app/serializers/alchemy/essence_picture_serializer.rb +0 -28
  165. data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -11
  166. data/app/serializers/alchemy/essence_select_serializer.rb +0 -10
  167. data/app/serializers/alchemy/essence_text_serializer.rb +0 -22
  168. data/app/views/alchemy/admin/contents/create.js.erb +0 -21
  169. data/app/views/alchemy/admin/essence_audios/edit.html.erb +0 -7
  170. data/app/views/alchemy/admin/essence_files/edit.html.erb +0 -21
  171. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +0 -5
  172. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +0 -30
  173. data/app/views/alchemy/admin/essence_pictures/save_link.js.erb +0 -3
  174. data/app/views/alchemy/admin/essence_pictures/update.js.erb +0 -8
  175. data/app/views/alchemy/admin/essence_videos/edit.html.erb +0 -12
  176. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -4
  177. data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -15
  178. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +0 -11
  179. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +0 -2
  180. data/app/views/alchemy/essences/_essence_date_editor.html.erb +0 -16
  181. data/app/views/alchemy/essences/_essence_date_view.html.erb +0 -10
  182. data/app/views/alchemy/essences/_essence_file_editor.html.erb +0 -54
  183. data/app/views/alchemy/essences/_essence_file_view.html.erb +0 -18
  184. data/app/views/alchemy/essences/_essence_headline_editor.html.erb +0 -36
  185. data/app/views/alchemy/essences/_essence_headline_view.html.erb +0 -10
  186. data/app/views/alchemy/essences/_essence_html_editor.html.erb +0 -10
  187. data/app/views/alchemy/essences/_essence_html_view.html.erb +0 -2
  188. data/app/views/alchemy/essences/_essence_link_editor.html.erb +0 -30
  189. data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -10
  190. data/app/views/alchemy/essences/_essence_node_editor.html.erb +0 -27
  191. data/app/views/alchemy/essences/_essence_node_view.html.erb +0 -1
  192. data/app/views/alchemy/essences/_essence_page_editor.html.erb +0 -26
  193. data/app/views/alchemy/essences/_essence_page_view.html.erb +0 -5
  194. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +0 -59
  195. data/app/views/alchemy/essences/_essence_picture_view.html.erb +0 -6
  196. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +0 -14
  197. data/app/views/alchemy/essences/_essence_richtext_view.html.erb +0 -4
  198. data/app/views/alchemy/essences/_essence_select_editor.html.erb +0 -28
  199. data/app/views/alchemy/essences/_essence_select_view.html.erb +0 -2
  200. data/app/views/alchemy/essences/_essence_text_editor.html.erb +0 -29
  201. data/app/views/alchemy/essences/_essence_text_view.html.erb +0 -17
  202. data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -4
  203. data/app/views/alchemy/essences/_essence_video_view.html.erb +0 -19
  204. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +0 -59
  205. data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +0 -20
  206. data/app/views/alchemy/pages/show.rss.builder +0 -21
  207. data/db/migrate/20200226213334_alchemy_four_point_four.rb +0 -313
  208. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +0 -11
  209. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +0 -28
  210. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +0 -8
  211. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +0 -27
  212. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +0 -6
  213. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +0 -24
  214. data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +0 -22
  215. data/db/migrate/20200907111332_remove_tri_state_booleans.rb +0 -33
  216. data/db/migrate/20201207131309_create_page_versions.rb +0 -19
  217. data/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +0 -76
  218. data/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb +0 -10
  219. data/db/migrate/20210326105046_add_sanitized_body_to_alchemy_essence_richtexts.rb +0 -7
  220. data/db/migrate/20210406093436_add_alchemy_essence_headlines.rb +0 -12
  221. data/db/migrate/20210506135919_create_essence_audios.rb +0 -19
  222. data/db/migrate/20210506140258_create_essence_videos.rb +0 -23
  223. data/db/migrate/20210508091432_create_alchemy_ingredients.rb +0 -22
  224. data/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb +0 -13
  225. data/db/migrate/20220622130905_add_playsinline_to_alchemy_essence_videos.rb +0 -9
  226. data/lib/alchemy/essence.rb +0 -250
  227. data/lib/alchemy/test_support/essence_shared_examples.rb +0 -271
  228. data/lib/alchemy/test_support/factories/content_factory.rb +0 -20
  229. data/lib/alchemy/test_support/factories/essence_audio_factory.rb +0 -7
  230. data/lib/alchemy/test_support/factories/essence_file_factory.rb +0 -7
  231. data/lib/alchemy/test_support/factories/essence_page_factory.rb +0 -7
  232. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +0 -11
  233. data/lib/alchemy/test_support/factories/essence_text_factory.rb +0 -7
  234. data/lib/alchemy/test_support/factories/essence_video_factory.rb +0 -7
  235. data/lib/alchemy/upgrader/five_point_zero.rb +0 -41
  236. data/lib/alchemy/upgrader/six_point_zero.rb +0 -21
  237. data/lib/alchemy/upgrader/tasks/add_page_versions.rb +0 -33
  238. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +0 -34
  239. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +0 -29
  240. data/lib/alchemy/upgrader/tasks/ingredients_migrator.rb +0 -74
  241. data/lib/generators/alchemy/essence/essence_generator.rb +0 -49
  242. data/lib/generators/alchemy/essence/templates/editor.html.erb +0 -17
  243. data/lib/generators/alchemy/essence/templates/view.html.erb +0 -2
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/upgrader"
4
-
5
- module Alchemy::Upgrader::Tasks
6
- class AddPageVersions < Thor
7
- include Thor::Actions
8
-
9
- no_tasks do
10
- def create_public_page_versions
11
- Alchemy::Deprecation.silence do
12
- Alchemy::Page.where.not(legacy_public_on: nil).find_each do |page|
13
- next if page.versions.published.any?
14
-
15
- Alchemy::Page.transaction do
16
- page.versions.create!(
17
- public_on: page.legacy_public_on,
18
- public_until: page.legacy_public_until
19
- ).tap do |version|
20
- # We must not use .find_each here to not mess up the order of elements
21
- page.draft_version.elements.not_nested.available.each do |element|
22
- Alchemy::Element.copy(element, page_version_id: version.id)
23
- end
24
- end
25
- end
26
-
27
- print "."
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/upgrader"
4
-
5
- module Alchemy::Upgrader::Tasks
6
- class ElementViewsUpdater < Thor
7
- include Thor::Actions
8
-
9
- no_tasks do
10
- def rename_element_views
11
- puts "-- Removing '_view' suffix from element views"
12
-
13
- Dir.glob("#{elements_view_folder}/*_view.*").each do |file|
14
- FileUtils.mv(file, file.to_s.sub(/_view/, ""))
15
- end
16
- end
17
-
18
- def update_local_variable
19
- puts "-- Updating element views local variable to element name"
20
-
21
- Alchemy::Element.definitions.map { |e| e["name"] }.each do |name|
22
- view = Dir.glob("#{elements_view_folder}/_#{name}.*").last
23
- gsub_file(view, /\b#{name}_view\b/, name)
24
- end
25
- end
26
- end
27
-
28
- private
29
-
30
- def elements_view_folder
31
- Rails.root.join("app", "views", "alchemy", "elements")
32
- end
33
- end
34
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
-
5
- module Alchemy::Upgrader::Tasks
6
- class HardenGutentagMigrations < Thor
7
- include Thor::Actions
8
-
9
- no_tasks do
10
- def patch_migrations
11
- sentinel = /def up/
12
-
13
- migration_file = Dir.glob("db/migrate/*_gutentag_tables.gutentag.rb").first
14
- if migration_file
15
- inject_into_file migration_file,
16
- "\n # inserted by Alchemy CMS upgrader\n return if table_exists?(:gutentag_taggings)\n",
17
- { after: sentinel, verbose: true }
18
- end
19
-
20
- migration_file = Dir.glob("db/migrate/*_gutentag_cache_counter.gutentag.rb").first
21
- if migration_file
22
- inject_into_file migration_file,
23
- "\n # inserted by Alchemy CMS upgrader\n return if column_exists?(:gutentag_tags, :taggings_count)\n",
24
- { after: sentinel, verbose: true }
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/upgrader"
4
-
5
- module Alchemy::Upgrader::Tasks
6
- class IngredientsMigrator < Thor
7
- include Thor::Actions
8
-
9
- no_tasks do
10
- def create_ingredients(verbose: !Rails.env.test?)
11
- Alchemy::Deprecation.silence do
12
- elements_with_ingredients = Alchemy::ElementDefinition.all.select { |d| d.key?(:ingredients) }
13
- if ENV["ONLY"]
14
- elements_with_ingredients = elements_with_ingredients.select { |d| d[:name].in? ENV["ONLY"].split(",") }
15
- end
16
- # eager load all elements that have ingredients defined but no ingredient records yet.
17
- all_elements = Alchemy::Element
18
- .named(elements_with_ingredients.map { |d| d[:name] })
19
- .preload(contents: :essence)
20
- .left_outer_joins(:ingredients).where(alchemy_ingredients: { id: nil })
21
- .to_a
22
- elements_with_ingredients.map do |element_definition|
23
- elements = all_elements.select { |e| e.name == element_definition[:name] }
24
- if elements.any?
25
- puts "-- Creating ingredients for #{elements.count} #{element_definition[:name]}(s)" if verbose
26
- elements.each do |element|
27
- MigrateElementIngredients.call(element)
28
- print "." if verbose
29
- end
30
- puts "\n" if verbose
31
- elsif verbose
32
- puts "-- No #{element_definition[:name]} elements found for migration."
33
- end
34
- end
35
- end
36
- end
37
- end
38
-
39
- class MigrateElementIngredients
40
- def self.call(element)
41
- Alchemy::Element.transaction do
42
- element.definition[:ingredients].each do |ingredient_definition|
43
- ingredient = element.ingredients.build(
44
- role: ingredient_definition[:role],
45
- type: Alchemy::Ingredient.normalize_type(ingredient_definition[:type]),
46
- )
47
-
48
- content = element.content_by_name(ingredient_definition[:role])
49
- if content
50
- essence = content.essence
51
- if essence
52
- belongs_to_associations = essence.class.reflect_on_all_associations(:belongs_to)
53
- if belongs_to_associations.any?
54
- ingredient.related_object = essence.public_send(belongs_to_associations.first.name)
55
- else
56
- ingredient.value = content.ingredient
57
- end
58
- data = ingredient.class.stored_attributes.fetch(:data, []).each_with_object({}) do |attr, d|
59
- next unless essence.respond_to?(attr)
60
-
61
- d[attr] = essence.public_send(attr)
62
- end
63
- ingredient.data = data
64
- end
65
- content.destroy!
66
- end
67
-
68
- ingredient.save!
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
- require "rails"
3
-
4
- module Alchemy
5
- module Generators
6
- class EssenceGenerator < ::Rails::Generators::Base
7
- desc "This generator generates an Alchemy essence for you."
8
- argument :essence_name, banner: "YourEssenceName"
9
- source_root File.expand_path("templates", __dir__)
10
-
11
- def init
12
- @essence_name = essence_name.underscore
13
- @essence_view_path = "app/views/alchemy/essences"
14
- end
15
-
16
- def create_model
17
- invoke("model", [@essence_name])
18
- end
19
-
20
- def act_as_essence
21
- essence_class_file = "app/models/#{@essence_name}.rb"
22
- essence_class = @essence_name.classify
23
- inject_into_class essence_class_file, essence_class, <<~CLASSMETHOD
24
- acts_as_essence(
25
- # Your options:
26
- #
27
- # ingredient_column: [String or Symbol] - Specifies the column name you use for storing the content in the database. (Default :body)
28
- # validate_column: [String or Symbol] - Which column should be validated. (Default: ingredient_column)
29
- # preview_text_column: [String or Symbol] - Specifies the column for the preview_text method. (Default: ingredient_column)
30
- # preview_text_method: [String or Symbol] - A method called on ingredient to get the preview text. (Default: ingredient_column)
31
- )
32
- CLASSMETHOD
33
- end
34
-
35
- def copy_templates
36
- essence_name = @essence_name.classify.demodulize.underscore
37
- @essence_editor_local = "#{essence_name}_editor"
38
- template "view.html.erb", "#{@essence_view_path}/_#{essence_name}_view.html.erb"
39
- template "editor.html.erb", "#{@essence_view_path}/_#{essence_name}_editor.html.erb"
40
- end
41
-
42
- def show_todo
43
- say "\nPlease open the generated migration file and add your columns to your table."
44
- say "Then run 'rake db:migrate' to update your database."
45
- say "Also check the generated view files and alter them to fit your needs."
46
- end
47
- end
48
- end
49
- end
@@ -1,17 +0,0 @@
1
- <%%#
2
- Available locals:
3
- * <%= @essence_editor_local %> - A Alchemy::ContentEditor instance
4
-
5
- Please consult Alchemy::Content.rb docs for further methods on the content object
6
- %>
7
- <%%= content_tag :div,
8
- id: <%= @essence_editor_local %>.dom_id,
9
- class: <%= @essence_editor_local %>.css_classes,
10
- data: <%= @essence_editor_local %>.data_attributes do %>
11
- <%%= content_label(<%= @essence_editor_local %>) %>
12
- <%%= text_field_tag(
13
- <%= @essence_editor_local %>.form_field_name,
14
- <%= @essence_editor_local %>.ingredient,
15
- id: <%= @essence_editor_local %>.form_field_id
16
- ) %>
17
- <%% end %>
@@ -1,2 +0,0 @@
1
- <%%# The content object holds the essence %>
2
- <%%= content.ingredient %>