bridgetown-core 0.21.0.beta1 → 0.21.0.beta2
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/lib/bridgetown-core.rb +2 -8
- data/lib/bridgetown-core/commands/build.rb +0 -11
- data/lib/bridgetown-core/commands/doctor.rb +1 -19
- data/lib/bridgetown-core/commands/serve.rb +0 -14
- data/lib/bridgetown-core/configuration.rb +1 -1
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +2 -38
- data/lib/bridgetown-core/converters/smartypants.rb +3 -1
- data/lib/bridgetown-core/document.rb +1 -0
- data/lib/bridgetown-core/entry_filter.rb +2 -2
- data/lib/bridgetown-core/filters.rb +1 -25
- data/lib/bridgetown-core/filters/url_filters.rb +12 -0
- data/lib/bridgetown-core/page.rb +2 -1
- data/lib/bridgetown-core/plugin_manager.rb +1 -1
- data/lib/bridgetown-core/reader.rb +10 -8
- data/lib/bridgetown-core/readers/data_reader.rb +1 -0
- data/lib/bridgetown-core/readers/page_reader.rb +1 -0
- data/lib/bridgetown-core/readers/post_reader.rb +5 -4
- data/lib/bridgetown-core/related_posts.rb +4 -4
- data/lib/bridgetown-core/resource/permalink_processor.rb +1 -1
- data/lib/bridgetown-core/tags/include.rb +1 -1
- data/lib/bridgetown-core/tags/post_url.rb +2 -2
- data/lib/bridgetown-core/utils.rb +1 -2
- data/lib/bridgetown-core/utils/require_gems.rb +60 -0
- data/lib/bridgetown-core/version.rb +1 -1
- metadata +3 -7
- data/lib/bridgetown-core/external.rb +0 -58
- data/lib/bridgetown-core/path_manager.rb +0 -31
- data/lib/bridgetown-core/readers/static_file_reader.rb +0 -25
- data/lib/bridgetown-core/utils/platforms.rb +0 -81
- data/lib/bridgetown-core/utils/thread_event.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5271d5bbaf78f54da137c78c0885ca8ca7b66787ea432c362bd1c51416a39c2
|
4
|
+
data.tar.gz: 440500addaa640424b810080179b9e20b22bf9f2936605c77635563c0f102cd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 375d68544812f8238a226aa6a9986baa74bf08a19d674f1290729ffe556c9a9af29887ef215acd219e6a7e2c0f29fa90c4832afe72c8c37425e3746fa6367531
|
7
|
+
data.tar.gz: 1bc5fcb4c65abf6c394332d891883547106ddb2d233519766578bc33fe1778bd1e97ee830c9dc33f556a7e2486d36f17e6534482b3b51f1af0ca8d463ba6c105
|
data/lib/bridgetown-core.rb
CHANGED
@@ -90,8 +90,6 @@ module Bridgetown
|
|
90
90
|
# TODO: we have too many errors! This is silly
|
91
91
|
autoload :Errors, "bridgetown-core/errors"
|
92
92
|
autoload :Excerpt, "bridgetown-core/excerpt"
|
93
|
-
# TODO: this is a poorly named, unclear class. Relocate to Utils:
|
94
|
-
autoload :External, "bridgetown-core/external"
|
95
93
|
autoload :FrontmatterDefaults, "bridgetown-core/frontmatter_defaults"
|
96
94
|
autoload :FrontMatterImporter, "bridgetown-core/concerns/front_matter_importer"
|
97
95
|
autoload :Hooks, "bridgetown-core/hooks"
|
@@ -105,16 +103,12 @@ module Bridgetown
|
|
105
103
|
autoload :LayoutReader, "bridgetown-core/readers/layout_reader"
|
106
104
|
# TODO: remove this when legacy content engine is gone:
|
107
105
|
autoload :PostReader, "bridgetown-core/readers/post_reader"
|
108
|
-
# TODO:
|
106
|
+
# TODO: remove this when legacy content engine is gone:
|
109
107
|
autoload :PageReader, "bridgetown-core/readers/page_reader"
|
110
108
|
autoload :PluginContentReader, "bridgetown-core/readers/plugin_content_reader"
|
111
|
-
# TODO: also merge this:
|
112
|
-
autoload :StaticFileReader, "bridgetown-core/readers/static_file_reader"
|
113
109
|
autoload :LogAdapter, "bridgetown-core/log_adapter"
|
114
110
|
autoload :Page, "bridgetown-core/page"
|
115
111
|
autoload :GeneratedPage, "bridgetown-core/page"
|
116
|
-
# TODO: figure out how to get rid of this seemingly banal class:
|
117
|
-
autoload :PathManager, "bridgetown-core/path_manager"
|
118
112
|
autoload :PluginManager, "bridgetown-core/plugin_manager"
|
119
113
|
autoload :Publishable, "bridgetown-core/concerns/publishable"
|
120
114
|
autoload :Publisher, "bridgetown-core/publisher"
|
@@ -268,7 +262,7 @@ module Bridgetown
|
|
268
262
|
end
|
269
263
|
|
270
264
|
# Conditional optimizations
|
271
|
-
Bridgetown::
|
265
|
+
Bridgetown::Utils::RequireGems.require_if_present("liquid/c")
|
272
266
|
end
|
273
267
|
end
|
274
268
|
|
@@ -79,17 +79,6 @@ module Bridgetown
|
|
79
79
|
#
|
80
80
|
# Returns nothing.
|
81
81
|
def watch_site(config_options)
|
82
|
-
# Warn Windows users that they might need to upgrade.
|
83
|
-
if Utils::Platforms.bash_on_windows?
|
84
|
-
Bridgetown.logger.warn "",
|
85
|
-
"Auto-regeneration may not work on some Windows versions."
|
86
|
-
Bridgetown.logger.warn "",
|
87
|
-
"Please see: https://github.com/Microsoft/BashOnWindows/issues/216"
|
88
|
-
Bridgetown.logger.warn "",
|
89
|
-
"If it does not work, please upgrade Bash on Windows or "\
|
90
|
-
"run Bridgetown with --no-watch."
|
91
|
-
end
|
92
|
-
|
93
82
|
Bridgetown::Watcher.watch(@site, config_options)
|
94
83
|
end
|
95
84
|
|
@@ -33,7 +33,6 @@ module Bridgetown
|
|
33
33
|
|
34
34
|
def healthy?(site)
|
35
35
|
[
|
36
|
-
fsnotify_buggy?(site),
|
37
36
|
!conflicting_urls(site),
|
38
37
|
!urls_only_differ_by_case(site),
|
39
38
|
proper_site_url?(site),
|
@@ -59,7 +58,7 @@ module Bridgetown
|
|
59
58
|
conflicting_urls = false
|
60
59
|
urls = {}
|
61
60
|
urls = collect_urls(urls, site.pages, site.dest)
|
62
|
-
urls = collect_urls(urls, site.posts.docs, site.dest)
|
61
|
+
urls = collect_urls(urls, site.collections.posts.docs, site.dest)
|
63
62
|
urls.each do |url, paths|
|
64
63
|
next unless paths.size > 1
|
65
64
|
|
@@ -70,23 +69,6 @@ module Bridgetown
|
|
70
69
|
conflicting_urls
|
71
70
|
end
|
72
71
|
|
73
|
-
def fsnotify_buggy?(_site)
|
74
|
-
return true unless Utils::Platforms.osx?
|
75
|
-
|
76
|
-
if Dir.pwd != `pwd`.strip
|
77
|
-
Bridgetown.logger.error " " + <<-STR.strip.gsub(%r!\n\s+!, "\n ")
|
78
|
-
We have detected that there might be trouble using fsevent on your
|
79
|
-
operating system, you can read https://github.com/thibaudgg/rb-fsevent/wiki/no-fsevents-fired-(OSX-bug)
|
80
|
-
for possible work arounds or you can work around it immediately
|
81
|
-
with `--force-polling`.
|
82
|
-
STR
|
83
|
-
|
84
|
-
false
|
85
|
-
end
|
86
|
-
|
87
|
-
true
|
88
|
-
end
|
89
|
-
|
90
72
|
def urls_only_differ_by_case(site)
|
91
73
|
urls_only_differ_by_case = false
|
92
74
|
urls = case_insensitive_urls(site.pages + site.docs_to_write, site.dest)
|
@@ -13,10 +13,6 @@ module Bridgetown
|
|
13
13
|
|
14
14
|
class_option :host, aliases: "-H", desc: "Host to bind to"
|
15
15
|
class_option :port, aliases: "-P", desc: "Port to listen on"
|
16
|
-
class_option :open_url,
|
17
|
-
aliases: "-o",
|
18
|
-
type: :boolean,
|
19
|
-
desc: "Launch your site in a browser"
|
20
16
|
class_option :detach,
|
21
17
|
aliases: "-B",
|
22
18
|
type: :boolean,
|
@@ -169,16 +165,6 @@ module Bridgetown
|
|
169
165
|
)
|
170
166
|
end
|
171
167
|
|
172
|
-
def launch_browser(server, opts)
|
173
|
-
address = server_address(server, opts)
|
174
|
-
return system "start", address if Utils::Platforms.windows?
|
175
|
-
return system "xdg-open", address if Utils::Platforms.linux?
|
176
|
-
return system "open", address if Utils::Platforms.osx?
|
177
|
-
|
178
|
-
Bridgetown.logger.error "Refusing to launch browser; " \
|
179
|
-
"Platform launcher unknown."
|
180
|
-
end
|
181
|
-
|
182
168
|
# Keep in our area with a thread or detach the server as requested
|
183
169
|
# by the user. This method determines what we do based on what you
|
184
170
|
# ask us to do.
|
@@ -144,7 +144,7 @@ module Bridgetown
|
|
144
144
|
def safe_load_file(filename)
|
145
145
|
case File.extname(filename)
|
146
146
|
when %r!\.toml!i
|
147
|
-
Bridgetown::
|
147
|
+
Bridgetown::Utils::RequireGems.require_with_graceful_fail("tomlrb") unless defined?(Tomlrb)
|
148
148
|
Tomlrb.load_file(filename)
|
149
149
|
when %r!\.ya?ml!i
|
150
150
|
SafeYAML.load_file(filename) || {}
|
@@ -72,21 +72,11 @@ module Bridgetown
|
|
72
72
|
attr_reader :extractions
|
73
73
|
|
74
74
|
def initialize(config)
|
75
|
-
@main_fallback_highlighter = config["highlighter"] || "rouge"
|
76
75
|
@config = config["kramdown"] || {}
|
77
|
-
@highlighter
|
78
|
-
setup
|
79
|
-
load_dependencies
|
80
|
-
end
|
81
|
-
|
82
|
-
# Setup and normalize the configuration:
|
83
|
-
# * Create Kramdown if it doesn't exist.
|
84
|
-
# * Set syntax_highlighter
|
85
|
-
# * Make sure `syntax_highlighter_opts` exists.
|
86
|
-
def setup
|
87
|
-
@config["syntax_highlighter"] ||= highlighter
|
76
|
+
@config["syntax_highlighter"] ||= config["highlighter"] || "rouge"
|
88
77
|
@config["syntax_highlighter_opts"] ||= {}
|
89
78
|
@config["syntax_highlighter_opts"]["guess_lang"] = @config["guess_lang"]
|
79
|
+
require "kramdown-parser-gfm" if @config["input"] == "GFM"
|
90
80
|
end
|
91
81
|
|
92
82
|
def convert(content)
|
@@ -100,32 +90,6 @@ module Bridgetown
|
|
100
90
|
@extractions = document.root.options[:extractions] # could be nil
|
101
91
|
html_output
|
102
92
|
end
|
103
|
-
|
104
|
-
private
|
105
|
-
|
106
|
-
def load_dependencies
|
107
|
-
require "kramdown-parser-gfm" if @config["input"] == "GFM"
|
108
|
-
|
109
|
-
# `mathjax` emgine is bundled within kramdown-2.x and will be handled by
|
110
|
-
# kramdown itself.
|
111
|
-
if (math_engine = @config["math_engine"]) && math_engine != "mathjax"
|
112
|
-
Bridgetown::External.require_with_graceful_fail("kramdown-math-#{math_engine}")
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# config[kramdown][syntax_higlighter] >
|
117
|
-
# config[highlighter]
|
118
|
-
def highlighter
|
119
|
-
return @highlighter if @highlighter
|
120
|
-
|
121
|
-
if @config["syntax_highlighter"]
|
122
|
-
return @highlighter = @config[
|
123
|
-
"syntax_highlighter"
|
124
|
-
]
|
125
|
-
end
|
126
|
-
|
127
|
-
@highlighter = @main_fallback_highlighter
|
128
|
-
end
|
129
93
|
end
|
130
94
|
end
|
131
95
|
end
|
@@ -25,7 +25,9 @@ module Bridgetown
|
|
25
25
|
priority :low
|
26
26
|
|
27
27
|
def initialize(config)
|
28
|
-
|
28
|
+
unless defined?(Kramdown)
|
29
|
+
Bridgetown::Utils::RequireGems.require_with_graceful_fail "kramdown"
|
30
|
+
end
|
29
31
|
@config = config["kramdown"].dup || {}
|
30
32
|
@config[:input] = :SmartyPants
|
31
33
|
end
|
@@ -75,12 +75,12 @@ module Bridgetown
|
|
75
75
|
# Check if an entry matches a specific pattern.
|
76
76
|
# Returns true if path matches against any glob pattern, else false.
|
77
77
|
def glob_include?(enumerator, entry)
|
78
|
-
entry_with_source =
|
78
|
+
entry_with_source = File.join(site.source, entry)
|
79
79
|
|
80
80
|
enumerator.any? do |pattern|
|
81
81
|
case pattern
|
82
82
|
when String
|
83
|
-
pattern_with_source =
|
83
|
+
pattern_with_source = File.join(site.source, pattern)
|
84
84
|
|
85
85
|
File.fnmatch?(pattern_with_source, entry_with_source) ||
|
86
86
|
entry_with_source.start_with?(pattern_with_source)
|
@@ -31,30 +31,6 @@ module Bridgetown
|
|
31
31
|
).convert(input.to_s)
|
32
32
|
end
|
33
33
|
|
34
|
-
# TODO: This should be removed, there is no Sass converter
|
35
|
-
# Convert a Sass string into CSS output.
|
36
|
-
#
|
37
|
-
# input - The Sass String to convert.
|
38
|
-
#
|
39
|
-
# Returns the CSS formatted String.
|
40
|
-
def sassify(input)
|
41
|
-
@context.registers[:site].find_converter_instance(
|
42
|
-
Bridgetown::Converters::Sass
|
43
|
-
).convert(input)
|
44
|
-
end
|
45
|
-
|
46
|
-
# TODO: This should be removed, there is no Scss converter
|
47
|
-
# Convert a Scss string into CSS output.
|
48
|
-
#
|
49
|
-
# input - The Scss String to convert.
|
50
|
-
#
|
51
|
-
# Returns the CSS formatted String.
|
52
|
-
def scssify(input)
|
53
|
-
@context.registers[:site].find_converter_instance(
|
54
|
-
Bridgetown::Converters::Scss
|
55
|
-
).convert(input)
|
56
|
-
end
|
57
|
-
|
58
34
|
# Slugify a filename or title.
|
59
35
|
#
|
60
36
|
# input - The filename or title to slugify.
|
@@ -132,7 +108,7 @@ module Bridgetown
|
|
132
108
|
script += "function(c){{var j=c.charCodeAt(0);if((j>=33)&&(j<=126)){"
|
133
109
|
script += "return String.fromCharCode(33+((j+ 14)%94));}"
|
134
110
|
script += "else{return String.fromCharCode(j);}}}));</script>"
|
135
|
-
script
|
111
|
+
script.html_safe
|
136
112
|
end
|
137
113
|
|
138
114
|
# Replace any whitespace in the input string with a single space
|
@@ -3,6 +3,8 @@
|
|
3
3
|
module Bridgetown
|
4
4
|
module Filters
|
5
5
|
module URLFilters
|
6
|
+
extend self
|
7
|
+
|
6
8
|
# Produces an absolute URL based on site.url and site.baseurl.
|
7
9
|
#
|
8
10
|
# input - the URL to make absolute.
|
@@ -35,6 +37,16 @@ module Bridgetown
|
|
35
37
|
input.sub(%r!/index\.html?$!, "/")
|
36
38
|
end
|
37
39
|
|
40
|
+
# Strips the extension (if present) off a path/URL
|
41
|
+
#
|
42
|
+
# @param input [Object] value which responds to `to_s`
|
43
|
+
# @return [String]
|
44
|
+
def strip_extname(input)
|
45
|
+
Pathname.new(input.to_s).yield_self do |path|
|
46
|
+
path.dirname + path.basename(".*")
|
47
|
+
end.to_s
|
48
|
+
end
|
49
|
+
|
38
50
|
private
|
39
51
|
|
40
52
|
def compute_absolute_url(input)
|
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,7 +45,7 @@ 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
51
|
site.frontmatter_defaults.find(relative_path, type, key.to_s)
|
@@ -133,7 +133,7 @@ module Bridgetown
|
|
133
133
|
sorted_plugin_files.each do |plugin_file|
|
134
134
|
self.class.add_registered_plugin plugin_file
|
135
135
|
end
|
136
|
-
Bridgetown::
|
136
|
+
Bridgetown::Utils::RequireGems.require_with_graceful_fail(sorted_plugin_files)
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
@@ -98,7 +98,7 @@ module Bridgetown
|
|
98
98
|
def retrieve_dirs(_base, dir, dot_dirs)
|
99
99
|
dot_dirs.each do |file|
|
100
100
|
dir_path = site.in_source_dir(dir, file)
|
101
|
-
rel_path =
|
101
|
+
rel_path = File.join(dir, file)
|
102
102
|
@site.reader.read_directories(rel_path) unless @site.dest.chomp("/") == dir_path
|
103
103
|
end
|
104
104
|
end
|
@@ -124,12 +124,14 @@ module Bridgetown
|
|
124
124
|
# Retrieve all the static files from the current directory,
|
125
125
|
# add them to the site and sort them.
|
126
126
|
#
|
127
|
-
# dir
|
128
|
-
#
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
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
|
+
)
|
133
135
|
end
|
134
136
|
|
135
137
|
# Filter out any files/directories that are hidden or backup files (start
|
@@ -197,7 +199,7 @@ module Bridgetown
|
|
197
199
|
if Utils.has_yaml_header?(entry_path)
|
198
200
|
site.pages.concat(PageReader.new(site, dir).read(file))
|
199
201
|
else
|
200
|
-
|
202
|
+
retrieve_static_files(dir, file)
|
201
203
|
end
|
202
204
|
end
|
203
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 PostReader
|
5
6
|
attr_reader :site, :unfiltered_content
|
6
7
|
|
@@ -47,7 +48,7 @@ module Bridgetown
|
|
47
48
|
# Process as Document
|
48
49
|
Document.new(path,
|
49
50
|
site: @site,
|
50
|
-
collection: @site.posts)
|
51
|
+
collection: @site.collections.posts)
|
51
52
|
else
|
52
53
|
# Process as Static File
|
53
54
|
read_static_file(
|
@@ -66,7 +67,7 @@ module Bridgetown
|
|
66
67
|
site.source,
|
67
68
|
relative_dir,
|
68
69
|
File.basename(full_path),
|
69
|
-
@site.posts
|
70
|
+
@site.collections.posts
|
70
71
|
)
|
71
72
|
end
|
72
73
|
|
@@ -96,9 +97,9 @@ module Bridgetown
|
|
96
97
|
return false unless processable?(item)
|
97
98
|
|
98
99
|
if item.is_a?(Document)
|
99
|
-
site.posts.docs << item
|
100
|
+
site.collections.posts.docs << item
|
100
101
|
elsif item.is_a?(StaticFile)
|
101
|
-
site.posts.static_files << item
|
102
|
+
site.collections.posts.static_files << item
|
102
103
|
site.static_files << item
|
103
104
|
end
|
104
105
|
|
@@ -11,11 +11,11 @@ module Bridgetown
|
|
11
11
|
def initialize(post)
|
12
12
|
@post = post
|
13
13
|
@site = post.site
|
14
|
-
Bridgetown::
|
14
|
+
Bridgetown::Utils::RequireGems.require_with_graceful_fail("classifier-reborn") if site.lsi
|
15
15
|
end
|
16
16
|
|
17
17
|
def build
|
18
|
-
return [] unless site.posts.docs.size > 1
|
18
|
+
return [] unless site.collections.posts.docs.size > 1
|
19
19
|
|
20
20
|
if site.lsi
|
21
21
|
build_index
|
@@ -30,7 +30,7 @@ module Bridgetown
|
|
30
30
|
lsi = ClassifierReborn::LSI.new(auto_rebuild: false)
|
31
31
|
Bridgetown.logger.info("Populating LSI...")
|
32
32
|
|
33
|
-
site.posts.docs.each do |x|
|
33
|
+
site.collections.posts.docs.each do |x|
|
34
34
|
lsi.add_item(x)
|
35
35
|
end
|
36
36
|
|
@@ -46,7 +46,7 @@ module Bridgetown
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def most_recent_posts
|
49
|
-
@most_recent_posts ||= (site.posts.docs.last(11).reverse - [post]).first(10)
|
49
|
+
@most_recent_posts ||= (site.collections.posts.docs.last(11).reverse - [post]).first(10)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -32,7 +32,7 @@ module Bridgetown
|
|
32
32
|
|
33
33
|
# Strip out file extension and process each segment of a URL to swap out
|
34
34
|
# placeholders such as :categories or :title
|
35
|
-
url_segments =
|
35
|
+
url_segments = Bridgetown::Filters::URLFilters.strip_extname(permalink).split("/")
|
36
36
|
new_url = url_segments.map do |segment|
|
37
37
|
segment.starts_with?(":") ? process_segment(segment.sub(%r{^:}, "")) : segment
|
38
38
|
end.select(&:present?).join("/")
|
@@ -112,7 +112,7 @@ module Bridgetown
|
|
112
112
|
def locate_include_file(context, file)
|
113
113
|
includes_dirs = tag_includes_dirs(context)
|
114
114
|
includes_dirs.each do |dir|
|
115
|
-
path =
|
115
|
+
path = File.join(dir, file)
|
116
116
|
return path if valid_include_file?(path, dir.to_s)
|
117
117
|
end
|
118
118
|
raise IOError, could_not_locate_message(file, includes_dirs)
|
@@ -77,14 +77,14 @@ module Bridgetown
|
|
77
77
|
@context = context
|
78
78
|
site = context.registers[:site]
|
79
79
|
|
80
|
-
site.posts.docs.each do |document|
|
80
|
+
site.collections.posts.docs.each do |document|
|
81
81
|
return relative_url(document) if @post == document
|
82
82
|
end
|
83
83
|
|
84
84
|
# New matching method did not match, fall back to old method
|
85
85
|
# with deprecation warning if this matches
|
86
86
|
|
87
|
-
site.posts.docs.each do |document|
|
87
|
+
site.collections.posts.docs.each do |document|
|
88
88
|
next unless @post.deprecated_equality document
|
89
89
|
|
90
90
|
Bridgetown::Deprecator.deprecation_message "A call to "\
|
@@ -4,10 +4,9 @@ module Bridgetown
|
|
4
4
|
module Utils
|
5
5
|
extend self
|
6
6
|
autoload :Ansi, "bridgetown-core/utils/ansi"
|
7
|
+
autoload :RequireGems, "bridgetown-core/utils/require_gems"
|
7
8
|
autoload :RubyExec, "bridgetown-core/utils/ruby_exec"
|
8
9
|
autoload :RubyFrontMatterDSL, "bridgetown-core/utils/ruby_front_matter"
|
9
|
-
autoload :Platforms, "bridgetown-core/utils/platforms"
|
10
|
-
autoload :ThreadEvent, "bridgetown-core/utils/thread_event"
|
11
10
|
|
12
11
|
# Constants for use in #slugify
|
13
12
|
SLUGIFY_MODES = %w(raw default pretty simple ascii latin).freeze
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Utils
|
5
|
+
module RequireGems
|
6
|
+
class << self
|
7
|
+
#
|
8
|
+
# Require a gem or file if it's present, otherwise silently fail.
|
9
|
+
#
|
10
|
+
# names - a string gem name or array of gem names
|
11
|
+
#
|
12
|
+
def require_if_present(names)
|
13
|
+
Array(names).each do |name|
|
14
|
+
require name
|
15
|
+
rescue LoadError
|
16
|
+
Bridgetown.logger.debug "Couldn't load #{name}. Skipping."
|
17
|
+
yield(name, version_constraint(name)) if block_given?
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# The version constraint required to activate a given gem.
|
24
|
+
#
|
25
|
+
# Returns a String version constraint in a parseable form for
|
26
|
+
# RubyGems.
|
27
|
+
def version_constraint
|
28
|
+
"> 0"
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Require a gem or gems. If it's not present, show a very nice error
|
33
|
+
# message that explains everything and is much more helpful than the
|
34
|
+
# normal LoadError.
|
35
|
+
#
|
36
|
+
# names - a string gem name or array of gem names
|
37
|
+
#
|
38
|
+
def require_with_graceful_fail(names)
|
39
|
+
Array(names).each do |name|
|
40
|
+
Bridgetown.logger.debug "Requiring:", name.to_s
|
41
|
+
require name
|
42
|
+
rescue LoadError => e
|
43
|
+
Bridgetown.logger.error "Dependency Error:", <<~MSG
|
44
|
+
Yikes! It looks like you don't have #{name} or one of its dependencies installed.
|
45
|
+
In order to use Bridgetown as currently configured, you'll need to install this gem.
|
46
|
+
|
47
|
+
If you've run Bridgetown with `bundle exec`, ensure that you have included the #{name}
|
48
|
+
gem in your Gemfile as well.
|
49
|
+
|
50
|
+
The full error message from Ruby is: '#{e.message}'
|
51
|
+
|
52
|
+
If you run into trouble, you can find helpful resources at https://www.bridgetownrb.com/docs/community/
|
53
|
+
MSG
|
54
|
+
raise Bridgetown::Errors::MissingDependencyException, name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bridgetown-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.21.0.
|
4
|
+
version: 0.21.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bridgetown Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -391,7 +391,6 @@ files:
|
|
391
391
|
- lib/bridgetown-core/entry_filter.rb
|
392
392
|
- lib/bridgetown-core/errors.rb
|
393
393
|
- lib/bridgetown-core/excerpt.rb
|
394
|
-
- lib/bridgetown-core/external.rb
|
395
394
|
- lib/bridgetown-core/filters.rb
|
396
395
|
- lib/bridgetown-core/filters/condition_helpers.rb
|
397
396
|
- lib/bridgetown-core/filters/date_filters.rb
|
@@ -417,7 +416,6 @@ files:
|
|
417
416
|
- lib/bridgetown-core/model/origin.rb
|
418
417
|
- lib/bridgetown-core/model/repo_origin.rb
|
419
418
|
- lib/bridgetown-core/page.rb
|
420
|
-
- lib/bridgetown-core/path_manager.rb
|
421
419
|
- lib/bridgetown-core/plugin.rb
|
422
420
|
- lib/bridgetown-core/plugin_manager.rb
|
423
421
|
- lib/bridgetown-core/publisher.rb
|
@@ -428,7 +426,6 @@ files:
|
|
428
426
|
- lib/bridgetown-core/readers/page_reader.rb
|
429
427
|
- lib/bridgetown-core/readers/plugin_content_reader.rb
|
430
428
|
- lib/bridgetown-core/readers/post_reader.rb
|
431
|
-
- lib/bridgetown-core/readers/static_file_reader.rb
|
432
429
|
- lib/bridgetown-core/regenerator.rb
|
433
430
|
- lib/bridgetown-core/related_posts.rb
|
434
431
|
- lib/bridgetown-core/renderer.rb
|
@@ -455,10 +452,9 @@ files:
|
|
455
452
|
- lib/bridgetown-core/url.rb
|
456
453
|
- lib/bridgetown-core/utils.rb
|
457
454
|
- lib/bridgetown-core/utils/ansi.rb
|
458
|
-
- lib/bridgetown-core/utils/
|
455
|
+
- lib/bridgetown-core/utils/require_gems.rb
|
459
456
|
- lib/bridgetown-core/utils/ruby_exec.rb
|
460
457
|
- lib/bridgetown-core/utils/ruby_front_matter.rb
|
461
|
-
- lib/bridgetown-core/utils/thread_event.rb
|
462
458
|
- lib/bridgetown-core/version.rb
|
463
459
|
- lib/bridgetown-core/watcher.rb
|
464
460
|
- lib/site_template/.gitignore
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
module External
|
5
|
-
class << self
|
6
|
-
#
|
7
|
-
# Require a gem or file if it's present, otherwise silently fail.
|
8
|
-
#
|
9
|
-
# names - a string gem name or array of gem names
|
10
|
-
#
|
11
|
-
def require_if_present(names)
|
12
|
-
Array(names).each do |name|
|
13
|
-
require name
|
14
|
-
rescue LoadError
|
15
|
-
Bridgetown.logger.debug "Couldn't load #{name}. Skipping."
|
16
|
-
yield(name, version_constraint(name)) if block_given?
|
17
|
-
false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# The version constraint required to activate a given gem.
|
23
|
-
#
|
24
|
-
# Returns a String version constraint in a parseable form for
|
25
|
-
# RubyGems.
|
26
|
-
def version_constraint
|
27
|
-
"> 0"
|
28
|
-
end
|
29
|
-
|
30
|
-
#
|
31
|
-
# Require a gem or gems. If it's not present, show a very nice error
|
32
|
-
# message that explains everything and is much more helpful than the
|
33
|
-
# normal LoadError.
|
34
|
-
#
|
35
|
-
# names - a string gem name or array of gem names
|
36
|
-
#
|
37
|
-
def require_with_graceful_fail(names)
|
38
|
-
Array(names).each do |name|
|
39
|
-
Bridgetown.logger.debug "Requiring:", name.to_s
|
40
|
-
require name
|
41
|
-
rescue LoadError => e
|
42
|
-
Bridgetown.logger.error "Dependency Error:", <<~MSG
|
43
|
-
Yikes! It looks like you don't have #{name} or one of its dependencies installed.
|
44
|
-
In order to use Bridgetown as currently configured, you'll need to install this gem.
|
45
|
-
|
46
|
-
If you've run Bridgetown with `bundle exec`, ensure that you have included the #{name}
|
47
|
-
gem in your Gemfile as well.
|
48
|
-
|
49
|
-
The full error message from Ruby is: '#{e.message}'
|
50
|
-
|
51
|
-
If you run into trouble, you can find helpful resources at https://www.bridgetownrb.com/docs/community/
|
52
|
-
MSG
|
53
|
-
raise Bridgetown::Errors::MissingDependencyException, name
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
# A singleton class that caches frozen instances of path strings returned from its methods.
|
5
|
-
#
|
6
|
-
# NOTE:
|
7
|
-
# This class exists because `File.join` allocates an Array and returns a new String on every
|
8
|
-
# call using **the same arguments**. Caching the result means reduced memory usage.
|
9
|
-
# However, the caches are never flushed so that they can be used even when a site is
|
10
|
-
# regenerating. The results are frozen to deter mutation of the cached string.
|
11
|
-
#
|
12
|
-
# Therefore, employ this class only for situations where caching the result is necessary
|
13
|
-
# for performance reasons.
|
14
|
-
#
|
15
|
-
class PathManager
|
16
|
-
# This class cannot be initialized from outside
|
17
|
-
private_class_method :new
|
18
|
-
|
19
|
-
# Wraps `File.join` to cache the frozen result.
|
20
|
-
# Reassigns `nil`, empty strings and empty arrays to a frozen empty string beforehand.
|
21
|
-
#
|
22
|
-
# Returns a frozen string.
|
23
|
-
def self.join(base, item)
|
24
|
-
base = "" if base.nil? || base.empty?
|
25
|
-
item = "" if item.nil? || item.empty?
|
26
|
-
@join ||= {}
|
27
|
-
@join[base] ||= {}
|
28
|
-
@join[base][item] ||= File.join(base, item).freeze
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
class StaticFileReader
|
5
|
-
attr_reader :site, :dir, :unfiltered_content
|
6
|
-
|
7
|
-
def initialize(site, dir)
|
8
|
-
@site = site
|
9
|
-
@dir = dir
|
10
|
-
@unfiltered_content = []
|
11
|
-
end
|
12
|
-
|
13
|
-
# Create a new StaticFile object for every entry in a given list of basenames.
|
14
|
-
#
|
15
|
-
# files - an array of file basenames.
|
16
|
-
#
|
17
|
-
# Returns an array of static files.
|
18
|
-
def read(files)
|
19
|
-
files.each do |file|
|
20
|
-
@unfiltered_content << StaticFile.new(@site, @site.source, @dir, file)
|
21
|
-
end
|
22
|
-
@unfiltered_content
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
module Utils
|
5
|
-
# TODO: deprecate, we should try not to have any platform-specific code
|
6
|
-
module Platforms
|
7
|
-
extend self
|
8
|
-
|
9
|
-
# TODO: jruby is NOT supported by Bridgetown. This should probably
|
10
|
-
# get removed.
|
11
|
-
{ jruby?: "jruby", mri?: "ruby" }.each do |k, v|
|
12
|
-
define_method k do
|
13
|
-
::RUBY_ENGINE == v
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# --
|
18
|
-
# Allows you to detect "real" Windows, or what we would consider
|
19
|
-
# "real" Windows. That is, that we can pass the basic test and the
|
20
|
-
# /proc/version returns nothing to us.
|
21
|
-
# --
|
22
|
-
|
23
|
-
def vanilla_windows?
|
24
|
-
RbConfig::CONFIG["host_os"] =~ %r!mswin|mingw|cygwin!i && \
|
25
|
-
!proc_version
|
26
|
-
end
|
27
|
-
|
28
|
-
# --
|
29
|
-
# XXX: Remove in 4.0
|
30
|
-
# --
|
31
|
-
|
32
|
-
alias_method :really_windows?, \
|
33
|
-
:vanilla_windows?
|
34
|
-
|
35
|
-
#
|
36
|
-
|
37
|
-
def bash_on_windows?
|
38
|
-
RbConfig::CONFIG["host_os"] =~ %r!linux! && \
|
39
|
-
proc_version =~ %r!microsoft!i
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
|
44
|
-
def windows?
|
45
|
-
vanilla_windows? || bash_on_windows?
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
|
50
|
-
def linux?
|
51
|
-
RbConfig::CONFIG["host_os"] =~ %r!linux! && \
|
52
|
-
proc_version !~ %r!microsoft!i
|
53
|
-
end
|
54
|
-
|
55
|
-
# Provides windows?, linux?, osx?, unix? so that we can detect
|
56
|
-
# platforms. This is mostly useful for `bridgetown doctor` and for testing
|
57
|
-
# where we kick off certain tests based on the platform.
|
58
|
-
|
59
|
-
{ osx?: %r!darwin|mac os!, unix?: %r!solaris|bsd! }.each do |k, v|
|
60
|
-
define_method k do
|
61
|
-
!!(
|
62
|
-
RbConfig::CONFIG["host_os"] =~ v
|
63
|
-
)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
#
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def proc_version
|
72
|
-
@proc_version ||=
|
73
|
-
begin
|
74
|
-
File.read("/proc/version")
|
75
|
-
rescue Errno::ENOENT, Errno::EACCES
|
76
|
-
nil
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
module Utils
|
5
|
-
# Based on the pattern and code from
|
6
|
-
# https://emptysqua.re/blog/an-event-synchronization-primitive-for-ruby/
|
7
|
-
class ThreadEvent
|
8
|
-
attr_reader :flag
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
@lock = Mutex.new
|
12
|
-
@cond = ConditionVariable.new
|
13
|
-
@flag = false
|
14
|
-
end
|
15
|
-
|
16
|
-
def set
|
17
|
-
@lock.synchronize do
|
18
|
-
yield if block_given?
|
19
|
-
@flag = true
|
20
|
-
@cond.broadcast
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def wait
|
25
|
-
@lock.synchronize do
|
26
|
-
@cond.wait(@lock) unless @flag
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|