Module: Alchemy::Element::ElementContents
- Included in:
- Alchemy::Element
- Defined in:
- app/models/alchemy/element/element_contents.rb
Overview
Methods concerning contents for elements
Instance Method Summary collapse
- #content_by_name(name) ⇒ Object deprecated Deprecated.
- #content_by_type(essence_type) ⇒ Object deprecated Deprecated.
- #content_definition_for(content_name) ⇒ Object deprecated Deprecated.
- #content_definitions ⇒ Object deprecated Deprecated.
- #content_for_rss_description ⇒ Object deprecated Deprecated.
- #content_for_rss_title ⇒ Object deprecated Deprecated.
- #contents_by_name(name) ⇒ Object (also: #all_contents_by_name) deprecated Deprecated.
- #contents_by_type(essence_type) ⇒ Object (also: #all_contents_by_type) deprecated Deprecated.
- #contents_with_errors ⇒ Object deprecated Deprecated.
- #copy_contents_to(element) ⇒ Object deprecated Deprecated.
- #has_validations? ⇒ Boolean deprecated Deprecated.
- #richtext_contents_ids ⇒ Object deprecated Deprecated.
- #update_contents(contents_attributes) ⇒ Boolean deprecated Deprecated.
Instance Method Details
#content_by_name(name) ⇒ Object
Find first content from element by given name.
10 11 12 |
# File 'app/models/alchemy/element/element_contents.rb', line 10 def content_by_name(name) contents_by_name(name).first end |
#content_by_type(essence_type) ⇒ Object
Find first content from element by given essence type.
18 19 20 |
# File 'app/models/alchemy/element/element_contents.rb', line 18 def content_by_type(essence_type) contents_by_type(essence_type).first end |
#content_definition_for(content_name) ⇒ Object
Returns the definition for given content_name
132 133 134 135 136 137 138 139 |
# File 'app/models/alchemy/element/element_contents.rb', line 132 def content_definition_for(content_name) if content_definitions.blank? log_warning "Element #{name} is missing the content definition for #{content_name}" nil else content_definitions.detect { |d| d["name"] == content_name.to_s } end end |
#content_definitions ⇒ Object
Returns the array with the hashes for all element contents in the elements.yml file
122 123 124 125 126 |
# File 'app/models/alchemy/element/element_contents.rb', line 122 def content_definitions return nil if definition.blank? definition["contents"] end |
#content_for_rss_description ⇒ Object
Returns the content that is marked as rss description.
Mark a content as rss description in your elements.yml
file:
- name: news
contents:
- name: body
type: EssenceRichtext
rss_description: true
114 115 116 |
# File 'app/models/alchemy/element/element_contents.rb', line 114 def content_for_rss_description ("description") end |
#content_for_rss_title ⇒ Object
Returns the content that is marked as rss title.
Mark a content as rss title in your elements.yml
file:
- name: news
contents:
- name: headline
type: EssenceText
rss_title: true
97 98 99 |
# File 'app/models/alchemy/element/element_contents.rb', line 97 def content_for_rss_title ("title") end |
#contents_by_name(name) ⇒ Object Also known as: all_contents_by_name
All contents from element by given name.
26 27 28 |
# File 'app/models/alchemy/element/element_contents.rb', line 26 def contents_by_name(name) contents.select { |content| content.name == name.to_s } end |
#contents_by_type(essence_type) ⇒ Object Also known as: all_contents_by_type
All contents from element by given essence type.
36 37 38 39 40 |
# File 'app/models/alchemy/element/element_contents.rb', line 36 def contents_by_type(essence_type) contents.select do |content| content.essence_type == Content.normalize_essence_type(essence_type) end end |
#contents_with_errors ⇒ Object
All element contents where the essence validation has failed.
172 173 174 |
# File 'app/models/alchemy/element/element_contents.rb', line 172 def contents_with_errors contents.select(&:essence_validation_failed?) end |
#copy_contents_to(element) ⇒ Object
Copy current content’s contents to given target element
78 79 80 81 82 |
# File 'app/models/alchemy/element/element_contents.rb', line 78 def copy_contents_to(element) contents.map do |content| Content.copy(content, element_id: element.id) end end |
#has_validations? ⇒ Boolean
True, if any of the element’s contents has essence validations defined.
164 165 166 |
# File 'app/models/alchemy/element/element_contents.rb', line 164 def has_validations? !contents.detect(&:has_validations?).blank? end |
#richtext_contents_ids ⇒ Object
Returns an array of all EssenceRichtext contents ids from elements
This is used to re-initialize the TinyMCE editor in the element editor.
148 149 150 151 152 153 154 155 156 157 158 |
# File 'app/models/alchemy/element/element_contents.rb', line 148 def richtext_contents_ids # This is not very efficient SQL wise I know, but we need to iterate # recursivly through all descendent elements and I don't know how to do this # in pure SQL. Anyone with a better idea is welcome to submit a patch. ids = contents.select(&:has_tinymce?).collect(&:id) = nested_elements. if .present? ids += .collect(&:richtext_contents_ids) end ids.flatten end |
#update_contents(contents_attributes) ⇒ Boolean
Updates all related contents by calling update_essence
on each of them.
Example
@element.update_contents(
"1" => {ingredient: "Title"},
"2" => {link: "https://google.com"}
)
64 65 66 67 68 69 70 71 72 |
# File 'app/models/alchemy/element/element_contents.rb', line 64 def update_contents(contents_attributes) return true if contents_attributes.nil? contents.each do |content| content_hash = contents_attributes[content.id.to_s] || next content.update_essence(content_hash) || errors.add(:base, :essence_validation_failed) end errors.blank? end |