Class: Bridgetown::Model::RepoOrigin
Constant Summary
Constants inherited
from Origin
Origin::EAGER_LOAD_DESCENDANTS
Instance Attribute Summary collapse
Attributes inherited from Origin
#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 'lib/bridgetown-core/model/repo_origin.rb', line 10
def content
@content
end
|
#front_matter_line_count ⇒ Integer
13
14
15
|
# File '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 '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 '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 '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
83
84
85
86
87
88
89
90
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 83
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
96
97
98
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 96
def exists?
File.exist?(original_path)
end
|
#original_path ⇒ Object
92
93
94
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 92
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
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 37
def read
begin
@data = (in_data_collection? ? read_file_data : read_front_matter(original_path)) || {}
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
77
78
79
80
81
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 77
def relative_path
@relative_path ||= Pathname.new(
Addressable::URI.unescape(url.path.delete_prefix("/"))
)
end
|
#url ⇒ Object
73
74
75
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 73
def url
@url ||= URI.parse(id)
end
|
#write(model) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/bridgetown-core/model/repo_origin.rb', line 56
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
|