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
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.yml
file 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.
59 60 61 62 |
# File 'app/models/alchemy/element_definition.rb', line 59 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
44 45 46 |
# File 'app/models/alchemy/element_definition.rb', line 44 def all @definitions ||= read_definitions_file.map { new(**_1) } end |
.definitions_file_path ⇒ Pathname
The absolute elements.yml
file path
78 79 80 |
# File 'app/models/alchemy/element_definition.rb', line 78 def definitions_file_path Rails.root.join("config", "alchemy", "elements.yml") end |
.get(name) ⇒ Object
Returns one element definition by given name.
66 67 68 69 70 |
# File 'app/models/alchemy/element_definition.rb', line 66 def get(name) return new if name.blank? all.detect { _1.name.casecmp(name).zero? } end |
.reset! ⇒ Object
72 73 74 |
# File 'app/models/alchemy/element_definition.rb', line 72 def reset! @definitions = nil end |
Instance Method Details
#attributes ⇒ Object
108 109 110 |
# File 'app/models/alchemy/element_definition.rb', line 108 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 widget is deprecated
or use the global translation that apply to all deprecated elements.
en:
alchemy:
element_deprecation_notice: Foo baz widget is deprecated
or pass string as deprecation notice.
- name: old_element
deprecated: This element will be removed soon.
146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'app/models/alchemy/element_definition.rb', line 146 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
159 160 161 |
# File 'app/models/alchemy/element_definition.rb', line 159 def icon_file @_icon_file ||= File.read(icon_file_path).html_safe end |
#icon_file_name ⇒ Object
163 164 165 |
# File 'app/models/alchemy/element_definition.rb', line 163 def icon_file_name "#{icon_name}.svg" end |
#icon_name ⇒ Object
167 168 169 170 171 172 173 174 |
# File 'app/models/alchemy/element_definition.rb', line 167 def icon_name case icon when TrueClass then name when String then icon else "default" end end |
#ingredients ⇒ Object
112 113 114 |
# File 'app/models/alchemy/element_definition.rb', line 112 def ingredients super.map { IngredientDefinition.new(**_1) } end |