Class: Alchemy::ElementDefinition
- Inherits:
-
Object
- Object
- Alchemy::ElementDefinition
- Extended by:
- ActiveModel::Translation
- Includes:
- ActiveModel::Attributes, ActiveModel::Model, Hints
- Defined in:
- app/models/alchemy/element_definition.rb
Constant Summary collapse
- DEFAULT_ICON_NAME =
"layout-bottom-2-line"
Class Method Summary collapse
-
.add(definition) ⇒ Object
Add additional page definitions to collection.
-
.all ⇒ Object
Returns the definitions from elements.yml file.
-
.definitions_file_path ⇒ Pathname
The absolute
elements.ymlfile path. -
.get(name) ⇒ Object
Returns one element definition by given name.
- .reset! ⇒ Object
Instance Method Summary collapse
- #attributes ⇒ Object
-
#deprecation_notice ⇒ Object
Returns a deprecation notice for elements marked deprecated.
- #icon_file ⇒ Object
- #icon_file_name ⇒ Object
- #icon_name ⇒ Object
- #ingredients ⇒ Object
Methods included from Hints
Class Method Details
.add(definition) ⇒ Object
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.
66 67 68 69 |
# File 'app/models/alchemy/element_definition.rb', line 66 def add(definition) all @definitions += Array.wrap(definition).map { new(**_1) } end |
.all ⇒ Object
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
51 52 53 |
# File 'app/models/alchemy/element_definition.rb', line 51 def all @definitions ||= read_definitions_file.map { new(**_1) } end |
.definitions_file_path ⇒ Pathname
The absolute elements.yml file path
85 86 87 |
# File 'app/models/alchemy/element_definition.rb', line 85 def definitions_file_path Rails.root.join("config", "alchemy", "elements.yml") end |
.get(name) ⇒ Object
Returns one element definition by given name.
73 74 75 76 77 |
# File 'app/models/alchemy/element_definition.rb', line 73 def get(name) return new if name.blank? all.detect { _1.name.casecmp(name).zero? } end |
.reset! ⇒ Object
79 80 81 |
# File 'app/models/alchemy/element_definition.rb', line 79 def reset! @definitions = nil end |
Instance Method Details
#attributes ⇒ Object
115 116 117 |
# File 'app/models/alchemy/element_definition.rb', line 115 def attributes super.with_indifferent_access end |
#deprecation_notice ⇒ Object
Returns a deprecation notice for elements marked deprecated
You can either use localizations or pass a String as notice in the element definition.
Custom deprecation notices
Use general element deprecation notice
- name: old_element
deprecated: true
Add a translation to your locale file for a per element notice.
en:
alchemy:
element_deprecation_notices:
old_element: Foo baz is deprecated
or use the global translation that apply to all deprecated elements.
en:
alchemy:
element_deprecation_notice: Foo baz is deprecated
or pass string as deprecation notice.
- name: old_element
deprecated: This element will be removed soon.
153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'app/models/alchemy/element_definition.rb', line 153 def deprecation_notice case deprecated when String deprecated when TrueClass Alchemy.t( name, scope: :element_deprecation_notices, default: Alchemy.t(:element_deprecated) ) end end |
#icon_file ⇒ Object
166 167 168 |
# File 'app/models/alchemy/element_definition.rb', line 166 def icon_file @_icon_file ||= File.read(icon_file_path).html_safe end |
#icon_file_name ⇒ Object
170 171 172 |
# File 'app/models/alchemy/element_definition.rb', line 170 def icon_file_name "#{icon_name}.svg" end |
#icon_name ⇒ Object
174 175 176 177 178 179 180 |
# File 'app/models/alchemy/element_definition.rb', line 174 def icon_name case icon when TrueClass then name when String then icon else DEFAULT_ICON_NAME end end |
#ingredients ⇒ Object
119 120 121 |
# File 'app/models/alchemy/element_definition.rb', line 119 def ingredients super.map { IngredientDefinition.new(**_1) } end |