Module: BridgetownPrismic::API
- Included in:
- Builder
- Defined in:
- lib/bridgetown-prismic/api.rb
Instance Method Summary collapse
-
#configure_prismic ⇒ Object
rubocop:disable Metrics/AbcSize.
- #model_exists_for_prismic_type?(type) ⇒ Boolean
- #model_for_prismic_type(type) ⇒ Object
- #prismic_types ⇒ Object
- #query_prismic(custom_type, options = {}) ⇒ Object
- #query_prismic_and_generate_resources_for(klass) ⇒ Object
Instance Method Details
#configure_prismic ⇒ Object
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
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_types ⇒ Object
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, = {}) Bridgetown.logger.info "Prismic API:", "Loading #{custom_type.to_s.green}..." results = [] page = 1 finalpage = false ["pageSize"] ||= 100 # pull in as much data as possible for a single request until finalpage ["page"] = page response = BridgetownPrismic .api .query(Prismic::Predicates.at("document.type", custom_type.to_s), ) 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_prismic(klass.prismic_custom_type, ) .map { |doc| klass.import_prismic_document(doc) } .each(&:as_resource_in_collection) end |