Class: Layout
- Inherits:
-
Record
- Object
- AbstractRecord
- MongoRecord
- SiteRecord
- Record
- Layout
- Defined in:
- lib/yodel/models/pages/layout.rb
Direct Known Subclasses
Constant Summary collapse
- MAX_LOCK_ATTEMPTS =
FIXME: is this appropriate? how long does each attempt take?
1000
Constants inherited from AbstractRecord
AbstractRecord::CALLBACKS, AbstractRecord::FIELD_CALLBACKS, AbstractRecord::ORDERS
Instance Attribute Summary
Attributes inherited from Record
#mixins, #model, #model_record, #real_record
Attributes inherited from SiteRecord
Attributes inherited from AbstractRecord
#changed, #errors, #stash, #typecast, #values
Class Method Summary collapse
-
.reload_layouts(site) ⇒ Object
in development, all layout records are destroyed and recreated each refresh, so the database view of the layout structure is consistent with what is on disk.
- .render(name, &block) ⇒ Object
Instance Method Summary collapse
Methods inherited from Record
#all_children, #append_to_siblings, #children_and_self, #collection, #content, #create_eigenmodel, #create_mixin_instances, #default_values, #delegate_mixins, #destroy_children, #field_sections, #fields, #first_non_blank_response_to, #first_parent, #first_response_to, #get_binding, #has_eigenmodel?, #initialize, #insert_in_siblings, #inspect_hash, #load_model, #model_name, #parent?, #parents, #perform_reload, #prepare_reload_params, #remove_eigenmodel, #remove_from_siblings, #root?, #run_record_after_create_callbacks, #run_record_after_destroy_callbacks, #run_record_after_save_callbacks, #run_record_after_update_callbacks, #run_record_after_validation_callbacks, #run_record_before_create_callbacks, #run_record_before_destroy_callbacks, #run_record_before_save_callbacks, #run_record_before_update_callbacks, #run_record_before_validation_callbacks, #set_content, #siblings, #to_str, #update_search_keywords, #user_allowed_to?, #user_allowed_to_create?, #user_allowed_to_delete?, #user_allowed_to_update?, #user_allowed_to_view?
Methods inherited from SiteRecord
#default_values, #initialize, #inspect_hash, #perform_reload, #prepare_reload_params, #site_id
Methods included from SiteModel
Methods included from MongoModel
Methods included from AbstractModel
#embed_many, #embed_one, #field, #fields, #many, #modify_field, #one, #remove_field
Methods inherited from MongoRecord
#collection, #default_values, #fields, #id, #increment!, #inspect_hash, #load_from_mongo, #load_mongo_document, #perform_destroy, #perform_reload, #perform_save, #set_id
Methods inherited from AbstractRecord
#changed!, #changed?, #clear_key, #default_values, #destroy, #destroyed?, #eql?, #errors?, #field, #field?, #field_was, #fields, #from_json, #get, #get_meta, #get_raw, #hash, #id, #increment!, inherited, #initialize, #inspect, #inspect_hash, #inspect_value, #method_missing, #new?, #prepare_reload_params, #present?, #reload, #save, #save_without_validation, #search_terms, #set, #set_meta, #set_raw, #to_json, #to_str, #trigger_field_callback, #update, #valid?
Constructor Details
This class inherits a constructor from Record
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class AbstractRecord
Class Method Details
.reload_layouts(site) ⇒ Object
in development, all layout records are destroyed and recreated each refresh, so the database view of the layout structure is consistent with what is on disk. FileLayout objects lazy load the layout from disk as needed. In production, PersistentLayout records store the layout markup in the database.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/yodel/models/pages/layout.rb', line 9 def self.reload_layouts(site) # acquire a lock on the site to prevent multiple reloads colliding attempts = 0 updated = 0 # sites created in production that are yet to be pushed to won't have # any models (including layouts) or any layouts to load return if site.model_types['layouts'].nil? while updated == 0 && attempts < MAX_LOCK_ATTEMPTS updated = Site.collection.update( {'_id' => site.id, 'layout_lock' => {'$exists' => false}}, {'$set' => {'layout_lock' => true}}, safe: true)['n'] attempts += 1 end raise UnableToAcquireLock if attempts == MAX_LOCK_ATTEMPTS # lock has been acquired, this section is guarded site.layouts.all.each(&:destroy) Yodel.mime_types.each do |mime_type| mime_type_name = mime_type.name.to_s mime_type_extensions = mime_type.extensions.join(',') site.layout_directories.each do |directory| scan_folder(directory, site, mime_type_name, mime_type_extensions, nil) end end # release the lock ensure if attempts != 0 updated = Site.collection.update( {'_id' => site.id, 'layout_lock' => {'$exists' => true}}, {'$unset' => {'layout_lock' => 1}}, safe: true)['n'] raise InconsistentLockState if updated != 1 end end |
.render(name, &block) ⇒ Object
58 59 60 |
# File 'lib/yodel/models/pages/layout.rb', line 58 def self.render(name, &block) define_method("render_#{name}", block) end |
Instance Method Details
#render(page) ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/yodel/models/pages/layout.rb', line 49 def render(page) method = "render_#{Yodel.mime_types[mime_type.to_sym].layout_processor}" if respond_to?(method) send(method, page) else render_default(page) end end |