bridgetown-core 1.0.0.alpha2 → 1.0.0.alpha6
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/commands/new.rb +2 -2
- data/lib/bridgetown-core/commands/start.rb +10 -8
- data/lib/bridgetown-core/component.rb +1 -1
- data/lib/bridgetown-core/concerns/liquid_renderable.rb +2 -2
- data/lib/bridgetown-core/concerns/site/configurable.rb +0 -5
- data/lib/bridgetown-core/configuration.rb +0 -1
- data/lib/bridgetown-core/configurations/netlify/netlify.toml +2 -2
- data/lib/bridgetown-core/converters/erb_templates.rb +5 -3
- data/lib/bridgetown-core/converters/liquid_templates.rb +2 -0
- data/lib/bridgetown-core/model/builder_origin.rb +2 -2
- data/lib/bridgetown-core/rack/boot.rb +8 -0
- data/lib/bridgetown-core/tasks/bridgetown_tasks.rake +6 -0
- data/lib/bridgetown-core/version.rb +1 -1
- data/lib/site_template/src/_layouts/default.liquid +1 -1
- metadata +2 -3
- data/lib/bridgetown-core/tags/include.rb +0 -216
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2dd8600eb037c6f3841fdbc7a9175ecccd0ab4e3c7d1814e914b6954ad4fb832
|
4
|
+
data.tar.gz: ca457af17e62de5d71a441b90d9aa8d97136fcd4cc9ecd65a855d8a78bab53b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 594d6e6de4a514e3eeb439a1ebc3d8936d4bb5027a78063db12c503072fe1c8b6db9d8f3ce6568a95781375d2e0c59dc32faf83fc333e8e9dcd3e95c140e7287
|
7
|
+
data.tar.gz: fa2ad70a10323054e8f9ab646dfb92cc37457b53427907888dd8bc47589046feafcdc29730c3d4e6d3eb81cf8cd0be6cebbb692a32d8c3ec200c7a8c7fb80693
|
@@ -138,7 +138,7 @@ module Bridgetown
|
|
138
138
|
|
139
139
|
if @skipped_bundle
|
140
140
|
logger.info "Bundle install skipped.".yellow
|
141
|
-
logger.info "You will need to run #{"bundle
|
141
|
+
logger.info "You will need to run #{"bundle binstubs bridgetown-core".cyan} manually."
|
142
142
|
end
|
143
143
|
|
144
144
|
logger.info "Yarn install skipped.".yellow if @skipped_yarn
|
@@ -152,7 +152,7 @@ module Bridgetown
|
|
152
152
|
Bridgetown.with_unbundled_env do
|
153
153
|
inside(path) do
|
154
154
|
run "bundle install", abort_on_failure: true
|
155
|
-
run "bundle
|
155
|
+
run "bundle binstubs bridgetown-core"
|
156
156
|
end
|
157
157
|
end
|
158
158
|
end
|
@@ -30,8 +30,10 @@ module Bridgetown
|
|
30
30
|
Bridgetown::Commands::Build.print_startup_message
|
31
31
|
sleep 0.25
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
begin
|
34
|
+
require("puma/detect")
|
35
|
+
rescue LoadError
|
36
|
+
raise "** Puma server gem not found. Check your Gemfile and Bundler env? **"
|
35
37
|
end
|
36
38
|
|
37
39
|
options = Thor::CoreExt::HashWithIndifferentAccess.new(self.options)
|
@@ -40,6 +42,12 @@ module Bridgetown
|
|
40
42
|
# Load Bridgetown configuration into thread memory
|
41
43
|
bt_options = configuration_with_overrides(options)
|
42
44
|
|
45
|
+
if Bridgetown.env.development? && !options["url"]
|
46
|
+
scheme = bt_options.bind&.split("://")&.first == "ssl" ? "https" : "http"
|
47
|
+
port = bt_options.bind&.split(":")&.last || ENV["BRIDGETOWN_PORT"] || 4000
|
48
|
+
bt_options.url = "#{scheme}://localhost:#{port}"
|
49
|
+
end
|
50
|
+
|
43
51
|
puma_pid =
|
44
52
|
Process.fork do
|
45
53
|
require "puma/cli"
|
@@ -83,12 +91,6 @@ module Bridgetown
|
|
83
91
|
Process.setproctitle("bridgetown #{Bridgetown::VERSION} [#{File.basename(Dir.pwd)}]")
|
84
92
|
|
85
93
|
build_args = ["-w"] + ARGV.reject { |arg| arg == "start" }
|
86
|
-
if Bridgetown.env.development? && !options["url"]
|
87
|
-
scheme = bt_options.bind&.split("://")&.first == "ssl" ? "https" : "http"
|
88
|
-
port = bt_options.bind&.split(":")&.last || ENV["BRIDGETOWN_PORT"] || 4000
|
89
|
-
build_args << "--url"
|
90
|
-
build_args << "#{scheme}://localhost:#{port}"
|
91
|
-
end
|
92
94
|
Bridgetown::Commands::Build.start(build_args)
|
93
95
|
rescue StandardError => e
|
94
96
|
Process.kill "SIGINT", puma_pid
|
@@ -14,10 +14,10 @@ module Bridgetown
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def liquid_engine_configured?
|
17
|
-
data["template_engine"] == "liquid" ||
|
17
|
+
data["template_engine"].to_s == "liquid" ||
|
18
18
|
(
|
19
19
|
data["template_engine"].nil? && (
|
20
|
-
site.config[:template_engine].nil? || site.config[:template_engine] == "liquid"
|
20
|
+
site.config[:template_engine].nil? || site.config[:template_engine].to_s == "liquid"
|
21
21
|
)
|
22
22
|
)
|
23
23
|
end
|
@@ -21,7 +21,6 @@ class Bridgetown::Site
|
|
21
21
|
|
22
22
|
configure_cache
|
23
23
|
configure_component_paths
|
24
|
-
configure_include_paths
|
25
24
|
configure_file_read_opts
|
26
25
|
|
27
26
|
self.permalink_style = (config["permalink"] || "pretty").to_sym
|
@@ -176,10 +175,6 @@ class Bridgetown::Site
|
|
176
175
|
@components_load_paths = plugin_components_load_paths + local_components_load_paths
|
177
176
|
end
|
178
177
|
|
179
|
-
def configure_include_paths
|
180
|
-
@includes_load_paths = Array(in_source_dir(config["includes_dir"].to_s))
|
181
|
-
end
|
182
|
-
|
183
178
|
def configure_file_read_opts
|
184
179
|
self.file_read_opts = {}
|
185
180
|
file_read_opts[:encoding] = config["encoding"] if config["encoding"]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
[build]
|
2
|
-
command = "
|
2
|
+
command = "bin/bridgetown deploy && bin/netlify.sh"
|
3
3
|
publish = "output"
|
4
4
|
|
5
5
|
[build.environment]
|
@@ -41,4 +41,4 @@
|
|
41
41
|
[[headers]]
|
42
42
|
for = "/*.(png|jpg|js|css|svg|woff|ttf|eot|ico|woff2)"
|
43
43
|
[headers.values]
|
44
|
-
Cache-Control = "public, max-age=31536000, s-max-age=31536000"
|
44
|
+
Cache-Control = "public, max-age=31536000, s-max-age=31536000"
|
@@ -110,7 +110,7 @@ module Bridgetown
|
|
110
110
|
#
|
111
111
|
# @return [String] The converted content.
|
112
112
|
def convert(content, convertible)
|
113
|
-
return content if convertible.data[:template_engine] != "erb"
|
113
|
+
return content if convertible.data[:template_engine].to_s != "erb"
|
114
114
|
|
115
115
|
erb_view = Bridgetown::ERBView.new(convertible)
|
116
116
|
|
@@ -131,10 +131,12 @@ module Bridgetown
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
+
# @param ext [String]
|
135
|
+
# @param convertible [Bridgetown::Resource::Base, Bridgetown::GeneratedPage]
|
134
136
|
def matches(ext, convertible)
|
135
|
-
if convertible.data[:template_engine] == "erb" ||
|
137
|
+
if convertible.data[:template_engine].to_s == "erb" ||
|
136
138
|
(convertible.data[:template_engine].nil? &&
|
137
|
-
|
139
|
+
@config[:template_engine].to_s == "erb")
|
138
140
|
convertible.data[:template_engine] = "erb"
|
139
141
|
return true
|
140
142
|
end
|
@@ -56,6 +56,8 @@ module Bridgetown
|
|
56
56
|
# rubocop: enable Metrics/MethodLength
|
57
57
|
# rubocop: enable Metrics/AbcSize
|
58
58
|
|
59
|
+
# @param ext [String]
|
60
|
+
# @param convertible [Bridgetown::Resource::Base, Bridgetown::GeneratedPage]
|
59
61
|
def matches(ext, convertible)
|
60
62
|
if convertible.render_with_liquid?
|
61
63
|
convertible.data[:template_engine] = "liquid"
|
@@ -38,9 +38,9 @@ module Bridgetown
|
|
38
38
|
|
39
39
|
def read_data_from_builder
|
40
40
|
builder = Kernel.const_get(url.host.gsub(".", "::"))
|
41
|
-
raise NameError unless builder.
|
41
|
+
raise NameError unless builder.instance_methods.include?(:resource_data_for_id)
|
42
42
|
|
43
|
-
builder.resource_data_for_id(id)
|
43
|
+
builder.new.resource_data_for_id(id) || raise(NameError)
|
44
44
|
rescue NameError
|
45
45
|
raise(
|
46
46
|
Bridgetown::Errors::FatalException,
|
@@ -17,6 +17,14 @@ module Bridgetown
|
|
17
17
|
def self.boot
|
18
18
|
autoload_server_folder(root: Dir.pwd)
|
19
19
|
RodaApp.opts[:bridgetown_preloaded_config] = Bridgetown::Current.preloaded_configuration
|
20
|
+
rescue Roda::RodaError => e
|
21
|
+
if e.message.include?("sessions plugin :secret option")
|
22
|
+
raise Bridgetown::Errors::InvalidConfigurationError,
|
23
|
+
"The Roda sessions plugin can't find a valid secret. Run `bin/bridgetown secret'" \
|
24
|
+
" and put the key in a ENV var you can use to configure the session in `roda_app.rb'"
|
25
|
+
end
|
26
|
+
|
27
|
+
raise e
|
20
28
|
end
|
21
29
|
|
22
30
|
def self.autoload_server_folder(root:)
|
@@ -1,5 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
desc "Generate a secret key for use in sessions, token generation, and beyond"
|
4
|
+
task :secret do
|
5
|
+
require "securerandom"
|
6
|
+
puts SecureRandom.hex(64) # rubocop:disable Bridgetown/NoPutsAllowed
|
7
|
+
end
|
8
|
+
|
3
9
|
namespace :frontend do
|
4
10
|
desc "Run frontend bundler independently"
|
5
11
|
task :watcher, :sidecar do |_task, args|
|
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: 1.0.0.
|
4
|
+
version: 1.0.0.alpha6
|
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-10-
|
11
|
+
date: 2021-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -476,7 +476,6 @@ files:
|
|
476
476
|
- lib/bridgetown-core/tags/class_map.rb
|
477
477
|
- lib/bridgetown-core/tags/find.rb
|
478
478
|
- lib/bridgetown-core/tags/highlight.rb
|
479
|
-
- lib/bridgetown-core/tags/include.rb
|
480
479
|
- lib/bridgetown-core/tags/link.rb
|
481
480
|
- lib/bridgetown-core/tags/live_reload_dev_js.rb
|
482
481
|
- lib/bridgetown-core/tags/post_url.rb
|
@@ -1,216 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bridgetown
|
4
|
-
module Tags
|
5
|
-
class IncludeTag < Liquid::Tag
|
6
|
-
class << self
|
7
|
-
attr_accessor :deprecation_message_shown
|
8
|
-
end
|
9
|
-
|
10
|
-
VALID_SYNTAX = %r!
|
11
|
-
([\w-]+)\s*=\s*
|
12
|
-
(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w.-]+))
|
13
|
-
!x.freeze
|
14
|
-
|
15
|
-
# rubocop:disable Lint/MixedRegexpCaptureTypes
|
16
|
-
VARIABLE_SYNTAX = %r!
|
17
|
-
(?<variable>[^{]*(\{\{\s*[\w\-.]+\s*(\|.*)?\}\}[^\s{}]*)+)
|
18
|
-
(?<params>.*)
|
19
|
-
!mx.freeze
|
20
|
-
# rubocop:enable Lint/MixedRegexpCaptureTypes
|
21
|
-
|
22
|
-
FULL_VALID_SYNTAX = %r!\A\s*(?:#{VALID_SYNTAX}(?=\s|\z)\s*)*\z!.freeze
|
23
|
-
VALID_FILENAME_CHARS = %r!^[\w/.-]+$!.freeze
|
24
|
-
INVALID_SEQUENCES = %r![./]{2,}!.freeze
|
25
|
-
|
26
|
-
def initialize(tag_name, markup, tokens)
|
27
|
-
super
|
28
|
-
|
29
|
-
unless self.class.deprecation_message_shown
|
30
|
-
Bridgetown.logger.warn "NOTICE: the {% include %} tag is deprecated and" \
|
31
|
-
" will be removed in Bridgetown 1.0. You should" \
|
32
|
-
" use the {% render %} tag instead."
|
33
|
-
self.class.deprecation_message_shown = true
|
34
|
-
end
|
35
|
-
|
36
|
-
matched = markup.strip.match(VARIABLE_SYNTAX)
|
37
|
-
if matched
|
38
|
-
@file = matched["variable"].strip
|
39
|
-
@params = matched["params"].strip
|
40
|
-
else
|
41
|
-
@file, @params = markup.strip.split(%r!\s+!, 2)
|
42
|
-
end
|
43
|
-
validate_params if @params
|
44
|
-
@tag_name = tag_name
|
45
|
-
end
|
46
|
-
|
47
|
-
def syntax_example
|
48
|
-
"{% #{@tag_name} file.ext param='value' param2='value' %}"
|
49
|
-
end
|
50
|
-
|
51
|
-
def parse_params(context)
|
52
|
-
params = {}
|
53
|
-
markup = @params
|
54
|
-
|
55
|
-
while (match = VALID_SYNTAX.match(markup))
|
56
|
-
markup = markup[match.end(0)..-1]
|
57
|
-
|
58
|
-
value = if match[2]
|
59
|
-
match[2].gsub('\\"', '"')
|
60
|
-
elsif match[3]
|
61
|
-
match[3].gsub("\\'", "'")
|
62
|
-
elsif match[4]
|
63
|
-
context[match[4]]
|
64
|
-
end
|
65
|
-
|
66
|
-
params[match[1]] = value
|
67
|
-
end
|
68
|
-
params
|
69
|
-
end
|
70
|
-
|
71
|
-
def validate_file_name(file)
|
72
|
-
return unless INVALID_SEQUENCES.match?(file) || !VALID_FILENAME_CHARS.match?(file)
|
73
|
-
|
74
|
-
raise ArgumentError, <<~MSG
|
75
|
-
Invalid syntax for include tag. File contains invalid characters or sequences:
|
76
|
-
|
77
|
-
#{file}
|
78
|
-
|
79
|
-
Valid syntax:
|
80
|
-
|
81
|
-
#{syntax_example}
|
82
|
-
|
83
|
-
MSG
|
84
|
-
end
|
85
|
-
|
86
|
-
def validate_params
|
87
|
-
return if FULL_VALID_SYNTAX.match?(@params)
|
88
|
-
|
89
|
-
raise ArgumentError, <<~MSG
|
90
|
-
Invalid syntax for include tag:
|
91
|
-
|
92
|
-
#{@params}
|
93
|
-
|
94
|
-
Valid syntax:
|
95
|
-
|
96
|
-
#{syntax_example}
|
97
|
-
|
98
|
-
MSG
|
99
|
-
end
|
100
|
-
|
101
|
-
# Grab file read opts in the context
|
102
|
-
def file_read_opts(context)
|
103
|
-
context.registers[:site].file_read_opts
|
104
|
-
end
|
105
|
-
|
106
|
-
# Render the variable if required
|
107
|
-
def render_variable(context)
|
108
|
-
Liquid::Template.parse(@file).render(context) if VARIABLE_SYNTAX.match?(@file)
|
109
|
-
end
|
110
|
-
|
111
|
-
def tag_includes_dirs(context)
|
112
|
-
context.registers[:site].includes_load_paths.freeze
|
113
|
-
end
|
114
|
-
|
115
|
-
def locate_include_file(context, file)
|
116
|
-
includes_dirs = tag_includes_dirs(context)
|
117
|
-
includes_dirs.each do |dir|
|
118
|
-
path = File.join(dir, file)
|
119
|
-
return path if valid_include_file?(path, dir.to_s)
|
120
|
-
end
|
121
|
-
raise IOError, could_not_locate_message(file, includes_dirs)
|
122
|
-
end
|
123
|
-
|
124
|
-
def render(context)
|
125
|
-
file = render_variable(context) || @file
|
126
|
-
validate_file_name(file)
|
127
|
-
|
128
|
-
path = locate_include_file(context, file)
|
129
|
-
return unless path
|
130
|
-
|
131
|
-
partial = load_cached_partial(path, context)
|
132
|
-
|
133
|
-
context.stack do
|
134
|
-
context["include"] = parse_params(context) if @params
|
135
|
-
begin
|
136
|
-
partial.render!(context)
|
137
|
-
rescue Liquid::Error => e
|
138
|
-
e.template_name = path
|
139
|
-
e.markup_context = "included " if e.markup_context.nil?
|
140
|
-
raise e
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def load_cached_partial(path, context)
|
146
|
-
context.registers[:cached_partials] ||= {}
|
147
|
-
cached_partial = context.registers[:cached_partials]
|
148
|
-
|
149
|
-
if cached_partial.key?(path)
|
150
|
-
cached_partial[path]
|
151
|
-
else
|
152
|
-
unparsed_file = context.registers[:site]
|
153
|
-
.liquid_renderer
|
154
|
-
.file(path)
|
155
|
-
begin
|
156
|
-
cached_partial[path] = unparsed_file.parse(read_file(path, context))
|
157
|
-
rescue Liquid::Error => e
|
158
|
-
e.template_name = path
|
159
|
-
e.markup_context = "included " if e.markup_context.nil?
|
160
|
-
raise e
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def valid_include_file?(path, _dir)
|
166
|
-
File.file?(path)
|
167
|
-
end
|
168
|
-
|
169
|
-
def realpath_prefixed_with?(path, dir)
|
170
|
-
File.exist?(path) && File.realpath(path).start_with?(dir)
|
171
|
-
rescue StandardError
|
172
|
-
false
|
173
|
-
end
|
174
|
-
|
175
|
-
# This method allows to modify the file content by inheriting from the class.
|
176
|
-
def read_file(file, context)
|
177
|
-
File.read(file, **file_read_opts(context))
|
178
|
-
end
|
179
|
-
|
180
|
-
private
|
181
|
-
|
182
|
-
def could_not_locate_message(file, includes_dirs)
|
183
|
-
"Could not locate the included file '#{file}' in any of #{includes_dirs}." \
|
184
|
-
" Ensure it exists in one of those directories."
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
class IncludeRelativeTag < IncludeTag
|
189
|
-
def tag_includes_dirs(context)
|
190
|
-
Array(page_path(context)).freeze
|
191
|
-
end
|
192
|
-
|
193
|
-
def page_path(context)
|
194
|
-
if context.registers[:page].nil?
|
195
|
-
context.registers[:site].source
|
196
|
-
else
|
197
|
-
site = context.registers[:site]
|
198
|
-
page_payload = context.registers[:page]
|
199
|
-
resource_path = \
|
200
|
-
if page_payload["collection"].nil?
|
201
|
-
page_payload["path"]
|
202
|
-
else
|
203
|
-
File.join(site.config["collections_dir"], page_payload["path"])
|
204
|
-
end
|
205
|
-
# rubocop:disable Performance/DeleteSuffix
|
206
|
-
resource_path.sub!(%r!/#excerpt\z!, "")
|
207
|
-
# rubocop:enable Performance/DeleteSuffix
|
208
|
-
site.in_source_dir File.dirname(resource_path)
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
Liquid::Template.register_tag("include", Bridgetown::Tags::IncludeTag)
|
216
|
-
Liquid::Template.register_tag("include_relative", Bridgetown::Tags::IncludeRelativeTag)
|