bridgetown-core 2.0.0.beta2 → 2.0.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/bridgetown-core.gemspec +43 -42
- data/lib/bridgetown-core/cache.rb +3 -19
- data/lib/bridgetown-core/cleaner.rb +17 -19
- data/lib/bridgetown-core/collection.rb +6 -5
- data/lib/bridgetown-core/commands/base.rb +7 -0
- data/lib/bridgetown-core/commands/build.rb +35 -22
- data/lib/bridgetown-core/commands/concerns/actions.rb +4 -0
- data/lib/bridgetown-core/commands/console.rb +0 -1
- data/lib/bridgetown-core/commands/esbuild/esbuild.config.js +7 -6
- data/lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb +14 -13
- data/lib/bridgetown-core/commands/esbuild/migrate-from-webpack.rb +1 -1
- data/lib/bridgetown-core/commands/esbuild/update.rb +17 -3
- data/lib/bridgetown-core/commands/esbuild.rb +1 -1
- data/lib/bridgetown-core/commands/start.rb +12 -2
- data/lib/bridgetown-core/component.rb +1 -1
- data/lib/bridgetown-core/concerns/intuitive_expectations.rb +67 -0
- data/lib/bridgetown-core/concerns/layout_placeable.rb +1 -1
- data/lib/bridgetown-core/concerns/publishable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/content.rb +4 -1
- data/lib/bridgetown-core/concerns/site/extensible.rb +6 -1
- data/lib/bridgetown-core/concerns/site/fast_refreshable.rb +33 -18
- data/lib/bridgetown-core/concerns/site/localizable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/processable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/renderable.rb +3 -0
- data/lib/bridgetown-core/concerns/site/ssr.rb +1 -2
- data/lib/bridgetown-core/concerns/site/writable.rb +1 -0
- data/lib/bridgetown-core/concerns/viewable.rb +46 -0
- data/lib/bridgetown-core/configuration.rb +29 -23
- data/lib/bridgetown-core/configurations/gh-pages/gh-pages.yml +5 -5
- data/lib/bridgetown-core/configurations/minitesting.rb +24 -64
- data/lib/bridgetown-core/converter.rb +2 -7
- data/lib/bridgetown-core/converters/erb_templates.rb +11 -7
- data/lib/bridgetown-core/converters/identity.rb +3 -11
- data/lib/bridgetown-core/converters/liquid_templates.rb +3 -5
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +1 -1
- data/lib/bridgetown-core/converters/markdown.rb +11 -14
- data/lib/bridgetown-core/converters/serbea_templates.rb +10 -8
- data/lib/bridgetown-core/drops/drop.rb +29 -42
- data/lib/bridgetown-core/drops/resource_drop.rb +3 -12
- data/lib/bridgetown-core/errors.rb +2 -8
- data/lib/bridgetown-core/filters/condition_helpers.rb +6 -9
- data/lib/bridgetown-core/filters/date_filters.rb +22 -35
- data/lib/bridgetown-core/filters/grouping_filters.rb +11 -11
- data/lib/bridgetown-core/filters.rb +53 -72
- data/lib/bridgetown-core/front_matter/defaults.rb +14 -19
- data/lib/bridgetown-core/generated_page.rb +6 -6
- data/lib/bridgetown-core/generators/prototype_generator.rb +0 -2
- data/lib/bridgetown-core/helpers.rb +2 -2
- data/lib/bridgetown-core/hooks.rb +0 -1
- data/lib/bridgetown-core/layout.rb +3 -4
- data/lib/bridgetown-core/liquid_extensions.rb +3 -5
- data/lib/bridgetown-core/log_adapter.rb +37 -56
- data/lib/bridgetown-core/plugin_manager.rb +7 -3
- data/lib/bridgetown-core/rack/boot.rb +7 -57
- data/lib/bridgetown-core/rack/default_config.ru +14 -0
- data/lib/bridgetown-core/rack/loader_hooks.rb +83 -0
- data/lib/bridgetown-core/rack/logger.rb +0 -2
- data/lib/bridgetown-core/rack/routes.rb +3 -2
- data/lib/bridgetown-core/resource/base.rb +8 -8
- data/lib/bridgetown-core/resource/permalink_processor.rb +1 -1
- data/lib/bridgetown-core/resource/relations.rb +3 -1
- data/lib/bridgetown-core/ruby_template_view.rb +0 -1
- data/lib/bridgetown-core/static_file.rb +15 -20
- data/lib/bridgetown-core/tags/class_map.rb +1 -1
- data/lib/bridgetown-core/tags/post_url.rb +2 -32
- data/lib/bridgetown-core/utils/initializers.rb +2 -2
- data/lib/bridgetown-core/utils/require_gems.rb +1 -3
- data/lib/bridgetown-core/utils.rb +41 -44
- data/lib/bridgetown-core/watcher.rb +2 -3
- data/lib/bridgetown-core.rb +29 -10
- data/lib/roda/plugins/bridgetown_server.rb +13 -25
- data/lib/roda/plugins/bridgetown_ssr.rb +21 -3
- data/lib/roda/plugins/flashier.rb +57 -0
- data/lib/roda/plugins/generic_index.html +127 -0
- data/lib/roda/plugins/ssg.rb +3 -2
- data/lib/site_template/config/initializers.rb +2 -0
- data/lib/site_template/package.json.erb +1 -0
- data/lib/site_template/postcss.config.js.erb +1 -1
- metadata +26 -7
- data/lib/bridgetown-core/commands/doctor.rb +0 -147
@@ -77,12 +77,14 @@ module Bridgetown
|
|
77
77
|
bt_bound_url = "http://#{bt_options.bind}:#{port}"
|
78
78
|
|
79
79
|
# Set a local site URL in the config if one is not available
|
80
|
-
|
80
|
+
if Bridgetown.env.development? && !options["url"]
|
81
|
+
bt_options.url = bt_bound_url.sub("0.0.0.0", "localhost")
|
82
|
+
end
|
81
83
|
|
82
84
|
Bridgetown::Server.new({
|
83
85
|
Host: bt_options.bind,
|
84
86
|
Port: port,
|
85
|
-
config:
|
87
|
+
config: rack_config_file,
|
86
88
|
}).tap do |server|
|
87
89
|
if server.serveable?
|
88
90
|
pid_tracker.create_pid_dir
|
@@ -115,6 +117,14 @@ module Bridgetown
|
|
115
117
|
end
|
116
118
|
end
|
117
119
|
end
|
120
|
+
|
121
|
+
protected
|
122
|
+
|
123
|
+
def rack_config_file
|
124
|
+
File.exist?("config.ru") ?
|
125
|
+
"config.ru" :
|
126
|
+
File.expand_path("../rack/default_config.ru", __dir__)
|
127
|
+
end
|
118
128
|
end
|
119
129
|
end
|
120
130
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
# This is for including into Minitest::Expectation
|
5
|
+
module IntuitiveExpectations
|
6
|
+
def true?(msg = nil)
|
7
|
+
must_be(:itself, Minitest::Assertions::UNDEFINED, msg)
|
8
|
+
self
|
9
|
+
end
|
10
|
+
|
11
|
+
def false?(msg = nil)
|
12
|
+
wont_be(:itself, Minitest::Assertions::UNDEFINED, msg)
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
def ==(other)
|
17
|
+
must_equal(other)
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def !=(other)
|
22
|
+
must_not_equal(other)
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def nil?(msg = nil)
|
27
|
+
must_be_nil(msg)
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def not_nil?(msg = nil)
|
32
|
+
wont_be_nil(msg)
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def empty?(msg = nil)
|
37
|
+
must_be_empty(msg)
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def filled?(msg = nil)
|
42
|
+
wont_be_empty(msg)
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def include?(other, msg = nil)
|
47
|
+
must_include(other, msg)
|
48
|
+
self
|
49
|
+
end
|
50
|
+
alias_method :<<, :include?
|
51
|
+
|
52
|
+
def exclude?(other, msg = nil)
|
53
|
+
wont_include(other, msg)
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
def =~(other)
|
58
|
+
must_match(other)
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
def is_a?(klass, msg = nil)
|
63
|
+
must_be_instance_of(klass, msg)
|
64
|
+
self
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -4,7 +4,7 @@ module Bridgetown
|
|
4
4
|
module LayoutPlaceable
|
5
5
|
# Determine whether the file should be placed into layouts.
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# @return [Boolean] false if the document is an asset file or if the front matter
|
8
8
|
# specifies `layout: none`
|
9
9
|
def place_in_layout?
|
10
10
|
no_layout?.!
|
@@ -27,6 +27,7 @@ class Bridgetown::Site
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Returns the contents of the site metadata file or a blank hash
|
30
|
+
#
|
30
31
|
# @return [HashWithDotAccess::Hash] Returns a hash of site metadata
|
31
32
|
def metadata
|
32
33
|
signals["site_metadata"] ||= HashWithDotAccess::Hash.new
|
@@ -49,7 +50,6 @@ class Bridgetown::Site
|
|
49
50
|
#
|
50
51
|
# @return [HashWithDotAccess::Hash{String, Symbol => Collection}] A Hash
|
51
52
|
# containing a collection name-to-instance pairs.
|
52
|
-
#
|
53
53
|
# @return [HashWithDotAccess::Hash] Returns a blank hash if no items found
|
54
54
|
def collections
|
55
55
|
@collections ||= collection_names.each_with_object(
|
@@ -60,6 +60,7 @@ class Bridgetown::Site
|
|
60
60
|
end
|
61
61
|
|
62
62
|
# An array of collection names.
|
63
|
+
#
|
63
64
|
# @return [Array<String>] an array of collection names from the configuration,
|
64
65
|
# or an empty array if the `config["collections"]` key is not set.
|
65
66
|
def collection_names
|
@@ -84,6 +85,7 @@ class Bridgetown::Site
|
|
84
85
|
end
|
85
86
|
|
86
87
|
# Get all loaded resources.
|
88
|
+
#
|
87
89
|
# @return [Array<Bridgetown::Resource::Base>] an array of resources
|
88
90
|
def resources
|
89
91
|
collections.each_with_object(Set.new) do |(_, collection), set|
|
@@ -112,6 +114,7 @@ class Bridgetown::Site
|
|
112
114
|
end
|
113
115
|
|
114
116
|
# Loads and memoizes the parsed frontend bundler manifest file (if available)
|
117
|
+
#
|
115
118
|
# @return [Hash]
|
116
119
|
def frontend_manifest
|
117
120
|
@frontend_manifest ||= begin
|
@@ -4,6 +4,7 @@ class Bridgetown::Site
|
|
4
4
|
module Extensible
|
5
5
|
# Load necessary libraries, plugins, converters, and generators.
|
6
6
|
# This is only ever run once for the lifecycle of the site object.
|
7
|
+
#
|
7
8
|
# @see Converter
|
8
9
|
# @see Generator
|
9
10
|
# @see PluginManager
|
@@ -16,6 +17,7 @@ class Bridgetown::Site
|
|
16
17
|
end
|
17
18
|
|
18
19
|
# Run all Generators.
|
20
|
+
#
|
19
21
|
# @see Generator
|
20
22
|
# @return [void]
|
21
23
|
def generate
|
@@ -34,6 +36,7 @@ class Bridgetown::Site
|
|
34
36
|
end
|
35
37
|
|
36
38
|
# Get the implementation for the given Converter class.
|
39
|
+
#
|
37
40
|
# @param klass [Class] The Class of the Converter to fetch.
|
38
41
|
# @return [Converter] Returns the {Converter}
|
39
42
|
# instance implementing the given `Converter` class.
|
@@ -46,7 +49,8 @@ class Bridgetown::Site
|
|
46
49
|
|
47
50
|
# Create an array of instances of the subclasses of the class
|
48
51
|
# passed in as argument.
|
49
|
-
#
|
52
|
+
#
|
53
|
+
# @param klass [Class] class which is the parent of the subclasses.
|
50
54
|
# @return [Array<Converter, Generator>] Returns an array of instances of
|
51
55
|
# subclasses of `klass`.
|
52
56
|
def instantiate_subclasses(klass)
|
@@ -56,6 +60,7 @@ class Bridgetown::Site
|
|
56
60
|
end
|
57
61
|
|
58
62
|
# Shorthand for registering a site hook via {Bridgetown::Hooks}
|
63
|
+
#
|
59
64
|
# @param event [Symbol] name of the event (`:pre_read`, `:post_render`, etc.)
|
60
65
|
# @yield the block will be called when the event is triggered
|
61
66
|
# @yieldparam site the site which triggered the event hook
|
@@ -10,15 +10,17 @@ class Bridgetown::Site
|
|
10
10
|
@fast_refresh_ordering = 0
|
11
11
|
full_abort = false
|
12
12
|
found_gen_pages = false
|
13
|
-
|
14
|
-
|
13
|
+
found_route_file = false
|
14
|
+
paths.each do |path| # rubocop:todo Metrics
|
15
|
+
found_res = resources.select do |resource|
|
15
16
|
resource.id.start_with?("repo://") && in_source_dir(resource.relative_path) == path
|
16
17
|
end
|
17
18
|
|
18
19
|
layouts_to_reload = Set.new
|
19
|
-
locate_resource_layouts_and_partials_for_fash_refresh(path, layouts_to_reload) unless
|
20
|
+
locate_resource_layouts_and_partials_for_fash_refresh(path, layouts_to_reload) unless
|
21
|
+
found_res.any?
|
20
22
|
|
21
|
-
locate_components_for_fast_refresh(path) unless
|
23
|
+
locate_components_for_fast_refresh(path) unless found_res.any?
|
22
24
|
|
23
25
|
pages = locate_layouts_and_pages_for_fast_refresh(path, layouts_to_reload)
|
24
26
|
|
@@ -27,26 +29,33 @@ class Bridgetown::Site
|
|
27
29
|
self, layout.instance_variable_get(:@base), layout.name
|
28
30
|
)
|
29
31
|
end
|
30
|
-
liquid_renderer.reset unless layouts_to_reload.empty?
|
31
|
-
next unless res || !pages.empty?
|
32
32
|
|
33
|
-
|
33
|
+
if config.key?(:routes) # carve out fast refresh track for the routes plugin
|
34
|
+
found_route_file = config.routes.source_paths.any? do |routes_dir|
|
35
|
+
path.start_with?(in_source_dir(routes_dir))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
next unless found_res.any? || pages.any? || found_route_file
|
39
|
+
|
40
|
+
if pages.any?
|
34
41
|
found_gen_pages = true
|
35
42
|
mark_original_page_resources_for_fast_refresh(pages)
|
36
43
|
next
|
37
44
|
end
|
38
45
|
|
39
|
-
|
40
|
-
|
46
|
+
found_res.each do |res|
|
47
|
+
res.prepare_for_fast_refresh!.tap { full_abort = true unless _1 }
|
48
|
+
next unless res.collection.data?
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
50
|
+
res.collection.merge_data_resources.each do |k, v|
|
51
|
+
data[k] = v
|
52
|
+
signals[k] = v
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
47
56
|
|
48
57
|
marked_resources = resources.select(&:fast_refresh_order).sort_by(&:fast_refresh_order)
|
49
|
-
if full_abort || (marked_resources.empty? && !found_gen_pages)
|
58
|
+
if full_abort || (marked_resources.empty? && !found_gen_pages && !found_route_file)
|
50
59
|
# Darn, a full reload is needed (unless we're on a super-fast track)
|
51
60
|
if reload_if_needed
|
52
61
|
Bridgetown::Hooks.trigger :site, :pre_reload, self, paths
|
@@ -60,12 +69,14 @@ class Bridgetown::Site
|
|
60
69
|
|
61
70
|
Bridgetown::Hooks.trigger :site, :fast_refresh, self
|
62
71
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
72
|
+
unless found_route_file
|
73
|
+
liquid_renderer.reset
|
74
|
+
transform_resources_for_fast_refresh(marked_resources, found_gen_pages)
|
75
|
+
transform_generated_pages_for_fast_refresh
|
76
|
+
end
|
67
77
|
|
68
78
|
Bridgetown::Hooks.trigger :site, :post_write, self
|
79
|
+
Bridgetown.touch_live_reload_file
|
69
80
|
end
|
70
81
|
|
71
82
|
private
|
@@ -134,7 +145,11 @@ class Bridgetown::Site
|
|
134
145
|
end
|
135
146
|
|
136
147
|
def transform_resources_for_fast_refresh(marked_resources, found_gen_pages)
|
137
|
-
marked_resources.each
|
148
|
+
marked_resources.each do |res|
|
149
|
+
render_with_locale(res) do
|
150
|
+
res.transform!.write
|
151
|
+
end
|
152
|
+
end
|
138
153
|
number_of_resources = marked_resources.length
|
139
154
|
number_of_resources += 1 if found_gen_pages
|
140
155
|
Bridgetown.logger.info(
|
@@ -3,6 +3,7 @@
|
|
3
3
|
class Bridgetown::Site
|
4
4
|
module Localizable
|
5
5
|
# Returns the current and/or default configured locale
|
6
|
+
#
|
6
7
|
# @return String
|
7
8
|
def locale
|
8
9
|
@locale ||= begin
|
@@ -16,6 +17,7 @@ class Bridgetown::Site
|
|
16
17
|
end
|
17
18
|
|
18
19
|
# Sets the current locale for the site
|
20
|
+
#
|
19
21
|
# @param new_locale [String] for example: "en" for English, "es" for Spanish
|
20
22
|
def locale=(new_locale)
|
21
23
|
I18n.locale = @locale = new_locale.to_sym
|
@@ -3,6 +3,7 @@
|
|
3
3
|
class Bridgetown::Site
|
4
4
|
module Processable
|
5
5
|
# Reset, Read, Generate, Render, Cleanup, Process, and Write this Site to output.
|
6
|
+
#
|
6
7
|
# @return [void]
|
7
8
|
# @see #reset
|
8
9
|
# @see #read
|
@@ -67,6 +68,7 @@ class Bridgetown::Site
|
|
67
68
|
end
|
68
69
|
|
69
70
|
# Read data from disk and load it into internal memory.
|
71
|
+
#
|
70
72
|
# @return [void]
|
71
73
|
def read
|
72
74
|
Bridgetown::Hooks.trigger :site, :pre_read, self
|
@@ -3,6 +3,7 @@
|
|
3
3
|
class Bridgetown::Site
|
4
4
|
module Renderable
|
5
5
|
# Render all pages & documents so they're ready to be written out to disk.
|
6
|
+
#
|
6
7
|
# @return [void]
|
7
8
|
# @see Page
|
8
9
|
# @see Document
|
@@ -97,6 +98,7 @@ class Bridgetown::Site
|
|
97
98
|
end
|
98
99
|
|
99
100
|
# Renders all resources
|
101
|
+
#
|
100
102
|
# @return [void]
|
101
103
|
def render_resources
|
102
104
|
collections.each_value do |collection|
|
@@ -109,6 +111,7 @@ class Bridgetown::Site
|
|
109
111
|
end
|
110
112
|
|
111
113
|
# Renders a content item while ensuring site locale is set if the data is available.
|
114
|
+
#
|
112
115
|
# @param item [Bridgetown::Resource::Base] The item to render
|
113
116
|
# @yield Runs the block in between locale setting and resetting
|
114
117
|
# @return [void]
|
@@ -28,7 +28,7 @@ class Bridgetown::Site
|
|
28
28
|
|
29
29
|
def enable_ssr
|
30
30
|
Bridgetown.logger.info "SSR:", "enabled."
|
31
|
-
config.fast_refresh = false # SSR mode and Fast Refresh mode are
|
31
|
+
config.fast_refresh = false # SSR mode and Fast Refresh mode are mutually exclusive
|
32
32
|
@ssr_enabled = true
|
33
33
|
end
|
34
34
|
|
@@ -45,7 +45,6 @@ class Bridgetown::Site
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def ssr_first_read
|
48
|
-
# TODO: this shouldn't be running twice, right?!
|
49
48
|
Bridgetown::Hooks.trigger :site, :pre_read, self
|
50
49
|
defaults_reader.tap do |d|
|
51
50
|
d.path_defaults.clear
|
@@ -17,6 +17,7 @@ class Bridgetown::Site
|
|
17
17
|
write_redirecting_index if config.prefix_default_locale
|
18
18
|
|
19
19
|
Bridgetown::Hooks.trigger :site, :post_write, self
|
20
|
+
Bridgetown.touch_live_reload_file unless config.disable_disk_cache
|
20
21
|
end
|
21
22
|
|
22
23
|
# Yields all content objects while looping through {#generated_pages},
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
# This mixin for Bridgetown components allows you to provide front matter and render
|
5
|
+
# the component template via the layouts transformation pipeline, which can be called
|
6
|
+
# from any Roda route
|
7
|
+
module Viewable
|
8
|
+
include Bridgetown::RodaCallable
|
9
|
+
include Bridgetown::Transformable
|
10
|
+
|
11
|
+
def site
|
12
|
+
@site ||= Bridgetown::Current.site
|
13
|
+
end
|
14
|
+
|
15
|
+
def data
|
16
|
+
@data ||= HashWithDotAccess::Hash.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def front_matter(&block)
|
20
|
+
Bridgetown::FrontMatter::RubyFrontMatter.new(data:).tap { _1.instance_exec(&block) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def relative_path = self.class.source_location.delete_prefix("#{site.root_dir}/")
|
24
|
+
|
25
|
+
# Render the component template in the layout specified in your front matter
|
26
|
+
#
|
27
|
+
# @param app [Roda]
|
28
|
+
def render_in_layout(app)
|
29
|
+
render_in(app) => rendered_output
|
30
|
+
|
31
|
+
site.validated_layouts_for(self, data.layout).each do |layout|
|
32
|
+
transform_with_layout(layout, rendered_output, self) => rendered_output
|
33
|
+
end
|
34
|
+
|
35
|
+
rendered_output
|
36
|
+
end
|
37
|
+
|
38
|
+
# Pass a block of front matter and render the component template in layouts
|
39
|
+
#
|
40
|
+
# @param app [Roda]
|
41
|
+
def render_with(app, &)
|
42
|
+
front_matter(&)
|
43
|
+
render_in_layout(app)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -111,26 +111,28 @@ module Bridgetown
|
|
111
111
|
attr_writer :source_manifests, :roda_initializers
|
112
112
|
|
113
113
|
class << self
|
114
|
-
#
|
114
|
+
# Produce a Configuration ready for use in a Site.
|
115
115
|
# It takes the input, fills in the defaults where values do not exist.
|
116
116
|
#
|
117
|
-
# user_config
|
118
|
-
#
|
119
|
-
# Returns a Configuration filled with defaults.
|
117
|
+
# @param user_config [Hash, Configuration]
|
118
|
+
# @return [Configuration] filled with defaults
|
120
119
|
def from(user_config, starting_defaults = DEFAULTS)
|
121
120
|
Utils.deep_merge_hashes(starting_defaults.deep_dup, Configuration.new(user_config))
|
122
121
|
.merge_environment_specific_options!
|
123
122
|
.setup_load_paths!
|
124
123
|
.setup_locales
|
125
124
|
.add_default_collections
|
126
|
-
.
|
125
|
+
.add_destination_paths
|
127
126
|
.check_include_exclude
|
128
127
|
end
|
129
128
|
end
|
130
129
|
|
131
130
|
def run_initializers!(context:) # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity
|
132
131
|
initializers_file = File.join(root_dir, "config", "initializers.rb")
|
133
|
-
|
132
|
+
unless File.file?(initializers_file)
|
133
|
+
setup_load_paths! appending: true
|
134
|
+
return
|
135
|
+
end
|
134
136
|
|
135
137
|
load initializers_file
|
136
138
|
|
@@ -149,11 +151,15 @@ module Bridgetown
|
|
149
151
|
dsl._run_builtins!
|
150
152
|
self.url = cached_url if cached_url # restore local development URL if need be
|
151
153
|
|
152
|
-
|
154
|
+
setup_post_init!
|
153
155
|
|
154
156
|
self
|
155
157
|
end
|
156
158
|
|
159
|
+
def setup_post_init!
|
160
|
+
add_destination_paths.setup_load_paths! appending: true
|
161
|
+
end
|
162
|
+
|
157
163
|
# @return [Set<SourceManifest>]
|
158
164
|
def source_manifests
|
159
165
|
@source_manifests ||= Set.new
|
@@ -177,16 +183,14 @@ module Bridgetown
|
|
177
183
|
# Directory of the top-level root where config files are located
|
178
184
|
#
|
179
185
|
# @param override [Hash] options hash which will override value if key is present
|
180
|
-
#
|
181
186
|
# @return [String] path to the Bridgetown root directory
|
182
187
|
def root_dir(override = {})
|
183
188
|
get_config_value_with_override("root_dir", override)
|
184
189
|
end
|
185
190
|
|
186
|
-
#
|
191
|
+
# Directory of the Bridgetown source folder
|
187
192
|
#
|
188
193
|
# @param override [Hash] options hash which will override value if key is present
|
189
|
-
#
|
190
194
|
# @return [String] path to the Bridgetown source directory
|
191
195
|
def source(override = {})
|
192
196
|
get_config_value_with_override("source", override)
|
@@ -208,11 +212,10 @@ module Bridgetown
|
|
208
212
|
raise "Unable to parse `#{File.basename(filename)}'. #{e.message}"
|
209
213
|
end
|
210
214
|
|
211
|
-
#
|
212
|
-
#
|
213
|
-
# override - the command-line options hash
|
215
|
+
# Generate list of configuration files from the override
|
214
216
|
#
|
215
|
-
#
|
217
|
+
# @param override [Hash] the command-line options hash
|
218
|
+
# @return [Array<string>] config files
|
216
219
|
def config_files(override)
|
217
220
|
# Adjust verbosity quickly
|
218
221
|
Bridgetown.logger.adjust_verbosity(
|
@@ -232,9 +235,8 @@ module Bridgetown
|
|
232
235
|
# Read in a list of configuration files and merge with this hash
|
233
236
|
#
|
234
237
|
# @param files [Array<String>]
|
235
|
-
#
|
236
238
|
# @return [Hash] configuration with the defaults overridden by the values in the
|
237
|
-
#
|
239
|
+
# configuration files
|
238
240
|
def read_config_files(files)
|
239
241
|
config = self
|
240
242
|
|
@@ -257,7 +259,6 @@ module Bridgetown
|
|
257
259
|
# Read configuration and return merged Hash
|
258
260
|
#
|
259
261
|
# @param file [String] the path to the YAML file to be read in
|
260
|
-
#
|
261
262
|
# @return [Hash]
|
262
263
|
def read_config_file(file)
|
263
264
|
default_config_file = file == "bridgetown.config.yml"
|
@@ -289,13 +290,13 @@ module Bridgetown
|
|
289
290
|
end
|
290
291
|
|
291
292
|
def setup_load_paths!(appending: false) # rubocop:todo Metrics
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
self[:destination] = File.expand_path(self[:destination], self[:root_dir])
|
293
|
+
self[:root_dir] = File.expand_path(self[:root_dir])
|
294
|
+
self[:source] = File.expand_path(self[:source], self[:root_dir])
|
295
|
+
self[:destination] = File.expand_path(self[:destination], self[:root_dir])
|
296
296
|
|
297
|
+
unless appending
|
297
298
|
autoload_paths.unshift({
|
298
|
-
path: self[:plugins_dir],
|
299
|
+
path: File.expand_path(self[:plugins_dir], self[:root_dir]),
|
299
300
|
eager: true,
|
300
301
|
})
|
301
302
|
autoload_paths.unshift({
|
@@ -363,13 +364,18 @@ module Bridgetown
|
|
363
364
|
vendor/bundle/ vendor/cache/ vendor/gems/ vendor/ruby/
|
364
365
|
).freeze
|
365
366
|
|
366
|
-
def
|
367
|
+
def add_destination_paths
|
368
|
+
self["keep_files"] << "_bridgetown" unless
|
369
|
+
self["keep_files"].nil?.! && self["keep_files"].include?("_bridgetown")
|
370
|
+
|
367
371
|
return self if self["exclude"].nil?
|
368
372
|
|
369
373
|
self["exclude"].concat(DEFAULT_EXCLUDES).uniq!
|
370
374
|
self
|
371
375
|
end
|
372
376
|
|
377
|
+
alias_method :add_default_excludes, :add_destination_paths
|
378
|
+
|
373
379
|
def should_execute_inline_ruby?
|
374
380
|
ENV["BRIDGETOWN_RUBY_IN_FRONT_MATTER"] != "false" &&
|
375
381
|
self["ruby_in_front_matter"]
|
@@ -9,7 +9,7 @@ jobs:
|
|
9
9
|
build:
|
10
10
|
runs-on: ubuntu-latest
|
11
11
|
steps:
|
12
|
-
- uses: actions/checkout@
|
12
|
+
- uses: actions/checkout@v4
|
13
13
|
|
14
14
|
- name: Setup Ruby
|
15
15
|
uses: ruby/setup-ruby@v1
|
@@ -17,9 +17,9 @@ jobs:
|
|
17
17
|
bundler-cache: true
|
18
18
|
|
19
19
|
- name: Setup Node
|
20
|
-
uses: actions/setup-node@
|
20
|
+
uses: actions/setup-node@v4
|
21
21
|
with:
|
22
|
-
node-version: "
|
22
|
+
node-version: "22"
|
23
23
|
cache: "npm"
|
24
24
|
- run: npm install
|
25
25
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
29
29
|
run: bin/bridgetown deploy
|
30
30
|
|
31
31
|
- name: Upload build artifact
|
32
|
-
uses: actions/upload-pages-artifact@
|
32
|
+
uses: actions/upload-pages-artifact@v3
|
33
33
|
with:
|
34
34
|
path: ./output
|
35
35
|
|
@@ -48,4 +48,4 @@ jobs:
|
|
48
48
|
steps:
|
49
49
|
- name: Deploy to GitHub Pages
|
50
50
|
id: deployment
|
51
|
-
uses: actions/deploy-pages@
|
51
|
+
uses: actions/deploy-pages@v4
|