bridgetown-core 0.19.2 → 0.21.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bridgetown-core.gemspec +1 -2
- data/lib/bridgetown-core.rb +37 -29
- data/lib/bridgetown-core/cleaner.rb +9 -3
- data/lib/bridgetown-core/collection.rb +177 -78
- data/lib/bridgetown-core/commands/base.rb +9 -0
- data/lib/bridgetown-core/commands/build.rb +0 -11
- data/lib/bridgetown-core/commands/concerns/git_helpers.rb +20 -0
- data/lib/bridgetown-core/commands/configure.rb +8 -3
- data/lib/bridgetown-core/commands/console.rb +4 -0
- data/lib/bridgetown-core/commands/doctor.rb +1 -19
- data/lib/bridgetown-core/commands/new.rb +2 -2
- data/lib/bridgetown-core/commands/plugins.rb +14 -13
- data/lib/bridgetown-core/commands/serve.rb +0 -14
- data/lib/bridgetown-core/component.rb +178 -0
- data/lib/bridgetown-core/concerns/data_accessible.rb +1 -0
- data/lib/bridgetown-core/concerns/front_matter_importer.rb +52 -0
- data/lib/bridgetown-core/concerns/site/configurable.rb +10 -10
- data/lib/bridgetown-core/concerns/site/content.rb +56 -15
- data/lib/bridgetown-core/concerns/site/localizable.rb +3 -5
- data/lib/bridgetown-core/concerns/site/processable.rb +6 -4
- data/lib/bridgetown-core/concerns/site/renderable.rb +26 -0
- data/lib/bridgetown-core/concerns/site/writable.rb +12 -2
- data/lib/bridgetown-core/concerns/validatable.rb +2 -5
- data/lib/bridgetown-core/configuration.rb +51 -30
- data/lib/bridgetown-core/configurations/bt-postcss.rb +1 -3
- data/lib/bridgetown-core/configurations/netlify.rb +1 -0
- data/lib/bridgetown-core/configurations/tailwindcss.rb +1 -3
- data/lib/bridgetown-core/converter.rb +23 -0
- data/lib/bridgetown-core/converters/erb_templates.rb +51 -35
- data/lib/bridgetown-core/converters/identity.rb +0 -9
- data/lib/bridgetown-core/converters/liquid_templates.rb +1 -1
- data/lib/bridgetown-core/converters/markdown.rb +14 -4
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +5 -38
- data/lib/bridgetown-core/converters/ruby_templates.rb +17 -0
- data/lib/bridgetown-core/converters/smartypants.rb +3 -1
- data/lib/bridgetown-core/core_ext/psych.rb +19 -0
- data/lib/bridgetown-core/current.rb +10 -0
- data/lib/bridgetown-core/document.rb +9 -16
- data/lib/bridgetown-core/drops/collection_drop.rb +1 -1
- data/lib/bridgetown-core/drops/page_drop.rb +4 -0
- data/lib/bridgetown-core/drops/relations_drop.rb +23 -0
- data/lib/bridgetown-core/drops/resource_drop.rb +83 -0
- data/lib/bridgetown-core/drops/site_drop.rb +33 -8
- data/lib/bridgetown-core/drops/unified_payload_drop.rb +5 -0
- data/lib/bridgetown-core/entry_filter.rb +17 -28
- data/lib/bridgetown-core/errors.rb +0 -2
- data/lib/bridgetown-core/filters.rb +3 -26
- data/lib/bridgetown-core/filters/from_liquid.rb +23 -0
- data/lib/bridgetown-core/filters/url_filters.rb +12 -0
- data/lib/bridgetown-core/frontmatter_defaults.rb +1 -1
- data/lib/bridgetown-core/generators/prototype_generator.rb +37 -19
- data/lib/bridgetown-core/helpers.rb +48 -9
- data/lib/bridgetown-core/layout.rb +28 -13
- data/lib/bridgetown-core/liquid_renderer/file.rb +1 -0
- data/lib/bridgetown-core/liquid_renderer/table.rb +1 -0
- data/lib/bridgetown-core/model/base.rb +138 -0
- data/lib/bridgetown-core/model/builder_origin.rb +40 -0
- data/lib/bridgetown-core/model/origin.rb +38 -0
- data/lib/bridgetown-core/model/repo_origin.rb +126 -0
- data/lib/bridgetown-core/page.rb +11 -2
- data/lib/bridgetown-core/plugin_manager.rb +1 -3
- data/lib/bridgetown-core/publisher.rb +8 -2
- data/lib/bridgetown-core/reader.rb +37 -22
- data/lib/bridgetown-core/readers/data_reader.rb +5 -5
- data/lib/bridgetown-core/readers/defaults_reader.rb +1 -1
- data/lib/bridgetown-core/readers/page_reader.rb +1 -0
- data/lib/bridgetown-core/readers/post_reader.rb +5 -4
- data/lib/bridgetown-core/regenerator.rb +9 -2
- data/lib/bridgetown-core/related_posts.rb +9 -6
- data/lib/bridgetown-core/renderer.rb +6 -13
- data/lib/bridgetown-core/resource/base.rb +313 -0
- data/lib/bridgetown-core/resource/destination.rb +49 -0
- data/lib/bridgetown-core/resource/permalink_processor.rb +179 -0
- data/lib/bridgetown-core/resource/relations.rb +132 -0
- data/lib/bridgetown-core/resource/taxonomy_term.rb +34 -0
- data/lib/bridgetown-core/resource/taxonomy_type.rb +56 -0
- data/lib/bridgetown-core/resource/transformer.rb +177 -0
- data/lib/bridgetown-core/ruby_template_view.rb +11 -11
- data/lib/bridgetown-core/site.rb +13 -6
- data/lib/bridgetown-core/static_file.rb +33 -10
- data/lib/bridgetown-core/tags/highlight.rb +2 -15
- data/lib/bridgetown-core/tags/include.rb +1 -1
- data/lib/bridgetown-core/tags/post_url.rb +2 -2
- data/lib/bridgetown-core/url.rb +1 -0
- data/lib/bridgetown-core/utils.rb +49 -43
- data/lib/bridgetown-core/utils/require_gems.rb +60 -0
- data/lib/bridgetown-core/utils/ruby_exec.rb +6 -9
- data/lib/bridgetown-core/utils/ruby_front_matter.rb +39 -0
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/bridgetown-core/watcher.rb +1 -1
- data/lib/bridgetown-core/yaml_parser.rb +22 -0
- data/lib/site_template/package.json.erb +2 -2
- data/lib/site_template/plugins/site_builder.rb +1 -1
- data/lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb +1 -1
- data/lib/site_template/webpack.config.js.erb +26 -6
- metadata +39 -40
- data/lib/bridgetown-core/external.rb +0 -58
- data/lib/bridgetown-core/page_without_a_file.rb +0 -17
- data/lib/bridgetown-core/path_manager.rb +0 -31
- data/lib/bridgetown-core/readers/collection_reader.rb +0 -23
- data/lib/bridgetown-core/readers/static_file_reader.rb +0 -25
- data/lib/bridgetown-core/utils/exec.rb +0 -26
- data/lib/bridgetown-core/utils/internet.rb +0 -37
- data/lib/bridgetown-core/utils/platforms.rb +0 -80
- data/lib/bridgetown-core/utils/thread_event.rb +0 -31
- data/lib/bridgetown-core/utils/win_tz.rb +0 -75
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bridgetown
|
|
4
|
+
module Model
|
|
5
|
+
# Abstract Superclass
|
|
6
|
+
class BuilderOrigin < Origin
|
|
7
|
+
# @return [Pathname]
|
|
8
|
+
attr_reader :relative_path
|
|
9
|
+
|
|
10
|
+
# Override in subclass
|
|
11
|
+
def self.handle_scheme?(scheme)
|
|
12
|
+
scheme == "builder"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize(id)
|
|
16
|
+
self.id = id
|
|
17
|
+
@relative_path = Pathname.new(id.delete_prefix("builder://"))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def read
|
|
21
|
+
@data = if block_given?
|
|
22
|
+
yield
|
|
23
|
+
elsif defined?(SiteBuilder) && SiteBuilder.respond_to?(:data_for_id)
|
|
24
|
+
SiteBuilder.data_for_id(id)
|
|
25
|
+
else
|
|
26
|
+
raise "No builder exists which can read #{id}"
|
|
27
|
+
end
|
|
28
|
+
@data[:_id_] = id
|
|
29
|
+
@data[:_origin_] = self
|
|
30
|
+
@relative_path = Pathname.new(@data[:_relative_path_]) if @data[:_relative_path_]
|
|
31
|
+
|
|
32
|
+
@data
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def exists?
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bridgetown
|
|
4
|
+
module Model
|
|
5
|
+
# Abstract Superclass
|
|
6
|
+
class Origin
|
|
7
|
+
extend ActiveSupport::DescendantsTracker
|
|
8
|
+
|
|
9
|
+
# @return [String]
|
|
10
|
+
attr_accessor :id
|
|
11
|
+
|
|
12
|
+
# Override in subclass
|
|
13
|
+
def self.handle_scheme?(_scheme)
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(id)
|
|
18
|
+
self.id = id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def read
|
|
22
|
+
raise "Implement #read in a subclass of Bridgetown::Model::Origin"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [Pathname]
|
|
26
|
+
def relative_path
|
|
27
|
+
raise "Implement #relative_path in a subclass of Bridgetown::Model::Origin"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def exists?
|
|
31
|
+
raise "Implement #exists? in a subclass of Bridgetown::Model::Origin"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
require "bridgetown-core/model/builder_origin"
|
|
38
|
+
require "bridgetown-core/model/repo_origin"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bridgetown
|
|
4
|
+
module Model
|
|
5
|
+
class RepoOrigin < Origin
|
|
6
|
+
include Bridgetown::FrontMatterImporter
|
|
7
|
+
include Bridgetown::Utils::RubyFrontMatterDSL
|
|
8
|
+
|
|
9
|
+
YAML_FRONT_MATTER_REGEXP = %r!\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)!m.freeze
|
|
10
|
+
RUBY_FRONT_MATTER_HEADER = %r!\A[~`#\-]{3,}(?:ruby|<%|{%)\s*\n!.freeze
|
|
11
|
+
RUBY_FRONT_MATTER_REGEXP =
|
|
12
|
+
%r!#{RUBY_FRONT_MATTER_HEADER.source}(.*?\n?)^((?:%>|%})?[~`#\-]{3,}\s*$\n?)!m.freeze
|
|
13
|
+
|
|
14
|
+
# @return [String]
|
|
15
|
+
attr_accessor :content
|
|
16
|
+
|
|
17
|
+
# @return [Integer]
|
|
18
|
+
attr_accessor :front_matter_line_count
|
|
19
|
+
|
|
20
|
+
class << self
|
|
21
|
+
def handle_scheme?(scheme)
|
|
22
|
+
scheme == "repo"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def data_file_extensions
|
|
26
|
+
%w(.yaml .yml .json .csv .tsv .rb).freeze
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def read
|
|
31
|
+
begin
|
|
32
|
+
@data = (in_data_collection? ? read_file_data : read_front_matter(original_path)) || {}
|
|
33
|
+
rescue SyntaxError => e
|
|
34
|
+
Bridgetown.logger.error "Error:",
|
|
35
|
+
"Ruby Exception in #{e.message}"
|
|
36
|
+
rescue StandardError => e
|
|
37
|
+
handle_read_error(e)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
@data ||= {}
|
|
41
|
+
@data[:_id_] = id
|
|
42
|
+
@data[:_origin_] = self
|
|
43
|
+
@data[:_collection_] = collection
|
|
44
|
+
@data[:_content_] = content if content
|
|
45
|
+
|
|
46
|
+
@data
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def url
|
|
50
|
+
@url = URI.parse(id)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def relative_path
|
|
54
|
+
@relative_path ||= Pathname.new(
|
|
55
|
+
Addressable::URI.unescape(url.path.delete_prefix("/"))
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def collection
|
|
60
|
+
return @collection if @collection
|
|
61
|
+
|
|
62
|
+
collection_name = if url.host.ends_with?(".collection")
|
|
63
|
+
url.host.chomp(".collection")
|
|
64
|
+
else
|
|
65
|
+
"pages"
|
|
66
|
+
end
|
|
67
|
+
@collection = Bridgetown::Current.site.collections[collection_name]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def original_path
|
|
71
|
+
@original_path ||= relative_path.expand_path(Bridgetown::Current.site.source)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def exists?
|
|
75
|
+
File.exist?(original_path)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def in_data_collection?
|
|
81
|
+
original_path.extname.downcase.in?(self.class.data_file_extensions) &&
|
|
82
|
+
collection.data?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def read_file_data # rubocop:todo Metrics/MethodLength
|
|
86
|
+
case original_path.extname.downcase
|
|
87
|
+
when ".csv"
|
|
88
|
+
{
|
|
89
|
+
rows:
|
|
90
|
+
CSV.read(original_path,
|
|
91
|
+
headers: true,
|
|
92
|
+
encoding: Bridgetown::Current.site.config["encoding"]).map(&:to_hash),
|
|
93
|
+
}
|
|
94
|
+
when ".tsv"
|
|
95
|
+
{
|
|
96
|
+
rows:
|
|
97
|
+
CSV.read(original_path,
|
|
98
|
+
col_sep: "\t",
|
|
99
|
+
headers: true,
|
|
100
|
+
encoding: Bridgetown::Current.site.config["encoding"]).map(&:to_hash),
|
|
101
|
+
}
|
|
102
|
+
when ".rb"
|
|
103
|
+
process_ruby_data(File.read(original_path), original_path, 1)
|
|
104
|
+
else
|
|
105
|
+
yaml_data = YAMLParser.load_file(original_path)
|
|
106
|
+
yaml_data.is_a?(Array) ? { rows: yaml_data } : yaml_data
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def handle_read_error(error)
|
|
111
|
+
if error.is_a? Psych::SyntaxError
|
|
112
|
+
Bridgetown.logger.error "Error:",
|
|
113
|
+
"YAML Exception reading #{original_path}: #{error.message}"
|
|
114
|
+
else
|
|
115
|
+
Bridgetown.logger.error "Error:",
|
|
116
|
+
"could not read file #{original_path}: #{error.message}"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
if Bridgetown::Current.site.config["strict_front_matter"] ||
|
|
120
|
+
error.is_a?(Bridgetown::Errors::FatalException)
|
|
121
|
+
raise error
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
data/lib/bridgetown-core/page.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
|
+
# TODO: to be retired once the Resource engine is made official
|
|
4
5
|
class Page
|
|
5
6
|
include DataAccessible
|
|
6
7
|
include LayoutPlaceable
|
|
@@ -44,10 +45,10 @@ module Bridgetown
|
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
process(name)
|
|
47
|
-
read_yaml(
|
|
48
|
+
read_yaml(File.join(base, dir), name)
|
|
48
49
|
|
|
49
50
|
data.default_proc = proc do |_, key|
|
|
50
|
-
site.frontmatter_defaults.find(relative_path, type, key)
|
|
51
|
+
site.frontmatter_defaults.find(relative_path, type, key.to_s)
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
Bridgetown::Hooks.trigger :pages, :post_init, self
|
|
@@ -116,6 +117,7 @@ module Bridgetown
|
|
|
116
117
|
permalink: permalink
|
|
117
118
|
).to_s
|
|
118
119
|
end
|
|
120
|
+
alias_method :relative_url, :url
|
|
119
121
|
|
|
120
122
|
# Returns a hash of URL placeholder names (as symbols) mapping to the
|
|
121
123
|
# desired placeholder replacements. For details see "url.rb"
|
|
@@ -218,4 +220,11 @@ module Bridgetown
|
|
|
218
220
|
true
|
|
219
221
|
end
|
|
220
222
|
end
|
|
223
|
+
|
|
224
|
+
# set up virtual page class for future compatibility
|
|
225
|
+
class GeneratedPage < Page
|
|
226
|
+
def read_yaml(_base, _name, _opts = {})
|
|
227
|
+
self.data ||= HashWithDotAccess::Hash.new
|
|
228
|
+
end
|
|
229
|
+
end
|
|
221
230
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "zeitwerk"
|
|
4
|
-
|
|
5
3
|
module Bridgetown
|
|
6
4
|
class PluginManager
|
|
7
5
|
PLUGINS_GROUP = :bridgetown_plugins
|
|
@@ -135,7 +133,7 @@ module Bridgetown
|
|
|
135
133
|
sorted_plugin_files.each do |plugin_file|
|
|
136
134
|
self.class.add_registered_plugin plugin_file
|
|
137
135
|
end
|
|
138
|
-
Bridgetown::
|
|
136
|
+
Bridgetown::Utils::RequireGems.require_with_graceful_fail(sorted_plugin_files)
|
|
139
137
|
end
|
|
140
138
|
end
|
|
141
139
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
4
|
class Publisher
|
|
5
|
+
# @param site [Bridgetown::Site]
|
|
5
6
|
def initialize(site)
|
|
6
7
|
@site = site
|
|
7
8
|
end
|
|
@@ -11,13 +12,18 @@ module Bridgetown
|
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def hidden_in_the_future?(thing)
|
|
14
|
-
thing.respond_to?(:date)
|
|
15
|
+
return false unless thing.respond_to?(:date)
|
|
16
|
+
|
|
17
|
+
future_allowed =
|
|
18
|
+
thing.respond_to?(:collection) && thing.collection.metadata.future || @site.config.future
|
|
19
|
+
thing_time = thing.date.is_a?(Date) ? thing.date.to_time.to_i : thing.date.to_i
|
|
20
|
+
!future_allowed && thing_time > @site.time.to_i
|
|
15
21
|
end
|
|
16
22
|
|
|
17
23
|
private
|
|
18
24
|
|
|
19
25
|
def can_be_published?(thing)
|
|
20
|
-
thing.data.fetch("published", true) || @site.unpublished
|
|
26
|
+
thing.data.fetch("published", true) || @site.config.unpublished
|
|
21
27
|
end
|
|
22
28
|
end
|
|
23
29
|
end
|
|
@@ -11,20 +11,29 @@ module Bridgetown
|
|
|
11
11
|
# Read Site data from disk and load it into internal data structures.
|
|
12
12
|
#
|
|
13
13
|
# Returns nothing.
|
|
14
|
-
# rubocop:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
@site.layouts = LayoutReader.new(site).read
|
|
14
|
+
def read # rubocop:todo Metrics/AbcSize
|
|
15
|
+
site.defaults_reader.read
|
|
16
|
+
site.layouts = LayoutReader.new(site).read
|
|
18
17
|
read_directories
|
|
19
18
|
read_included_excludes
|
|
20
19
|
sort_files!
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
read_collections
|
|
21
|
+
site.data = if site.uses_resource?
|
|
22
|
+
site.collections.data.merge_data_resources
|
|
23
|
+
else
|
|
24
|
+
DataReader.new(site).read
|
|
25
|
+
end
|
|
23
26
|
Bridgetown::PluginManager.source_manifests.map(&:content).compact.each do |plugin_content_dir|
|
|
24
27
|
PluginContentReader.new(site, plugin_content_dir).read
|
|
25
28
|
end
|
|
26
29
|
end
|
|
27
|
-
|
|
30
|
+
|
|
31
|
+
def read_collections
|
|
32
|
+
site.collections.each_value do |collection|
|
|
33
|
+
collection.read unless !site.uses_resource? &&
|
|
34
|
+
collection.legacy_reader?
|
|
35
|
+
end
|
|
36
|
+
end
|
|
28
37
|
|
|
29
38
|
# Sorts posts, pages, and static files.
|
|
30
39
|
def sort_files!
|
|
@@ -54,14 +63,14 @@ module Bridgetown
|
|
|
54
63
|
file_path = @site.in_source_dir(base, entry)
|
|
55
64
|
if File.directory?(file_path)
|
|
56
65
|
dot_dirs << entry
|
|
57
|
-
elsif Utils.has_yaml_header?(file_path)
|
|
66
|
+
elsif Utils.has_yaml_header?(file_path) || Utils.has_rbfm_header?(file_path)
|
|
58
67
|
dot_pages << entry
|
|
59
68
|
else
|
|
60
69
|
dot_static_files << entry
|
|
61
70
|
end
|
|
62
71
|
end
|
|
63
72
|
|
|
64
|
-
retrieve_posts(dir)
|
|
73
|
+
retrieve_posts(dir) unless site.uses_resource?
|
|
65
74
|
retrieve_dirs(base, dir, dot_dirs)
|
|
66
75
|
retrieve_pages(dir, dot_pages)
|
|
67
76
|
retrieve_static_files(dir, dot_static_files)
|
|
@@ -89,7 +98,7 @@ module Bridgetown
|
|
|
89
98
|
def retrieve_dirs(_base, dir, dot_dirs)
|
|
90
99
|
dot_dirs.each do |file|
|
|
91
100
|
dir_path = site.in_source_dir(dir, file)
|
|
92
|
-
rel_path =
|
|
101
|
+
rel_path = File.join(dir, file)
|
|
93
102
|
@site.reader.read_directories(rel_path) unless @site.dest.chomp("/") == dir_path
|
|
94
103
|
end
|
|
95
104
|
end
|
|
@@ -102,18 +111,27 @@ module Bridgetown
|
|
|
102
111
|
#
|
|
103
112
|
# Returns nothing.
|
|
104
113
|
def retrieve_pages(dir, dot_pages)
|
|
114
|
+
if site.uses_resource?
|
|
115
|
+
dot_pages.each do |page_path|
|
|
116
|
+
site.collections.pages.read_resource(site.in_source_dir(dir, page_path))
|
|
117
|
+
end
|
|
118
|
+
return
|
|
119
|
+
end
|
|
120
|
+
|
|
105
121
|
site.pages.concat(PageReader.new(site, dir).read(dot_pages))
|
|
106
122
|
end
|
|
107
123
|
|
|
108
124
|
# Retrieve all the static files from the current directory,
|
|
109
125
|
# add them to the site and sort them.
|
|
110
126
|
#
|
|
111
|
-
# dir
|
|
112
|
-
#
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
127
|
+
# @param dir [String] The directory retrieve the static files from.
|
|
128
|
+
# @param files [Array<String>] The static files in the dir.
|
|
129
|
+
def retrieve_static_files(dir, files)
|
|
130
|
+
site.static_files.concat(
|
|
131
|
+
files.map do |file|
|
|
132
|
+
StaticFile.new(site, site.source, dir, file)
|
|
133
|
+
end
|
|
134
|
+
)
|
|
117
135
|
end
|
|
118
136
|
|
|
119
137
|
# Filter out any files/directories that are hidden or backup files (start
|
|
@@ -126,7 +144,7 @@ module Bridgetown
|
|
|
126
144
|
#
|
|
127
145
|
# Returns the Array of filtered entries.
|
|
128
146
|
def filter_entries(entries, base_directory = nil)
|
|
129
|
-
EntryFilter.new(site, base_directory).filter(entries)
|
|
147
|
+
EntryFilter.new(site, base_directory: base_directory).filter(entries)
|
|
130
148
|
end
|
|
131
149
|
|
|
132
150
|
# Read the entries from a particular directory for processing
|
|
@@ -165,14 +183,11 @@ module Bridgetown
|
|
|
165
183
|
end
|
|
166
184
|
|
|
167
185
|
def read_included_excludes
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
site.include.each do |entry|
|
|
186
|
+
site.config.include.each do |entry|
|
|
171
187
|
next if entry == ".htaccess"
|
|
172
188
|
|
|
173
189
|
entry_path = site.in_source_dir(entry)
|
|
174
190
|
next if File.directory?(entry_path)
|
|
175
|
-
next if entry_filter.symlink?(entry_path)
|
|
176
191
|
|
|
177
192
|
read_included_file(entry_path) if File.file?(entry_path)
|
|
178
193
|
end
|
|
@@ -184,7 +199,7 @@ module Bridgetown
|
|
|
184
199
|
if Utils.has_yaml_header?(entry_path)
|
|
185
200
|
site.pages.concat(PageReader.new(site, dir).read(file))
|
|
186
201
|
else
|
|
187
|
-
|
|
202
|
+
retrieve_static_files(dir, file)
|
|
188
203
|
end
|
|
189
204
|
end
|
|
190
205
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
|
+
# TODO: to be retired once the Resource engine is made official
|
|
4
5
|
class DataReader
|
|
5
6
|
attr_reader :site, :content
|
|
6
7
|
|
|
@@ -16,8 +17,8 @@ module Bridgetown
|
|
|
16
17
|
#
|
|
17
18
|
# Returns @content, a Hash of the .yaml, .yml,
|
|
18
19
|
# .json, and .csv files in the base directory
|
|
19
|
-
def read
|
|
20
|
-
base = site.in_source_dir(
|
|
20
|
+
def read
|
|
21
|
+
base = site.in_source_dir(site.config.data_dir)
|
|
21
22
|
read_data_to(base, @content)
|
|
22
23
|
merge_environment_specific_metadata!
|
|
23
24
|
@content = @content.with_dot_access
|
|
@@ -31,7 +32,7 @@ module Bridgetown
|
|
|
31
32
|
#
|
|
32
33
|
# Returns nothing
|
|
33
34
|
def read_data_to(dir, data)
|
|
34
|
-
return unless File.directory?(dir)
|
|
35
|
+
return unless File.directory?(dir)
|
|
35
36
|
|
|
36
37
|
entries = Dir.chdir(dir) do
|
|
37
38
|
Dir["*.{yaml,yml,json,csv,tsv}"] + Dir["*"].select { |fn| File.directory?(fn) }
|
|
@@ -39,7 +40,6 @@ module Bridgetown
|
|
|
39
40
|
|
|
40
41
|
entries.each do |entry|
|
|
41
42
|
path = @site.in_source_dir(dir, entry)
|
|
42
|
-
next if @entry_filter.symlink?(path)
|
|
43
43
|
|
|
44
44
|
if File.directory?(path)
|
|
45
45
|
read_data_to(
|
|
@@ -68,7 +68,7 @@ module Bridgetown
|
|
|
68
68
|
headers: true,
|
|
69
69
|
encoding: site.config["encoding"]).map(&:to_hash)
|
|
70
70
|
else
|
|
71
|
-
|
|
71
|
+
YAMLParser.load_file(path)
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|