Class: RivetCms::RevisionPreloader
- Inherits:
-
Object
- Object
- RivetCms::RevisionPreloader
- Defined in:
- app/serializers/rivet_cms/revision_preloader.rb
Overview
Bulk-loads everything RevisionSerializer needs for a set of revisions in a constant number of queries, regardless of page size. Components cannot nest, so the owner tree is bounded: revision -> component instances -> values/relations. When populate_fields are given, target documents' revisions are loaded and preloaded the same way (one level deep).
Instance Method Summary collapse
- #component_instances(owner, field) ⇒ Object
- #document_for(revision) ⇒ Object
- #fields_for_component(component_id) ⇒ Object
- #fields_for_content_type(content_type_id) ⇒ Object
-
#initialize(revisions, populate_fields: [], preview: false) ⇒ RevisionPreloader
constructor
A new instance of RevisionPreloader.
- #relations(owner, field) ⇒ Object
- #target_revision(document_id) ⇒ Object
- #value(owner, field) ⇒ Object
Constructor Details
#initialize(revisions, populate_fields: [], preview: false) ⇒ RevisionPreloader
Returns a new instance of RevisionPreloader.
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 8 def initialize(revisions, populate_fields: [], preview: false) @revisions = Array(revisions).compact @populate_field_ids = populate_fields.map(&:id).to_set @preview = preview @values = {} @relations = {} @instances = {} @fields_by_content_type = {} @fields_by_component = {} @target_revision_by_document_id = {} load_all end |
Instance Method Details
#component_instances(owner, field) ⇒ Object
41 42 43 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 41 def component_instances(owner, field) @instances.dig(owner_key(owner), field.id) || [] end |
#document_for(revision) ⇒ Object
21 22 23 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 21 def document_for(revision) revision.document end |
#fields_for_component(component_id) ⇒ Object
29 30 31 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 29 def fields_for_component(component_id) @fields_by_component[component_id] || [] end |
#fields_for_content_type(content_type_id) ⇒ Object
25 26 27 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 25 def fields_for_content_type(content_type_id) @fields_by_content_type[content_type_id] || [] end |
#relations(owner, field) ⇒ Object
37 38 39 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 37 def relations(owner, field) @relations.dig(owner_key(owner), field.id) || [] end |
#target_revision(document_id) ⇒ Object
45 46 47 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 45 def target_revision(document_id) @target_revision_by_document_id[document_id] end |
#value(owner, field) ⇒ Object
33 34 35 |
# File 'app/serializers/rivet_cms/revision_preloader.rb', line 33 def value(owner, field) @values.dig(owner_key(owner), field.id) end |