bridgetown-core 0.13.0 → 0.14.0
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/bin/bridgetown +0 -25
- data/bridgetown-core.gemspec +4 -1
- data/lib/bridgetown-core.rb +4 -1
- data/lib/bridgetown-core/cleaner.rb +1 -0
- data/lib/bridgetown-core/command.rb +10 -4
- data/lib/bridgetown-core/commands/console.rb +1 -2
- data/lib/bridgetown-core/commands/doctor.rb +1 -2
- data/lib/bridgetown-core/commands/new.rb +0 -3
- data/lib/bridgetown-core/commands/plugins.rb +169 -0
- data/lib/bridgetown-core/{convertible.rb → concerns/convertible.rb} +2 -2
- data/lib/bridgetown-core/concerns/site/configurable.rb +153 -0
- data/lib/bridgetown-core/concerns/site/content.rb +111 -0
- data/lib/bridgetown-core/concerns/site/extensible.rb +56 -0
- data/lib/bridgetown-core/concerns/site/processable.rb +74 -0
- data/lib/bridgetown-core/concerns/site/renderable.rb +50 -0
- data/lib/bridgetown-core/concerns/site/writable.rb +31 -0
- data/lib/bridgetown-core/configuration.rb +2 -9
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +0 -3
- data/lib/bridgetown-core/document.rb +1 -1
- data/lib/bridgetown-core/drops/site_drop.rb +1 -1
- data/lib/bridgetown-core/external.rb +17 -21
- data/lib/bridgetown-core/filters.rb +10 -0
- data/lib/bridgetown-core/generators/prototype_generator.rb +1 -1
- data/lib/bridgetown-core/hooks.rb +62 -62
- data/lib/bridgetown-core/layout.rb +10 -4
- data/lib/bridgetown-core/page.rb +9 -2
- data/lib/bridgetown-core/plugin.rb +2 -0
- data/lib/bridgetown-core/plugin_manager.rb +62 -12
- data/lib/bridgetown-core/reader.rb +5 -0
- data/lib/bridgetown-core/readers/data_reader.rb +5 -2
- data/lib/bridgetown-core/readers/layout_reader.rb +9 -2
- data/lib/bridgetown-core/readers/plugin_content_reader.rb +48 -0
- data/lib/bridgetown-core/renderer.rb +7 -10
- data/lib/bridgetown-core/site.rb +20 -463
- data/lib/bridgetown-core/utils.rb +1 -27
- data/lib/bridgetown-core/utils/ruby_exec.rb +1 -4
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/bridgetown-core/watcher.rb +5 -1
- data/lib/site_template/plugins/{.keep → builders/.keep} +0 -0
- data/lib/site_template/plugins/site_builder.rb +4 -0
- data/lib/site_template/src/_includes/navbar.html +1 -0
- data/lib/site_template/src/posts.md +15 -0
- data/lib/site_template/start.js +1 -1
- metadata +58 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2c8f263d4104e1dc79885d0ecb19226a5b504518af3c43cb48c9e8da90fe971
|
4
|
+
data.tar.gz: b52e7a958ea715407c689c492365e44de88cd42ed0193be58f4acaed00efd58d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef77c2319ef1a31cbc9a4a00c6bbfcfc148d662f97b18b337d094f8bb473ea16ad61ccc5bcc0a16070db5beea331a48754c0ef83e2841e804f598cb6e052c420
|
7
|
+
data.tar.gz: 22727baee9961e123388a683eac0d03fb9db6b0dece4cdb1c5e2515d022eb12c4c7ad3f7d34116bb7548691d955febc86d7d174be9482ff6db1dcceda5153040
|
data/bin/bridgetown
CHANGED
@@ -17,31 +17,6 @@ Mercenary.program(:bridgetown) do |p|
|
|
17
17
|
p.description "Bridgetown is a Webpack-aware, Ruby-powered static site generator for the modern Jamstack era"
|
18
18
|
p.syntax "bridgetown <subcommand> [options]"
|
19
19
|
|
20
|
-
# TODO: it seems wonky to include build options in this top-level
|
21
|
-
# exe. Should probably remove most things here and relocated to
|
22
|
-
# individual comments. …in fact there are duplicate option listings
|
23
|
-
# if you do bridgetown build --help — ouch!
|
24
|
-
p.option "source", "-s", "--source [DIR]", "Source directory (defaults to src)"
|
25
|
-
p.option "destination", "-d", "--destination [DIR]",
|
26
|
-
"Destination directory (defaults to output)"
|
27
|
-
p.option "plugins_dir", "-p", "--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]", Array,
|
28
|
-
"Plugins directory (defaults to plugins)"
|
29
|
-
p.option "layouts_dir", "--layouts DIR", String,
|
30
|
-
"Layouts directory (defaults to src/_layouts)"
|
31
|
-
p.option "profile", "--profile", "Generate a Liquid rendering profile"
|
32
|
-
|
33
|
-
# TODO: this is not the way to bring in extra command gems!
|
34
|
-
# Bridgetown::External.require_if_present(Bridgetown::External.blessed_gems) do |g, ver_constraint|
|
35
|
-
# cmd = g.split("-").last
|
36
|
-
# p.command(cmd.to_sym) do |c|
|
37
|
-
# c.syntax cmd
|
38
|
-
# c.action do
|
39
|
-
# Bridgetown.logger.abort_with "You must install the '#{g}' gem" \
|
40
|
-
# " version #{ver_constraint} to use the 'bridgetown #{cmd}' command."
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
# end
|
44
|
-
|
45
20
|
Bridgetown::Command.subclasses.each { |c| c.init_with_program(p) }
|
46
21
|
|
47
22
|
p.action do |args, _|
|
data/bridgetown-core.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.license = "MIT"
|
9
9
|
s.author = "Bridgetown Team"
|
10
10
|
s.email = "maintainers@bridgetownrb.com"
|
11
|
-
s.homepage = "https://bridgetownrb.com"
|
11
|
+
s.homepage = "https://www.bridgetownrb.com"
|
12
12
|
s.summary = "A Webpack-aware, Ruby-based static site generator for the modern Jamstack era"
|
13
13
|
s.description = "Bridgetown is a Webpack-aware, Ruby-powered static site generator for the modern Jamstack era"
|
14
14
|
|
@@ -31,13 +31,16 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.required_ruby_version = ">= 2.5.0"
|
32
32
|
s.required_rubygems_version = ">= 2.7.0"
|
33
33
|
|
34
|
+
s.add_runtime_dependency("activesupport", "~> 6.0")
|
34
35
|
s.add_runtime_dependency("addressable", "~> 2.4")
|
35
36
|
s.add_runtime_dependency("colorator", "~> 1.0")
|
36
37
|
s.add_runtime_dependency("faraday", "~> 1.0")
|
38
|
+
s.add_runtime_dependency("faraday_middleware", "~> 1.0")
|
37
39
|
s.add_runtime_dependency("i18n", "~> 1.0")
|
38
40
|
s.add_runtime_dependency("kramdown", "~> 2.1")
|
39
41
|
s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
|
40
42
|
s.add_runtime_dependency("liquid", "~> 4.0")
|
43
|
+
s.add_runtime_dependency("liquid-render-tag", "~> 0.2")
|
41
44
|
s.add_runtime_dependency("listen", "~> 3.0")
|
42
45
|
s.add_runtime_dependency("mercenary", "~> 0.4.0")
|
43
46
|
s.add_runtime_dependency("pathutil", "~> 0.9")
|
data/lib/bridgetown-core.rb
CHANGED
@@ -29,10 +29,12 @@ require "csv"
|
|
29
29
|
require "json"
|
30
30
|
|
31
31
|
# 3rd party
|
32
|
+
require "active_support/core_ext/hash/indifferent_access"
|
32
33
|
require "pathutil"
|
33
34
|
require "addressable/uri"
|
34
35
|
require "safe_yaml/load"
|
35
36
|
require "liquid"
|
37
|
+
require "liquid-render-tag"
|
36
38
|
require "kramdown"
|
37
39
|
require "colorator"
|
38
40
|
require "i18n"
|
@@ -49,7 +51,7 @@ module Bridgetown
|
|
49
51
|
autoload :Cleaner, "bridgetown-core/cleaner"
|
50
52
|
autoload :Collection, "bridgetown-core/collection"
|
51
53
|
autoload :Configuration, "bridgetown-core/configuration"
|
52
|
-
autoload :Convertible, "bridgetown-core/convertible"
|
54
|
+
autoload :Convertible, "bridgetown-core/concerns/convertible"
|
53
55
|
autoload :Deprecator, "bridgetown-core/deprecator"
|
54
56
|
autoload :Document, "bridgetown-core/document"
|
55
57
|
autoload :EntryFilter, "bridgetown-core/entry_filter"
|
@@ -65,6 +67,7 @@ module Bridgetown
|
|
65
67
|
autoload :LayoutReader, "bridgetown-core/readers/layout_reader"
|
66
68
|
autoload :PostReader, "bridgetown-core/readers/post_reader"
|
67
69
|
autoload :PageReader, "bridgetown-core/readers/page_reader"
|
70
|
+
autoload :PluginContentReader, "bridgetown-core/readers/plugin_content_reader"
|
68
71
|
autoload :StaticFileReader, "bridgetown-core/readers/static_file_reader"
|
69
72
|
autoload :LogAdapter, "bridgetown-core/log_adapter"
|
70
73
|
autoload :Page, "bridgetown-core/page"
|
@@ -53,11 +53,16 @@ module Bridgetown
|
|
53
53
|
def add_build_options(cmd)
|
54
54
|
cmd.option "config", "--config CONFIG_FILE[,CONFIG_FILE2,...]",
|
55
55
|
Array, "Custom configuration file"
|
56
|
-
cmd.option "
|
57
|
-
"
|
58
|
-
cmd.option "
|
56
|
+
cmd.option "source", "-s", "--source [DIR]",
|
57
|
+
"Source directory (defaults to src)"
|
58
|
+
cmd.option "destination", "-d", "--destination [DIR]",
|
59
|
+
"Destination directory (defaults to output)"
|
60
|
+
cmd.option "root_dir", "-r", "--root_dir [DIR]", "The top-level root folder" \
|
59
61
|
" where config files are located"
|
60
|
-
cmd.option "
|
62
|
+
cmd.option "plugins_dir", "-p", "--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]", Array,
|
63
|
+
"Plugins directory (defaults to plugins)"
|
64
|
+
cmd.option "layouts_dir", "--layouts [DIR]", String,
|
65
|
+
"Layouts directory (defaults to src/_layouts)"
|
61
66
|
cmd.option "future", "--future", "Publishes posts with a future date"
|
62
67
|
cmd.option "limit_posts", "--limit_posts MAX_POSTS", Integer,
|
63
68
|
"Limits the number of posts to parse and publish"
|
@@ -70,6 +75,7 @@ module Bridgetown
|
|
70
75
|
"Render posts that were marked as unpublished"
|
71
76
|
cmd.option "disable_disk_cache", "--disable-disk-cache",
|
72
77
|
"Disable caching to disk"
|
78
|
+
cmd.option "profile", "--profile", "Generate a Liquid rendering profile"
|
73
79
|
cmd.option "quiet", "-q", "--quiet", "Silence output."
|
74
80
|
cmd.option "verbose", "-V", "--verbose", "Print verbose output."
|
75
81
|
cmd.option "incremental", "-I", "--incremental", "Enable incremental rebuild."
|
@@ -12,8 +12,7 @@ module Bridgetown
|
|
12
12
|
c.description "Invoke an IRB console with the site loaded"
|
13
13
|
c.alias :c
|
14
14
|
|
15
|
-
c
|
16
|
-
"Custom configuration file"
|
15
|
+
add_build_options(c)
|
17
16
|
|
18
17
|
c.action do |_, options|
|
19
18
|
Bridgetown::Commands::Console.process(options)
|
@@ -9,8 +9,7 @@ module Bridgetown
|
|
9
9
|
c.syntax "doctor"
|
10
10
|
c.description "Search site and print specific deprecation warnings"
|
11
11
|
|
12
|
-
c
|
13
|
-
"Custom configuration file"
|
12
|
+
add_build_options(c)
|
14
13
|
|
15
14
|
c.action do |_, options|
|
16
15
|
Bridgetown::Commands::Doctor.process(options)
|
@@ -0,0 +1,169 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Commands
|
5
|
+
class Plugins < Command
|
6
|
+
class << self
|
7
|
+
def init_with_program(prog)
|
8
|
+
plugins_cmd = prog.command(:plugins) do |c|
|
9
|
+
c.syntax "plugins <subcommand>"
|
10
|
+
c.description "List installed plugins or access plugin content"
|
11
|
+
|
12
|
+
c.option "config", "--config CONFIG_FILE[,CONFIG_FILE2,...]", Array,
|
13
|
+
"Custom configuration file"
|
14
|
+
|
15
|
+
c.action do
|
16
|
+
output_supercommand_syntax(c)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
plugins_cmd.command(:list) do |subcmd|
|
21
|
+
subcmd.syntax "list"
|
22
|
+
subcmd.description "List information about installed plugins"
|
23
|
+
|
24
|
+
subcmd.action do |_, options|
|
25
|
+
list(options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
plugins_cmd.command(:cd) do |subcmd|
|
30
|
+
subcmd.syntax "cd <origin/dir>"
|
31
|
+
subcmd.description "Open directory (content, layouts, etc.) within the plugin origin"
|
32
|
+
|
33
|
+
subcmd.action do |args, options|
|
34
|
+
if args.empty?
|
35
|
+
puts subcmd.to_s
|
36
|
+
else
|
37
|
+
cd(args, options)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def output_supercommand_syntax(supercmd)
|
44
|
+
puts supercmd.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def list(options)
|
48
|
+
site = Bridgetown::Site.new(configuration_from_options(options))
|
49
|
+
site.reset
|
50
|
+
Bridgetown::Hooks.trigger :site, :pre_read, site
|
51
|
+
|
52
|
+
pm = site.plugin_manager
|
53
|
+
|
54
|
+
plugins_list = pm.class.registered_plugins.reject do |plugin|
|
55
|
+
plugin.to_s.end_with? "site_builder.rb"
|
56
|
+
end
|
57
|
+
|
58
|
+
Bridgetown.logger.info("Registered Plugins:", plugins_list.length.to_s.yellow.bold)
|
59
|
+
|
60
|
+
plugins_list.each do |plugin|
|
61
|
+
unless plugin.to_s.end_with? "site_builder.rb"
|
62
|
+
Bridgetown.logger.info("", plugin.to_s.sub(site.in_root_dir("/"), ""))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
Bridgetown.logger.info("Source Manifests:", "---") unless pm.class.source_manifests.empty?
|
67
|
+
|
68
|
+
pm.class.source_manifests.each do |manifest|
|
69
|
+
Bridgetown.logger.info("Origin:", (manifest.origin || "n/a").to_s.green)
|
70
|
+
Bridgetown.logger.info("Components:", (manifest.components || "n/a").to_s.cyan)
|
71
|
+
Bridgetown.logger.info("Content:", (manifest.content || "n/a").to_s.cyan)
|
72
|
+
Bridgetown.logger.info("Layouts:", (manifest.layouts || "n/a").to_s.cyan)
|
73
|
+
|
74
|
+
Bridgetown.logger.info("", "---")
|
75
|
+
end
|
76
|
+
|
77
|
+
unless Bridgetown.autoload? :Builder
|
78
|
+
builders = Bridgetown::Builder.descendants
|
79
|
+
Bridgetown.logger.info("Builders:", builders.length.to_s.yellow.bold)
|
80
|
+
|
81
|
+
builders.each do |builder|
|
82
|
+
name = builder.respond_to?(:custom_name) ? builder.custom_name : builder.name
|
83
|
+
name_components = name.split("::")
|
84
|
+
last_name = name_components.pop
|
85
|
+
name_components.push last_name.magenta
|
86
|
+
Bridgetown.logger.info("", name_components.join("::"))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
Bridgetown.logger.info("Converters:", site.converters.length.to_s.yellow.bold)
|
91
|
+
|
92
|
+
site.converters.each do |converter|
|
93
|
+
name = plugin_name_for(converter)
|
94
|
+
name_components = name.split("::")
|
95
|
+
last_name = name_components.pop
|
96
|
+
name_components.push last_name.magenta
|
97
|
+
Bridgetown.logger.info("", name_components.join("::"))
|
98
|
+
end
|
99
|
+
|
100
|
+
Bridgetown.logger.info("Generators:", site.generators.length.to_s.yellow.bold)
|
101
|
+
|
102
|
+
site.generators.each do |generator|
|
103
|
+
name = plugin_name_for(generator)
|
104
|
+
name_components = name.split("::")
|
105
|
+
last_name = name_components.pop
|
106
|
+
name_components.push last_name.magenta
|
107
|
+
Bridgetown.logger.info("", name_components.join("::"))
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# This is super useful if you want to copy files out of plugins to override.
|
112
|
+
#
|
113
|
+
# Example:
|
114
|
+
# bridgetown plugins cd AwesomePlugin/layouts
|
115
|
+
# cp -r * $BRIDGETOWN_SITE/src/_layouts
|
116
|
+
#
|
117
|
+
# Now all the plugin's layouts will be in the site repo directly.
|
118
|
+
#
|
119
|
+
def cd(args, options)
|
120
|
+
site = Bridgetown::Site.new(configuration_from_options(options))
|
121
|
+
|
122
|
+
pm = site.plugin_manager
|
123
|
+
|
124
|
+
directive = args[0].split("/")
|
125
|
+
unless directive[1]
|
126
|
+
Bridgetown.logger.warn("Oops!", "Your command needs to be in the <origin/dir> format")
|
127
|
+
return
|
128
|
+
end
|
129
|
+
|
130
|
+
manifest = pm.class.source_manifests.find do |source_manifest|
|
131
|
+
source_manifest.origin.to_s == directive[0]
|
132
|
+
end
|
133
|
+
|
134
|
+
if manifest&.respond_to?(directive[1].downcase)
|
135
|
+
dir = manifest.send(directive[1].downcase)
|
136
|
+
Bridgetown.logger.info("Opening the #{dir.green} folder for" \
|
137
|
+
" #{manifest.origin.to_s.cyan}…")
|
138
|
+
Bridgetown.logger.info("Type #{"exit".yellow} when you're done to" \
|
139
|
+
" return to your site root.")
|
140
|
+
puts
|
141
|
+
|
142
|
+
Dir.chdir dir do
|
143
|
+
ENV["BRIDGETOWN_SITE"] = site.root_dir
|
144
|
+
if ENV["SHELL"]
|
145
|
+
system(ENV["SHELL"])
|
146
|
+
else
|
147
|
+
system("/bin/sh")
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
puts
|
152
|
+
Bridgetown.logger.info("Done!", "You're back in #{Dir.pwd.green}")
|
153
|
+
else
|
154
|
+
Bridgetown.logger.warn("Oops!", "I wasn't able to find the" \
|
155
|
+
" #{directive[1]} folder for #{directive[0]}")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def plugin_name_for(plugin)
|
160
|
+
if plugin.class.respond_to?(:custom_name)
|
161
|
+
plugin.class.custom_name
|
162
|
+
else
|
163
|
+
plugin.class.name
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -42,7 +42,7 @@ module Bridgetown
|
|
42
42
|
**Utils.merged_file_read_opts(site, opts))
|
43
43
|
if content =~ Document::YAML_FRONT_MATTER_REGEXP
|
44
44
|
self.content = $POSTMATCH
|
45
|
-
self.data = SafeYAML.load(Regexp.last_match(1))
|
45
|
+
self.data = SafeYAML.load(Regexp.last_match(1))&.with_indifferent_access
|
46
46
|
end
|
47
47
|
rescue Psych::SyntaxError => e
|
48
48
|
Bridgetown.logger.warn "YAML Exception reading #{filename}: #{e.message}"
|
@@ -52,7 +52,7 @@ module Bridgetown
|
|
52
52
|
raise e if site.config["strict_front_matter"]
|
53
53
|
end
|
54
54
|
|
55
|
-
self.data ||=
|
55
|
+
self.data ||= ActiveSupport::HashWithIndifferentAccess.new
|
56
56
|
|
57
57
|
validate_data! filename
|
58
58
|
validate_permalink! filename
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Site::Configurable
|
5
|
+
# Public: Set the site's configuration. This handles side-effects caused by
|
6
|
+
# changing values in the configuration.
|
7
|
+
#
|
8
|
+
# config - a Bridgetown::Configuration, containing the new configuration.
|
9
|
+
#
|
10
|
+
# Returns the new configuration.
|
11
|
+
def config=(config)
|
12
|
+
@config = config.clone
|
13
|
+
|
14
|
+
# Source and destination may not be changed after the site has been created.
|
15
|
+
@root_dir = File.expand_path(config["root_dir"]).freeze
|
16
|
+
@source = File.expand_path(config["source"]).freeze
|
17
|
+
@dest = File.expand_path(config["destination"]).freeze
|
18
|
+
@cache_dir = in_root_dir(config["cache_dir"]).freeze
|
19
|
+
|
20
|
+
%w(lsi highlighter baseurl exclude include future unpublished
|
21
|
+
limit_posts keep_files).each do |opt|
|
22
|
+
send("#{opt}=", config[opt])
|
23
|
+
end
|
24
|
+
|
25
|
+
configure_cache
|
26
|
+
configure_component_paths
|
27
|
+
configure_include_paths
|
28
|
+
configure_file_read_opts
|
29
|
+
|
30
|
+
self.permalink_style = config["permalink"].to_sym
|
31
|
+
|
32
|
+
@config
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the FrontmatterDefaults or creates a new FrontmatterDefaults
|
36
|
+
# if it doesn't already exist.
|
37
|
+
#
|
38
|
+
# Returns The FrontmatterDefaults
|
39
|
+
def frontmatter_defaults
|
40
|
+
@frontmatter_defaults ||= FrontmatterDefaults.new(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Whether to perform a full rebuild without incremental regeneration
|
44
|
+
#
|
45
|
+
# Returns a Boolean: true for a full rebuild, false for normal build
|
46
|
+
def incremental?(override = {})
|
47
|
+
override["incremental"] || config["incremental"]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns the publisher or creates a new publisher if it doesn't
|
51
|
+
# already exist.
|
52
|
+
#
|
53
|
+
# Returns The Publisher
|
54
|
+
def publisher
|
55
|
+
@publisher ||= Publisher.new(self)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Public: Prefix a given path with the root directory.
|
59
|
+
#
|
60
|
+
# paths - (optional) path elements to a file or directory within the
|
61
|
+
# root directory
|
62
|
+
#
|
63
|
+
# Returns a path which is prefixed with the root_dir directory.
|
64
|
+
def in_root_dir(*paths)
|
65
|
+
paths.reduce(root_dir) do |base, path|
|
66
|
+
Bridgetown.sanitized_path(base, path)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Public: Prefix a given path with the source directory.
|
71
|
+
#
|
72
|
+
# paths - (optional) path elements to a file or directory within the
|
73
|
+
# source directory
|
74
|
+
#
|
75
|
+
# Returns a path which is prefixed with the source directory.
|
76
|
+
def in_source_dir(*paths)
|
77
|
+
paths.reduce(source) do |base, path|
|
78
|
+
Bridgetown.sanitized_path(base, path)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Public: Prefix a given path with the destination directory.
|
83
|
+
#
|
84
|
+
# paths - (optional) path elements to a file or directory within the
|
85
|
+
# destination directory
|
86
|
+
#
|
87
|
+
# Returns a path which is prefixed with the destination directory.
|
88
|
+
def in_dest_dir(*paths)
|
89
|
+
paths.reduce(dest) do |base, path|
|
90
|
+
Bridgetown.sanitized_path(base, path)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Public: Prefix a given path with the cache directory.
|
95
|
+
#
|
96
|
+
# paths - (optional) path elements to a file or directory within the
|
97
|
+
# cache directory
|
98
|
+
#
|
99
|
+
# Returns a path which is prefixed with the cache directory.
|
100
|
+
def in_cache_dir(*paths)
|
101
|
+
paths.reduce(cache_dir) do |base, path|
|
102
|
+
Bridgetown.sanitized_path(base, path)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Public: The full path to the directory that houses all the collections registered
|
107
|
+
# with the current site.
|
108
|
+
#
|
109
|
+
# Returns the source directory or the absolute path to the custom collections_dir
|
110
|
+
def collections_path
|
111
|
+
dir_str = config["collections_dir"]
|
112
|
+
@collections_path ||= dir_str.empty? ? source : in_source_dir(dir_str)
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
# Disable Marshaling cache to disk in Safe Mode
|
118
|
+
def configure_cache
|
119
|
+
Bridgetown::Cache.cache_dir = in_root_dir(config["cache_dir"], "Bridgetown/Cache")
|
120
|
+
Bridgetown::Cache.disable_disk_cache! if config["disable_disk_cache"]
|
121
|
+
end
|
122
|
+
|
123
|
+
def configure_component_paths
|
124
|
+
# Loop through plugins paths first
|
125
|
+
plugin_components_load_paths = Bridgetown::PluginManager.source_manifests
|
126
|
+
.map(&:components).compact
|
127
|
+
|
128
|
+
local_components_load_paths = config["components_dir"].yield_self do |dir|
|
129
|
+
dir.is_a?(Array) ? dir : [dir]
|
130
|
+
end
|
131
|
+
local_components_load_paths.map! do |dir|
|
132
|
+
if !!(dir =~ %r!^\.\.?\/!)
|
133
|
+
# allow ./dir or ../../dir type options
|
134
|
+
File.expand_path(dir.to_s, root_dir)
|
135
|
+
else
|
136
|
+
in_source_dir(dir.to_s)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
@components_load_paths = plugin_components_load_paths + local_components_load_paths
|
141
|
+
end
|
142
|
+
|
143
|
+
def configure_include_paths
|
144
|
+
@includes_load_paths = Array(in_source_dir(config["includes_dir"].to_s))
|
145
|
+
end
|
146
|
+
|
147
|
+
def configure_file_read_opts
|
148
|
+
self.file_read_opts = {}
|
149
|
+
file_read_opts[:encoding] = config["encoding"] if config["encoding"]
|
150
|
+
self.file_read_opts = Bridgetown::Utils.merged_file_read_opts(self, {})
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|