Class: Bridgetown::Model::RepoOrigin
Constant Summary
Constants inherited
from Origin
Origin::EAGER_LOAD_DESCENDANTS
Instance Attribute Summary collapse
Attributes inherited from Origin
#bare_text, #id, #site
Class Method Summary
collapse
Instance Method Summary
collapse
included, #read_front_matter
Methods inherited from Origin
#initialize, #verify_model?
Instance Attribute Details
#content ⇒ String
10
11
12
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 10
def content
@content
end
|
#front_matter_line_count ⇒ Integer
13
14
15
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 13
def front_matter_line_count
@front_matter_line_count
end
|
Class Method Details
.data_file_extensions ⇒ Object
20
21
22
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 20
def data_file_extensions
%w(.yaml .yml .json .csv .tsv .rb).freeze
end
|
.handle_scheme?(scheme) ⇒ Boolean
16
17
18
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 16
def handle_scheme?(scheme)
scheme == "repo"
end
|
.new_with_collection_path(collection, relative_path, site: Bridgetown::Current.site) ⇒ Object
Initializes a new repo object using a collection and a relative source path.
You’ll need to use this when you want to create and save a model to the source.
30
31
32
33
34
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 30
def new_with_collection_path(collection, relative_path, site: Bridgetown::Current.site)
collection = collection.label if collection.is_a?(Bridgetown::Collection)
new("repo://#{collection}.collection/#{relative_path}", site:)
end
|
Instance Method Details
#collection ⇒ Object
85
86
87
88
89
90
91
92
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 85
def collection
return @collection if @collection
collection_name = url.host.ends_with?(".collection") ?
url.host.chomp(".collection") :
"pages"
@collection = site.collections[collection_name]
end
|
#exists? ⇒ Boolean
98
99
100
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 98
def exists?
File.exist?(original_path)
end
|
#original_path ⇒ Object
94
95
96
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 94
def original_path
@original_path ||= relative_path.expand_path(site.source)
end
|
#read ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 37
def read
begin
@data = (
in_data_collection? ? read_file_data : read_front_matter(original_path, bare_text:)
) || {}
rescue SyntaxError => e
Bridgetown.logger.error "Error:",
"Ruby Exception in #{e.message}"
rescue StandardError => e
handle_read_error(e)
end
@data ||= {}
@data[:_id_] = id
@data[:_origin_] = self
@data[:_collection_] = collection
@data[:_content_] = content if content
@data
end
|
#relative_path ⇒ Object
79
80
81
82
83
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 79
def relative_path
@relative_path ||= Pathname.new(
Addressable::URI.unescape(url.path.delete_prefix("/"))
)
end
|
#url ⇒ Object
75
76
77
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 75
def url
@url ||= URI.parse(id)
end
|
#write(model) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'bridgetown-core/lib/bridgetown-core/model/repo_origin.rb', line 58
def write(model)
if File.exist?(original_path) && !Bridgetown::Utils.(original_path)
raise Bridgetown::Errors::InvalidYAMLFrontMatterError,
"Only existing files containing YAML front matter can be overwritten by the model"
end
contents = "#{front_matter_to_yaml(model)}---\n\n#{model.content}"
dir = File.dirname(original_path)
FileUtils.mkdir_p(dir) unless File.directory?(dir)
File.write(original_path, contents)
true
end
|