Module: Prismic::WithFragments
- Includes:
 - Enumerable
 
- Included in:
 - Document, Fragments::DocumentLink, Fragments::GroupDocument
 
- Defined in:
 - lib/prismic/with_fragments.rb
 
Overview
A document with Fragments: usually a Prismic.io Document, or a Document within a Group
Instance Attribute Summary collapse
Instance Method Summary collapse
- 
  
    
      #[](field)  ⇒ Fragments::Fragment 
    
    
      (also: #get)
    
  
  
  
  
  
  
  
  
  
    
Get a document's field.
 - 
  
    
      #as_html(link_resolver)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Generate an HTML representation of the entire document.
 - 
  
    
      #as_text  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Generate a Text representation of the entire document.
 - #each {|name, fragment| ... } ⇒ Object
 - 
  
    
      #first_title  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Finds the first highest title in a document (if any).
 - #get_color(field) ⇒ Fragments::Color
 - #get_date(field) ⇒ Fragments::Date
 - #get_embed(field) ⇒ Fragments::Embed
 - #get_geopoint(field) ⇒ Fragments::GeoPoint
 - #get_group(field) ⇒ Fragments::Group
 - #get_image(field) ⇒ Fragments::Image
 - #get_link(field) ⇒ Fragments::Link
 - #get_number(field) ⇒ Fragments::Number
 - #get_slice_zone(field) ⇒ Object
 - #get_structured_text(field) ⇒ Fragments::StructuredText
 - #get_text(field) ⇒ Fragments::Text
 - #get_timestamp(field) ⇒ Fragments::Timestamp
 - #length ⇒ Fixum (also: #size)
 - #linked_documents ⇒ Array<LinkedDocument>
 
Instance Attribute Details
#fragments ⇒ Hash{String => Fragment}
      7 8 9  | 
    
      # File 'lib/prismic/with_fragments.rb', line 7 def fragments @fragments end  | 
  
Instance Method Details
#[](field) ⇒ Fragments::Fragment Also known as: get
Get a document's field
      53 54 55 56 57 58 59 60  | 
    
      # 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  | 
  
#as_html(link_resolver) ⇒ String
Generate an HTML representation of the entire document
      22 23 24 25 26  | 
    
      # 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 ⇒ String
Generate a Text representation of the entire document
      12 13 14  | 
    
      # File 'lib/prismic/with_fragments.rb', line 12 def as_text fragments.map { |field, fragment| fragment.as_text }.join("\n") end  | 
  
#each {|name, fragment| ... } ⇒ Object
      65 66 67  | 
    
      # File 'lib/prismic/with_fragments.rb', line 65 def each(&blk) @fragments.each(&blk) end  | 
  
#first_title ⇒ String
Finds the first highest title in a document (if any)
      31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49  | 
    
      # 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_color(field) ⇒ Fragments::Color
      140 141 142 143 144  | 
    
      # 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) ⇒ Fragments::Date
      105 106 107 108 109  | 
    
      # 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) ⇒ Fragments::Embed
      133 134 135 136 137  | 
    
      # File 'lib/prismic/with_fragments.rb', line 133 def (field) fragment = self[field] return nil unless fragment.is_a? Prismic::Fragments::Embed fragment end  | 
  
#get_geopoint(field) ⇒ Fragments::GeoPoint
      147 148 149 150 151  | 
    
      # 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) ⇒ Fragments::Group
      119 120 121 122 123  | 
    
      # 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) ⇒ Fragments::Image
      98 99 100 101 102  | 
    
      # 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_link(field) ⇒ Fragments::Link
      126 127 128 129 130  | 
    
      # File 'lib/prismic/with_fragments.rb', line 126 def get_link(field) fragment = self[field] return nil unless fragment.is_a? Prismic::Fragments::Link fragment end  | 
  
#get_number(field) ⇒ Fragments::Number
      91 92 93 94 95  | 
    
      # 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) ⇒ Object
      153 154 155 156 157  | 
    
      # 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) ⇒ Fragments::StructuredText
      77 78 79 80 81  | 
    
      # 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) ⇒ Fragments::Text
      84 85 86 87 88  | 
    
      # 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) ⇒ Fragments::Timestamp
      112 113 114 115 116  | 
    
      # File 'lib/prismic/with_fragments.rb', line 112 def (field) fragment = self[field] return nil unless fragment.is_a? Prismic::Fragments::Timestamp fragment end  | 
  
#length ⇒ Fixum Also known as: size
      71 72 73  | 
    
      # File 'lib/prismic/with_fragments.rb', line 71 def length @fragments.length end  | 
  
#linked_documents ⇒ Array<LinkedDocument>
      160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179  | 
    
      # File 'lib/prismic/with_fragments.rb', line 160 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  |