Sha256: a4a6bb52906258c95079de73b00622a0a9f5f081917e9f245380ee773d372c01

Contents?: true

Size: 1.91 KB

Versions: 19

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module Alchemy
  class ElementDefinition
    class << self
      # Returns the definitions from elements.yml file.
      #
      # Place a +elements.yml+ file inside your apps +config/alchemy+ folder to define
      # your own set of elements
      #
      def all
        @definitions ||= read_definitions_file.map(&:with_indifferent_access)
      end

      # Add additional page definitions to collection.
      #
      # Useful for extending the elements from an Alchemy module.
      #
      # === Usage Example
      #
      #   Call +Alchemy::ElementDefinition.add(your_definition)+ in your engine.rb file.
      #
      # @param [Array || Hash]
      #   You can pass a single element definition as Hash, or a collection of elements as Array.
      #
      def add(element)
        all
        if element.is_a?(Array)
          @definitions += element
        elsif element.is_a?(Hash)
          @definitions << element
        else
          raise TypeError
        end
      end

      # Returns one element definition by given name.
      #
      def get(name)
        return {} if name.blank?

        all.detect { |a| a["name"] == name }
      end

      def reset!
        @definitions = nil
      end

      # The absolute +elements.yml+ file path
      # @return [Pathname]
      def definitions_file_path
        Rails.root.join("config", "alchemy", "elements.yml")
      end

      private

      # Reads the element definitions from +config/alchemy/elements.yml+.
      #
      def read_definitions_file
        if File.exist?(definitions_file_path)
          YAML.safe_load(
            ERB.new(File.read(definitions_file_path)).result,
            permitted_classes: YAML_PERMITTED_CLASSES,
            aliases: true
          ) || []
        else
          raise LoadError,
            "Could not find elements.yml file! Please run `rails generate alchemy:install`"
        end
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
alchemy_cms-7.4.2 lib/alchemy/element_definition.rb
alchemy_cms-7.3.6 lib/alchemy/element_definition.rb
alchemy_cms-7.2.9 lib/alchemy/element_definition.rb
alchemy_cms-7.4.1 lib/alchemy/element_definition.rb
alchemy_cms-7.4.0 lib/alchemy/element_definition.rb
alchemy_cms-7.3.5 lib/alchemy/element_definition.rb
alchemy_cms-7.2.8 lib/alchemy/element_definition.rb
alchemy_cms-7.3.4 lib/alchemy/element_definition.rb
alchemy_cms-7.3.3 lib/alchemy/element_definition.rb
alchemy_cms-7.3.2 lib/alchemy/element_definition.rb
alchemy_cms-7.2.7 lib/alchemy/element_definition.rb
alchemy_cms-7.3.1 lib/alchemy/element_definition.rb
alchemy_cms-7.3.0 lib/alchemy/element_definition.rb
alchemy_cms-7.2.6 lib/alchemy/element_definition.rb
alchemy_cms-7.2.5 lib/alchemy/element_definition.rb
alchemy_cms-7.2.4 lib/alchemy/element_definition.rb
alchemy_cms-7.2.3 lib/alchemy/element_definition.rb
alchemy_cms-7.2.2 lib/alchemy/element_definition.rb
alchemy_cms-7.2.1 lib/alchemy/element_definition.rb