Module: BridgetownPrismic::API

Included in:
Builder
Defined in:
lib/bridgetown-prismic/api.rb

Instance Method Summary collapse

Instance Method Details

#configure_prismicObject

rubocop:disable Metrics/AbcSize



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/bridgetown-prismic/api.rb', line 5

def configure_prismic # rubocop:disable Metrics/AbcSize
  Bridgetown.logger.info "Prismic API:",
                         "Connecting to #{site.config.prismic_repository.yellow}..."
  site.config.prismic_api = Prismic.api("https://#{site.config.prismic_repository}.cdn.prismic.io/api")
  site.config.prismic_link_resolver ||= Prismic::LinkResolver.new(nil) do |link|
    next "/preview/#{link.type}/#{link.id}" if site.config.prismic_preview_token

    if model_exists_for_prismic_type? link.type
      full_doc = Async do
        Bridgetown::Current.site = site # ensure fiber has copy of the current site
        site.config.prismic_api.getByID(link.id)
      end.wait

      model_for_prismic_type(link.type).prismic_url(full_doc)
    else
      "/"
    end
  end

  Bridgetown::Model::Base.descendants.each do |klass|
    next unless klass.respond_to?(:prismic_custom_type)

    Bridgetown::Resource.register_extension klass
  end
end

#model_exists_for_prismic_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/bridgetown-prismic/api.rb', line 77

def model_exists_for_prismic_type?(type)
  prismic_types.include? type.to_sym
end

#model_for_prismic_type(type) ⇒ Object



65
66
67
68
69
# File 'lib/bridgetown-prismic/api.rb', line 65

def model_for_prismic_type(type)
  Bridgetown::Model::Base.descendants.find do |klass|
    klass.respond_to?(:prismic_custom_type) && klass.prismic_custom_type == type.to_sym
  end
end

#prismic_typesObject



71
72
73
74
75
# File 'lib/bridgetown-prismic/api.rb', line 71

def prismic_types
  Bridgetown::Model::Base.descendants.filter_map do |klass|
    klass.respond_to?(:prismic_custom_type) ? klass.prismic_custom_type : nil
  end
end

#query_prismic(custom_type, options = {}) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/bridgetown-prismic/api.rb', line 31

def query_prismic(custom_type, options = {})
  Bridgetown.logger.info "Prismic API:", "Loading #{custom_type.to_s.green}..."

  results = []
  page = 1
  finalpage = false
  options["pageSize"] ||= 100 # pull in as much data as possible for a single request

  until finalpage
    options["page"] = page

    response = BridgetownPrismic
      .api
      .query(Prismic::Predicates.at("document.type", custom_type.to_s), options)

    results += response.results
    if response.total_pages > page
      page += 1
    else
      finalpage = true
    end
  end

  results
end

#query_prismic_and_generate_resources_for(klass) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/bridgetown-prismic/api.rb', line 57

def query_prismic_and_generate_resources_for(klass)
  query_options = {}

  query_prismic(klass.prismic_custom_type, query_options)
    .map { |doc| klass.import_prismic_document(doc) }
    .each(&:as_resource_in_collection)
end