Class: RivetCms::RevisionSerializer

Inherits:
Object
  • Object
show all
Defined in:
app/serializers/rivet_cms/revision_serializer.rb

Constant Summary collapse

RICH_TEXT_TAGS =
%w[p br strong em b i u s del a img ul ol li h1 h2 h3 h4 h5 h6 blockquote pre code hr].freeze
RICH_TEXT_ATTRS =
%w[href src alt title class target rel width height style].freeze

Instance Method Summary collapse

Constructor Details

#initialize(revision, fields: nil, populate: [], preview: false, preload: nil) ⇒ RevisionSerializer

fields: root-level key whitelist (nil = all). populate: reference Field records to expand one level deep. preview: serve draft targets and skip the published-only relation filter. preload: a shared RevisionPreloader (built automatically for single-revision use).



10
11
12
13
14
15
16
17
# File 'app/serializers/rivet_cms/revision_serializer.rb', line 10

def initialize(revision, fields: nil, populate: [], preview: false, preload: nil)
  @revision = revision
  @field_keys = fields
  @populate = populate
  @populate_field_ids = populate.map(&:id).to_set
  @preview = preview
  @preload = preload
end

Instance Method Details

#as_jsonObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/serializers/rivet_cms/revision_serializer.rb', line 19

def as_json(*)
  return nil if @revision.nil?

  @preload ||= RevisionPreloader.new([ @revision ], populate_fields: @populate, preview: @preview)
  document = @preload.document_for(@revision)
  fields = @preload.fields_for_content_type(document.content_type_id)
  fields = fields.select { |field| @field_keys.include?(field.key) } if @field_keys

  {
    id: document.prefix_id,
    slug: document.slug,
    content_type: document.content_type.slug,
    state: @revision.state,
    data: serialize_owner(@revision, fields, root: true)
  }
end