Sha256: f2cd4abe9f89f37514e92b0d570308e7d69548707813132aec6a4bf4cf5ce2ba
Contents?: true
Size: 1.22 KB
Versions: 4
Compression:
Stored size: 1.22 KB
Contents
# frozen_string_literal: true module Bridgetown module Model class BuilderOrigin < Origin # @return [Pathname] attr_reader :relative_path def self.handle_scheme?(scheme) scheme == "builder" end def self.id_for_builder_path(builder, path) "builder://#{builder.class.name.gsub("::", ".")}/#{path}" end def initialize(id) super @relative_path = Pathname.new(url.path.delete_prefix("/")) end def url @url ||= URI.parse(id) end def read @data = block_given? ? yield : read_data_from_builder @data[:_id_] = id @data[:_origin_] = self @relative_path = Pathname.new(@data[:_relative_path_]) if @data[:_relative_path_] @data end def exists? false end def read_data_from_builder builder = Kernel.const_get(url.host.gsub(".", "::")) raise NameError unless builder.instance_methods.include?(:resource_data_for_id) builder.new.resource_data_for_id(id) || raise(NameError) rescue NameError raise( Bridgetown::Errors::FatalException, "Builder not found which can read #{id}" ) end end end end
Version data entries
4 entries across 4 versions & 1 rubygems