Class: Alchemy::Content
- Inherits:
-
BaseRecord
- Object
- ActiveRecord::Base
- BaseRecord
- Alchemy::Content
- Defined in:
- app/models/alchemy/content.rb
Defined Under Namespace
Modules: Factory
Class Method Summary collapse
-
.translated_label_for(content_name, element_name = nil) ⇒ Object
Returns the translated label for a content name.
Instance Method Summary collapse
-
#default_value(default = ) ⇒ Object
Returns the default value from content definition.
- #deprecated? ⇒ Boolean
-
#dom_id ⇒ Object
Returns a string used as dom id on html elements.
- #essence_partial_name ⇒ Object
- #essence_validation_failed? ⇒ Boolean
-
#has_custom_tinymce_config? ⇒ Boolean
Returns true if there is a tinymce setting defined that contains settings.
-
#has_tinymce? ⇒ Boolean
Returns true if there is a tinymce setting defined on the content definiton or if the
essence.has_tinymce?
returns true. - #has_validations? ⇒ Boolean
-
#ingredient ⇒ Object
Gets the ingredient from essence.
-
#ingredient=(value) ⇒ Object
Sets the ingredient from essence.
- #linked? ⇒ Boolean
-
#name_for_label ⇒ Object
Returns the translated name for displaying in labels, etc.
- #normalized_essence_type ⇒ Object
-
#preview_content? ⇒ Boolean
Returns true if this content should be taken for element preview.
-
#preview_text(maxlength = 30) ⇒ Object
Proxy method that returns the preview text from essence.
-
#serialize ⇒ Object
Serialized object representation for json api.
-
#serialized_ingredient ⇒ Object
Ingredient value from essence for json api.
-
#settings ⇒ Object
Settings from the elements.yml definition.
-
#settings_value(key, options = {}) ⇒ Object
Fetches value from settings.
- #siblings ⇒ Object
-
#tinymce_class_name ⇒ Object
Returns css class names for the content textarea.
-
#to_partial_path ⇒ Object
The content’s view partial is dependent from its name.
-
#update_essence(params = {}) ⇒ Object
Updates the essence.
Methods included from Factory
#build_essence, #create_essence!, #definition
Methods included from Hints
Methods included from Logger
Class Method Details
.translated_label_for(content_name, element_name = nil) ⇒ Object
Returns the translated label for a content name.
Translate it in your locale yml file:
alchemy:
content_names:
foo: Bar
Optionally you can scope your content name to an element:
alchemy:
content_names:
article:
foo: Baz
70 71 72 73 74 75 76 |
# File 'app/models/alchemy/content.rb', line 70 def translated_label_for(content_name, element_name = nil) Alchemy.t( content_name, scope: "content_names.#{element_name}", default: Alchemy.t("content_names.#{content_name}", default: content_name.humanize), ) end |
Instance Method Details
#default_value(default = ) ⇒ Object
Returns the default value from content definition
If the value is a symbol it gets passed through i18n inside the alchemy.default_content_texts
scope
240 241 242 243 244 245 246 247 |
# File 'app/models/alchemy/content.rb', line 240 def default_value(default = definition[:default]) case default when Symbol Alchemy.t(default, scope: :default_content_texts) else default end end |
#deprecated? ⇒ Boolean
195 196 197 |
# File 'app/models/alchemy/content.rb', line 195 def deprecated? !!definition["deprecated"] end |
#dom_id ⇒ Object
Returns a string used as dom id on html elements.
180 181 182 183 184 |
# File 'app/models/alchemy/content.rb', line 180 def dom_id return "" if essence.nil? "#{essence_partial_name}_#{id}" end |
#essence_partial_name ⇒ Object
210 211 212 213 214 |
# File 'app/models/alchemy/content.rb', line 210 def essence_partial_name return "" if essence.nil? essence.partial_name end |
#essence_validation_failed? ⇒ Boolean
171 172 173 |
# File 'app/models/alchemy/content.rb', line 171 def essence_validation_failed? essence.errors.any? end |
#has_custom_tinymce_config? ⇒ Boolean
Returns true if there is a tinymce setting defined that contains settings.
227 228 229 |
# File 'app/models/alchemy/content.rb', line 227 def has_custom_tinymce_config? settings[:tinymce].is_a?(Hash) end |
#has_tinymce? ⇒ Boolean
Returns true if there is a tinymce setting defined on the content definiton or if the essence.has_tinymce?
returns true.
222 223 224 |
# File 'app/models/alchemy/content.rb', line 222 def has_tinymce? settings[:tinymce].present? || (essence.present? && essence.has_tinymce?) end |
#has_validations? ⇒ Boolean
175 176 177 |
# File 'app/models/alchemy/content.rb', line 175 def has_validations? definition["validate"].present? end |
#ingredient ⇒ Object
Gets the ingredient from essence
122 123 124 125 126 |
# File 'app/models/alchemy/content.rb', line 122 def ingredient return nil if essence.nil? essence.ingredient end |
#ingredient=(value) ⇒ Object
Sets the ingredient from essence
148 149 150 151 152 |
# File 'app/models/alchemy/content.rb', line 148 def ingredient=(value) raise EssenceMissingError if essence.nil? essence.ingredient = value end |
#linked? ⇒ Boolean
191 192 193 |
# File 'app/models/alchemy/content.rb', line 191 def linked? essence && !essence.link.blank? end |
#name_for_label ⇒ Object
Returns the translated name for displaying in labels, etc.
187 188 189 |
# File 'app/models/alchemy/content.rb', line 187 def name_for_label self.class.translated_label_for(name, element.name) end |
#normalized_essence_type ⇒ Object
216 217 218 |
# File 'app/models/alchemy/content.rb', line 216 def normalized_essence_type self.class.normalize_essence_type(essence_type) end |
#preview_content? ⇒ Boolean
Returns true if this content should be taken for element preview.
200 201 202 |
# File 'app/models/alchemy/content.rb', line 200 def preview_content? !!definition["as_element_title"] end |
#preview_text(maxlength = 30) ⇒ Object
Proxy method that returns the preview text from essence.
206 207 208 |
# File 'app/models/alchemy/content.rb', line 206 def preview_text(maxlength = 30) essence.preview_text(maxlength) end |
#serialize ⇒ Object
Serialized object representation for json api
130 131 132 133 134 135 136 |
# File 'app/models/alchemy/content.rb', line 130 def serialize { name: name, value: serialized_ingredient, link: essence.try(:link), }.delete_if { |_k, v| v.blank? } end |
#serialized_ingredient ⇒ Object
Ingredient value from essence for json api
If the essence responds to serialized_ingredient
method it takes this otherwise it uses the ingredient column.
143 144 145 |
# File 'app/models/alchemy/content.rb', line 143 def serialized_ingredient essence.try(:serialized_ingredient) || ingredient end |
#settings ⇒ Object
Settings from the elements.yml definition
99 100 101 102 103 |
# File 'app/models/alchemy/content.rb', line 99 def settings return {} if definition.blank? @settings ||= definition.fetch(:settings, {}) end |
#settings_value(key, options = {}) ⇒ Object
Fetches value from settings
111 112 113 |
# File 'app/models/alchemy/content.rb', line 111 def settings_value(key, = {}) settings.update( || {}).symbolize_keys[key.to_sym] end |
#siblings ⇒ Object
115 116 117 118 119 |
# File 'app/models/alchemy/content.rb', line 115 def siblings return [] if !element element.contents end |
#tinymce_class_name ⇒ Object
Returns css class names for the content textarea.
232 233 234 |
# File 'app/models/alchemy/content.rb', line 232 def tinymce_class_name "has_tinymce" + (has_custom_tinymce_config? ? " #{element.name}_#{name}" : "") end |
#to_partial_path ⇒ Object
The content’s view partial is dependent from its name
Define contents
Contents are defined in the config/alchemy/elements.yml
file
- name: article
contents:
- name: headline
type: EssenceText
Override the view
Content partials live in app/views/alchemy/essences
94 95 96 |
# File 'app/models/alchemy/content.rb', line 94 def to_partial_path "alchemy/essences/#{essence_partial_name}_view" end |
#update_essence(params = {}) ⇒ Object
Updates the essence.
Called from Alchemy::Element#update_contents
Adds errors to self.base if essence validation fails.
160 161 162 163 164 165 166 167 168 169 |
# File 'app/models/alchemy/content.rb', line 160 def update_essence(params = {}) raise EssenceMissingError if essence.nil? if essence.update(params) true else errors.add(:essence, :validation_failed) false end end |