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 |