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

Instance Attribute Details

#fragmentsHash{String => Fragment}

Returns:

  • (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

Returns:



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

Parameters:

  • link_resolver (LinkResolver)

    The LinkResolver used to build application's specific URL

Returns:

  • (String)

    the HTML representation



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_textString

Generate a Text representation of the entire document

Returns:

  • (String)

    the text representation



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

Yield Parameters:

  • name (String)
  • fragment (Fragment)


65
66
67
# File 'lib/prismic/with_fragments.rb', line 65

def each(&blk)
  @fragments.each(&blk)
end

#first_titleString

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

Returns:

  • (String)


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_boolean_field(field) ⇒ Fragments::BooleanField



160
161
162
163
164
# 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) ⇒ Fragments::Color

Returns:



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

Returns:



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

Returns:



133
134
135
136
137
# 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) ⇒ Fragments::GeoPoint

Returns:



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

Returns:



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

Returns:



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

Returns:



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

Returns:



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

Returns:



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 get_timestamp(field)
  fragment = self[field]
  return nil unless fragment.is_a? Prismic::Fragments::Timestamp
  fragment
end

#lengthFixum Also known as: size

Returns:

  • (Fixum)


71
72
73
# File 'lib/prismic/with_fragments.rb', line 71

def length
  @fragments.length
end

#linked_documentsArray<LinkedDocument>

Returns:

  • (Array<LinkedDocument>)


167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# 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