module Prismic::WithFragments

A document with Fragments: usually a Prismic.io Document, or a Document within a Group

Attributes

fragments[RW]

@return [Hash{String => Fragment}]

Public Instance Methods

[](field) click to toggle source

Get a document's field @return [Fragments::Fragment]

# File lib/prismic/with_fragments.rb, line 53
def [](field)
  array = field.split('.')
  if array.length != 2
    raise ArgumentError, 'Argument should contain one dot. Example: product.price'
  end
  return nil if array[0] != self.type
  fragments[array[1]]
end
Also aliased as: get
as_html(link_resolver) click to toggle source

Generate an HTML representation of the entire document

@param link_resolver [LinkResolver] The LinkResolver used to build

application's specific URL

@return [String] the HTML representation

# File lib/prismic/with_fragments.rb, line 22
def as_html(link_resolver)
  fragments.map { |field, fragment|
    %(<section data-field="#{field}">#{fragment.as_html(link_resolver)}</section>)
  }.join("\n")
end
as_text() click to toggle source

Generate a Text representation of the entire document

@return [String] the text representation

# File lib/prismic/with_fragments.rb, line 12
def as_text
  fragments.map { |field, fragment| fragment.as_text }.join("\n")
end
each(&blk) click to toggle source

@yieldparam name [String] @yieldparam fragment [Fragment]

# File lib/prismic/with_fragments.rb, line 65
def each(&blk)
  @fragments.each(&blk)
end
first_title() click to toggle source

Finds the first highest title in a document (if any)

@return [String]

# File lib/prismic/with_fragments.rb, line 31
def first_title
  # It is impossible to reuse the StructuredText.first_title method, since
  # we need to test the highest title across the whole document
  title = false
  max_level = 6 # any title with a higher level kicks the current one out
  @fragments.each do |_, fragment|
    if fragment.is_a? Prismic::Fragments::StructuredText
      fragment.blocks.each do |block|
        if block.is_a?(Prismic::Fragments::StructuredText::Block::Heading)
          if block.level < max_level
            title = block.text
            max_level = block.level # new maximum
          end
        end
      end
    end
  end
  title
end
get(field)
Alias for: []
get_boolean_field(field) click to toggle source

@return [Fragments::BooleanField]

# File lib/prismic/with_fragments.rb, line 160
def get_boolean_field(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::BooleanField
  fragment
end
get_color(field) click to toggle source

@return [Fragments::Color]

# File lib/prismic/with_fragments.rb, line 140
def get_color(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Color
  fragment
end
get_date(field) click to toggle source

@return [Fragments::Date]

# File lib/prismic/with_fragments.rb, line 105
def get_date(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Date
  fragment
end
get_embed(field) click to toggle source

@return [Fragments::Embed]

# File lib/prismic/with_fragments.rb, line 133
def get_embed(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Embed
  fragment
end
get_geopoint(field) click to toggle source

@return [Fragments::GeoPoint]

# File lib/prismic/with_fragments.rb, line 147
def get_geopoint(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::GeoPoint
  fragment
end
get_group(field) click to toggle source

@return [Fragments::Group]

# File lib/prismic/with_fragments.rb, line 119
def get_group(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Group
  fragment
end
get_image(field) click to toggle source

@return [Fragments::Image]

# File lib/prismic/with_fragments.rb, line 98
def get_image(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Image
  fragment
end
get_number(field) click to toggle source

@return [Fragments::Number]

# File lib/prismic/with_fragments.rb, line 91
def get_number(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Number
  fragment
end
get_slice_zone(field) click to toggle source
# File lib/prismic/with_fragments.rb, line 153
def get_slice_zone(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::SliceZone
  fragment
end
get_structured_text(field) click to toggle source

@return [Fragments::StructuredText]

# File lib/prismic/with_fragments.rb, line 77
def get_structured_text(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::StructuredText
  fragment
end
get_text(field) click to toggle source

@return [Fragments::Text]

# File lib/prismic/with_fragments.rb, line 84
def get_text(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Text
  fragment
end
get_timestamp(field) click to toggle source

@return [Fragments::Timestamp]

# File lib/prismic/with_fragments.rb, line 112
def get_timestamp(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Timestamp
  fragment
end
length() click to toggle source

@return [Fixum]

# File lib/prismic/with_fragments.rb, line 71
def length
  @fragments.length
end
Also aliased as: size
linked_documents() click to toggle source

@return [Array<LinkedDocument>]

# File lib/prismic/with_fragments.rb, line 167
def linked_documents
  self.fragments.map { |name, fragment|
    if fragment.is_a? Prismic::Fragments::DocumentLink
      [fragment]
    elsif fragment.is_a? Prismic::Fragments::StructuredText
      fragment.blocks
        .select { |block| block.is_a? Prismic::Fragments::StructuredText::Block::Text}
        .map { |block| block.spans }.flatten
        .select { |span| span.is_a? Prismic::Fragments::StructuredText::Span::Hyperlink }
        .map { |span| span.link }
        .select { |link| link.is_a? Prismic::Fragments::DocumentLink }
    elsif fragment.is_a? Prismic::Fragments::Group
      fragment.group_documents
        .map { |groupDoc| groupDoc.linked_documents }
        .flatten
    else
      []
    end
  }.flatten
end
size()
Alias for: length