Module: Alchemy

Extended by:
ConfigMissing
Includes:
ConfigMissing
Defined in:
lib/alchemy/paths.rb,
lib/alchemy.rb,
lib/alchemy/i18n.rb,
lib/alchemy/hints.rb,
lib/alchemy/shell.rb,
lib/alchemy/engine.rb,
lib/alchemy/errors.rb,
lib/alchemy/logger.rb,
lib/alchemy/seeder.rb,
lib/alchemy/modules.rb,
lib/alchemy/tinymce.rb,
lib/alchemy/version.rb,
lib/alchemy/taggable.rb,
lib/alchemy/upgrader.rb,
lib/alchemy/filetypes.rb,
app/models/alchemy/tag.rb,
lib/alchemy/tasks/tidy.rb,
app/models/alchemy/node.rb,
app/models/alchemy/page.rb,
app/models/alchemy/site.rb,
lib/alchemy/deprecation.rb,
lib/alchemy/permissions.rb,
lib/alchemy/tasks/usage.rb,
lib/alchemy/admin/locale.rb,
lib/alchemy/svg_scrubber.rb,
lib/alchemy/test_support.rb,
app/jobs/alchemy/base_job.rb,
lib/alchemy/configuration.rb,
lib/alchemy/forms/builder.rb,
lib/alchemy/install/tasks.rb,
app/models/alchemy/current.rb,
app/models/alchemy/element.rb,
app/models/alchemy/message.rb,
app/models/alchemy/picture.rb,
lib/alchemy/auth_accessors.rb,
lib/alchemy/config_missing.rb,
lib/alchemy/error_tracking.rb,
lib/alchemy/on_page_layout.rb,
app/models/alchemy/language.rb,
app/models/alchemy/resource.rb,
lib/alchemy/elements_finder.rb,
lib/generators/alchemy/base.rb,
lib/alchemy/name_conversions.rb,
app/models/alchemy/attachment.rb,
app/models/alchemy/ingredient.rb,
app/models/alchemy/page_mutex.rb,
lib/alchemy/admin/preview_url.rb,
app/helpers/alchemy/url_helper.rb,
app/models/alchemy/base_record.rb,
app/models/alchemy/folded_page.rb,
app/models/alchemy/site/layout.rb,
app/services/alchemy/copy_page.rb,
lib/alchemy/controller_actions.rb,
app/helpers/alchemy/base_helper.rb,
app/mailers/alchemy/base_mailer.rb,
app/models/alchemy/page_version.rb,
lib/alchemy/configurations/main.rb,
lib/alchemy/routing_constraints.rb,
lib/alchemy/upgrader/eight_zero.rb,
app/helpers/alchemy/pages_helper.rb,
app/models/alchemy/eager_loading.rb,
app/models/alchemy/page/url_path.rb,
app/models/alchemy/picture_thumb.rb,
app/components/alchemy/admin/icon.rb,
app/jobs/alchemy/publish_page_job.rb,
app/models/alchemy/page/publisher.rb,
lib/alchemy/configuration_methods.rb,
lib/alchemy/configurations/mailer.rb,
app/models/alchemy/element_to_page.rb,
app/models/alchemy/page_definition.rb,
app/models/alchemy/picture_variant.rb,
app/models/alchemy/storage_adapter.rb,
lib/alchemy/configurations/preview.rb,
lib/alchemy/configurations/sitemap.rb,
app/helpers/alchemy/elements_helper.rb,
app/jobs/alchemy/delete_picture_job.rb,
app/mailers/alchemy/messages_mailer.rb,
app/models/alchemy/ingredients/file.rb,
app/models/alchemy/ingredients/html.rb,
app/models/alchemy/ingredients/link.rb,
app/models/alchemy/ingredients/node.rb,
app/models/alchemy/ingredients/page.rb,
app/models/alchemy/ingredients/text.rb,
app/models/alchemy/page/definitions.rb,
app/models/alchemy/page/page_naming.rb,
app/models/alchemy/page/page_scopes.rb,
app/models/concerns/alchemy/dom_ids.rb,
app/services/alchemy/update_checker.rb,
lib/alchemy/configurations/uploader.rb,
lib/alchemy/propshaft/tinymce_asset.rb,
app/components/alchemy/admin/message.rb,
app/helpers/alchemy/resources_helper.rb,
app/models/alchemy/ingredients/audio.rb,
app/models/alchemy/ingredients/video.rb,
app/models/alchemy/page/page_natures.rb,
app/models/alchemy/picture_thumb/uid.rb,
app/services/alchemy/delete_elements.rb,
app/services/alchemy/tag_validations.rb,
lib/alchemy/configurations/importmap.rb,
app/decorators/alchemy/element_editor.rb,
app/helpers/alchemy/admin/base_helper.rb,
app/helpers/alchemy/admin/form_helper.rb,
app/helpers/alchemy/admin/tags_helper.rb,
app/models/alchemy/admin/filters/base.rb,
app/models/alchemy/element/presenters.rb,
app/models/alchemy/element_definition.rb,
app/models/alchemy/ingredients/number.rb,
app/models/alchemy/ingredients/select.rb,
app/models/alchemy/page/page_elements.rb,
lib/alchemy/configuration/base_option.rb,
lib/alchemy/configurations/page_cache.rb,
app/helpers/alchemy/admin/pages_helper.rb,
app/models/alchemy/admin/resource_name.rb,
app/models/alchemy/element/definitions.rb,
app/models/alchemy/elements_repository.rb,
app/models/alchemy/ingredients/boolean.rb,
app/models/alchemy/ingredients/picture.rb,
app/models/alchemy/picture_description.rb,
app/models/alchemy/searchable_resource.rb,
app/services/alchemy/duplicate_element.rb,
lib/alchemy/configuration/class_option.rb,
app/controllers/alchemy/base_controller.rb,
app/models/alchemy/admin/filters/select.rb,
app/models/alchemy/ingredient_validator.rb,
app/models/alchemy/ingredients/datetime.rb,
app/models/alchemy/ingredients/headline.rb,
app/models/alchemy/ingredients/richtext.rb,
app/models/alchemy/picture_thumb/create.rb,
app/serializers/alchemy/base_serializer.rb,
app/serializers/alchemy/node_serializer.rb,
app/serializers/alchemy/page_serializer.rb,
app/serializers/alchemy/site_serializer.rb,
lib/alchemy/configuration/regexp_option.rb,
lib/alchemy/configuration/string_option.rb,
lib/alchemy/configuration/symbol_option.rb,
lib/alchemy/configurations/default_site.rb,
lib/alchemy/error_tracking/error_logger.rb,
app/components/alchemy/admin/list_filter.rb,
app/components/alchemy/admin/node_select.rb,
app/components/alchemy/admin/page_select.rb,
app/controllers/alchemy/pages_controller.rb,
app/decorators/alchemy/ingredient_editor.rb,
app/models/alchemy/ingredient_definition.rb,
app/models/alchemy/page/fixed_attributes.rb,
lib/alchemy/configuration/boolean_option.rb,
lib/alchemy/configuration/integer_option.rb,
lib/alchemy/test_support/config_stubbing.rb,
app/components/alchemy/admin/update_check.rb,
app/helpers/alchemy/admin/pictures_helper.rb,
app/helpers/alchemy/elements_block_helper.rb,
app/models/alchemy/admin/filters/checkbox.rb,
app/models/alchemy/image_cropper_settings.rb,
lib/alchemy/configuration/pathname_option.rb,
lib/alchemy/test_support/capybara_helpers.rb,
app/components/alchemy/admin/locale_select.rb,
app/components/alchemy/admin/resource/cell.rb,
app/models/alchemy/picture_thumb/signature.rb,
app/models/concerns/alchemy/touch_elements.rb,
app/serializers/alchemy/element_serializer.rb,
app/serializers/alchemy/picture_serializer.rb,
lib/alchemy/cache_digests/template_tracker.rb,
lib/alchemy/configurations/format_matchers.rb,
lib/alchemy/dragonfly/processors/thumbnail.rb,
app/components/alchemy/admin/element_select.rb,
app/components/alchemy/admin/resource/table.rb,
app/components/alchemy/admin/toolbar_button.rb,
app/controllers/alchemy/api/base_controller.rb,
app/controllers/alchemy/messages_controller.rb,
app/helpers/alchemy/admin/navigation_helper.rb,
app/models/alchemy/admin/filters/datepicker.rb,
app/models/alchemy/picture_thumb/file_store.rb,
app/serializers/alchemy/language_serializer.rb,
lib/alchemy/configuration/collection_option.rb,
lib/alchemy/configurations/default_language.rb,
lib/alchemy/dev_support/live_reload_watcher.rb,
lib/alchemy/on_page_layout/callbacks_runner.rb,
app/components/alchemy/admin/resource/action.rb,
app/components/alchemy/admin/resource/header.rb,
app/components/alchemy/ingredients/base_view.rb,
app/components/alchemy/ingredients/file_view.rb,
app/components/alchemy/ingredients/html_view.rb,
app/components/alchemy/ingredients/link_view.rb,
app/components/alchemy/ingredients/node_view.rb,
app/components/alchemy/ingredients/page_view.rb,
app/components/alchemy/ingredients/text_view.rb,
app/controllers/alchemy/api/nodes_controller.rb,
app/controllers/alchemy/api/pages_controller.rb,
app/helpers/alchemy/admin/attachments_helper.rb,
app/helpers/alchemy/admin/ingredients_helper.rb,
app/models/alchemy/storage_adapter/dragonfly.rb,
app/serializers/alchemy/page_node_serializer.rb,
app/serializers/alchemy/page_tree_serializer.rb,
app/services/alchemy/update_checks/ruby_gems.rb,
lib/alchemy/dragonfly/processors/auto_orient.rb,
lib/alchemy/dragonfly/processors/crop_resize.rb,
lib/alchemy/test_support/integration_helpers.rb,
lib/generators/alchemy/menus/menus_generator.rb,
lib/generators/alchemy/views/views_generator.rb,
app/components/alchemy/admin/link_dialog/tabs.rb,
app/components/alchemy/ingredients/audio_view.rb,
app/components/alchemy/ingredients/video_view.rb,
app/controllers/alchemy/admin/base_controller.rb,
app/controllers/alchemy/admin/tags_controller.rb,
app/serializers/alchemy/attachment_serializer.rb,
app/serializers/alchemy/ingredient_serializer.rb,
app/components/alchemy/admin/attachment_select.rb,
app/components/alchemy/admin/tags_autocomplete.rb,
app/components/alchemy/ingredients/number_view.rb,
app/components/alchemy/ingredients/select_view.rb,
app/controllers/alchemy/admin/nodes_controller.rb,
app/controllers/alchemy/admin/pages_controller.rb,
app/controllers/alchemy/admin/sites_controller.rb,
app/controllers/alchemy/attachments_controller.rb,
app/models/alchemy/element/element_ingredients.rb,
app/models/concerns/alchemy/picture_thumbnails.rb,
app/models/concerns/alchemy/relatable_resource.rb,
app/services/alchemy/update_checks/alchemy_app.rb,
lib/alchemy/configuration/configuration_option.rb,
lib/generators/alchemy/module/module_generator.rb,
app/components/alchemy/ingredients/boolean_view.rb,
app/components/alchemy/ingredients/picture_view.rb,
app/controllers/alchemy/api/elements_controller.rb,
app/controllers/concerns/alchemy/site_redirects.rb,
app/components/alchemy/ingredients/datetime_view.rb,
app/components/alchemy/ingredients/headline_view.rb,
app/components/alchemy/ingredients/richtext_view.rb,
lib/generators/alchemy/install/install_generator.rb,
app/components/alchemy/admin/link_dialog/base_tab.rb,
app/components/alchemy/admin/link_dialog/file_tab.rb,
app/controllers/alchemy/admin/elements_controller.rb,
app/controllers/alchemy/admin/pictures_controller.rb,
app/models/alchemy/storage_adapter/active_storage.rb,
app/controllers/alchemy/admin/clipboard_controller.rb,
app/controllers/alchemy/admin/dashboard_controller.rb,
app/controllers/alchemy/admin/languages_controller.rb,
app/controllers/alchemy/admin/resources_controller.rb,
app/controllers/alchemy/api/attachments_controller.rb,
app/controllers/alchemy/api/ingredients_controller.rb,
app/controllers/concerns/alchemy/admin/crop_action.rb,
app/services/alchemy/dragonfly_to_image_processing.rb,
lib/generators/alchemy/elements/elements_generator.rb,
app/components/alchemy/admin/link_dialog/anchor_tab.rb,
app/components/alchemy/admin/resource/select_filter.rb,
app/controllers/alchemy/admin/styleguide_controller.rb,
app/components/alchemy/admin/resource/applied_filter.rb,
app/controllers/alchemy/admin/attachments_controller.rb,
app/controllers/alchemy/admin/ingredients_controller.rb,
app/controllers/alchemy/admin/layoutpages_controller.rb,
app/components/alchemy/admin/link_dialog/external_tab.rb,
app/components/alchemy/admin/link_dialog/internal_tab.rb,
app/components/alchemy/admin/resource/checkbox_filter.rb,
app/controllers/alchemy/admin/update_checks_controller.rb,
app/controllers/concerns/alchemy/admin/archive_overlay.rb,
app/controllers/concerns/alchemy/admin/resource_filter.rb,
app/controllers/concerns/alchemy/legacy_page_redirects.rb,
lib/generators/alchemy/ingredient/ingredient_generator.rb,
app/components/alchemy/admin/resource/datepicker_filter.rb,
app/components/concerns/alchemy/ingredients/link_target.rb,
app/controllers/concerns/alchemy/admin/current_language.rb,
app/models/alchemy/storage_adapter/dragonfly/picture_url.rb,
app/controllers/alchemy/admin/legacy_page_urls_controller.rb,
app/controllers/concerns/alchemy/admin/uploader_responses.rb,
app/models/alchemy/storage_adapter/dragonfly/preprocessor.rb,
lib/generators/alchemy/page_layouts/page_layouts_generator.rb,
lib/generators/alchemy/site_layouts/site_layouts_generator.rb,
app/models/alchemy/storage_adapter/dragonfly/attachment_url.rb,
app/controllers/alchemy/admin/picture_descriptions_controller.rb,
app/models/alchemy/storage_adapter/active_storage/picture_url.rb,
app/models/alchemy/storage_adapter/active_storage/preprocessor.rb,
app/jobs/alchemy/storage_adapter/active_storage/sanitize_svg_job.rb,
app/models/alchemy/storage_adapter/active_storage/attachment_url.rb,
app/controllers/concerns/alchemy/admin/picture_descriptions_form_helper.rb

Overview

This is the main Alchemy controller all other controllers inherit from.

Defined Under Namespace

Modules: AbilityHelper, Admin, BaseHelper, CacheDigests, ConfigMissing, ConfigurationMethods, Configurations, ControllerActions, DomIds, Dragonfly, DragonflyToImageProcessing, ElementsBlockHelper, ElementsHelper, ErrorTracking, Filetypes, Forms, Generators, Hints, I18n, Ingredients, Install, LegacyPageRedirects, Logger, Modules, NameConversions, OnPageLayout, PagesHelper, PictureThumbnails, Propshaft, RelatableResource, ResourcesHelper, SearchableResource, Shell, SiteRedirects, Taggable, Tasks, TestSupport, Tinymce, TouchElements, UpdateChecks, UrlHelper Classes: Attachment, AttachmentSerializer, AttachmentsController, BaseController, BaseJob, BaseMailer, BaseRecord, BaseSerializer, Configuration, CopyPage, Current, DefaultLanguageNotFoundError, DefaultSiteNotFoundError, DeleteElements, DeletePictureJob, DuplicateElement, EagerLoading, Element, ElementDefinition, ElementDefinitionError, ElementEditor, ElementSerializer, ElementToPage, ElementsFinder, ElementsRepository, Engine, FoldedPage, ImageCropperSettings, Ingredient, IngredientDefinition, IngredientEditor, IngredientSerializer, IngredientValidator, Language, LanguageSerializer, LegacyPageUrl, LiveReloadWatcher, Message, MessagesController, MessagesMailer, MissingActiveRecordAssociation, MissingImageFileError, NoCurrentUserFoundError, Node, NodeSerializer, NotMountedError, Page, PageDefinition, PageMutex, PageNodeSerializer, PageSerializer, PageTreeSerializer, PageVersion, PagesController, Permissions, Picture, PictureDescription, PictureInUseError, PictureSerializer, PictureThumb, PictureVariant, PublishPageJob, Resource, RoutingConstraints, Seeder, Site, SiteSerializer, StorageAdapter, SvgScrubber, Tag, TagValidations, Tidy, TinymceError, UnsupportedPageVersion, UpdateChecker, UpdateServiceUnavailable, Upgrader, WrongImageFormatError

Constant Summary collapse

YAML_PERMITTED_CLASSES =
%w[Symbol Date Regexp]
VERSION =
"8.0.0"
Deprecation =
ActiveSupport::Deprecation.new("9.0", "Alchemy")
@@admin_path =

Defaults

"admin"
@@admin_constraints =
{}
@@user_class_name =

Defaults

"User"
@@user_class_primary_key =
:id
@@current_user_method =
"current_user"
@@signup_path =
"/signup"
@@login_path =
"/login"
@@logout_path =
"/logout"
@@logout_method =
"delete"
@@unauthorized_path =
"/"

Instance Attribute Summary collapse

Class Method Summary collapse

Methods included from ConfigMissing

const_missing

Instance Attribute Details

#importmapObject

JS Importmap instance



15
16
17
# File 'lib/alchemy.rb', line 15

def importmap
  @importmap
end

Class Method Details

.configObject



21
22
23
# File 'lib/alchemy.rb', line 21

def config
  @_config ||= Alchemy::Configurations::Main.new
end

.configure {|config| ... } ⇒ Object

Yields:



25
26
27
# File 'lib/alchemy.rb', line 25

def configure(&blk)
  yield config
end

.enable_searchableObject



30
# File 'lib/alchemy.rb', line 30

def enable_searchable = config.show_page_searchable_checkbox

.enable_searchable=(other) ⇒ Object



33
34
35
# File 'lib/alchemy.rb', line 33

def enable_searchable=(other)
  config.show_page_searchable_checkbox = other
end

.gem_versionObject



10
11
12
# File 'lib/alchemy/version.rb', line 10

def self.gem_version
  Gem::Version.new(VERSION)
end

.register_ability(klass) ⇒ Object

Register a CanCan Ability class



124
125
126
127
# File 'lib/alchemy/auth_accessors.rb', line 124

def self.register_ability(klass)
  @abilities ||= []
  @abilities << klass
end

.registered_abilitiesObject

All CanCan Ability classes registered to Alchemy



131
132
133
# File 'lib/alchemy/auth_accessors.rb', line 131

def self.registered_abilities
  @abilities ||= []
end

.t(msg, **kwargs) ⇒ Object

Alchemy shortcut translation method

Instead of having to call:

Alchemy::I18n.translate(:hello)

You can use this shortcut method:

Alchemy.t(:hello)


15
16
17
# File 'lib/alchemy/i18n.rb', line 15

def t(msg, **kwargs)
  Alchemy::I18n.translate(msg, **kwargs)
end

.table_name_prefixObject



4
5
6
# File 'app/models/alchemy/base_record.rb', line 4

def self.table_name_prefix
  "alchemy_"
end

.user_classObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/alchemy/auth_accessors.rb', line 94

def self.user_class
  @@user_class ||= begin
    @@user_class_name.constantize
  rescue NameError => e
    if /#{Regexp.escape(@@user_class_name)}/.match?(e.message)
      Rails.logger.warn <<~MSG
        #{e.message}
        #{e.backtrace.join("\n")}

        AlchemyCMS cannot find any user class!

        Please add a user class and tell Alchemy about it:

            # config/initializers/alchemy.rb
            Alchemy.user_class_name = 'MyUser'

        Or add the `alchemy-devise` gem to your Gemfile:

            bundle add alchemy-devise

      MSG
      nil
    else
      raise e
    end
  end
end

.user_class_nameObject

Prefix with

when getting to avoid constant name conflicts



82
83
84
85
86
87
88
# File 'lib/alchemy/auth_accessors.rb', line 82

def self.user_class_name
  if !@@user_class_name.is_a?(String)
    raise TypeError, "Alchemy.user_class_name must be a String, not a Class."
  end

  "::#{@@user_class_name}"
end

.user_class_name=(user_class_name) ⇒ Object



90
91
92
# File 'lib/alchemy/auth_accessors.rb', line 90

def self.user_class_name=(user_class_name)
  @@user_class_name = user_class_name
end

.versionObject



6
7
8
# File 'lib/alchemy/version.rb', line 6

def self.version
  VERSION
end