bridgetown-core 0.16.0.beta1 → 0.16.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/bridgetown-core.gemspec +1 -0
- data/lib/bridgetown-core/commands/concerns/actions.rb +2 -1
- data/lib/bridgetown-core/converters/erb_templates.rb +27 -10
- data/lib/bridgetown-core/plugin_manager.rb +10 -2
- data/lib/bridgetown-core/ruby_template_view.rb +15 -1
- data/lib/bridgetown-core/tags/webpack_path.rb +6 -41
- data/lib/bridgetown-core/utils.rb +53 -0
- data/lib/bridgetown-core/version.rb +1 -1
- data/lib/site_template/src/_layouts/{default.html → default.liquid} +0 -0
- data/lib/site_template/src/_layouts/{home.html → home.liquid} +0 -0
- data/lib/site_template/src/_layouts/{page.html → page.liquid} +0 -0
- data/lib/site_template/src/_layouts/{post.html → post.liquid} +0 -0
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9c23ef7da53e1f746ee14540f1f370ad6edea81667e314e9ff9e4c032c8c40c
|
4
|
+
data.tar.gz: f8ef26737713ef23c95a5b61407b51e791c266a0eef766ab4ca07fd9ad9e39bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fd1626a1708c19486e34a74deeea3c5f2659eb7c96dc7ff0444d464347e4b83e410e36b7b75da727d0120399e01e9f9b11915f6a7f601bb89159bf5bcc863e5
|
7
|
+
data.tar.gz: f087e6a3c5d2990f514f9ebfa33cf6a7654d0ab2f22ea09f0411dee72caaed12684642a43a5fa4b55790544814f6a599fe663ccc91390849d3acb51ec58d9b22
|
data/bridgetown-core.gemspec
CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.add_runtime_dependency("addressable", "~> 2.4")
|
36
36
|
s.add_runtime_dependency("awesome_print", "~> 1.8")
|
37
37
|
s.add_runtime_dependency("colorator", "~> 1.0")
|
38
|
+
s.add_runtime_dependency("erubi", "~> 1.9")
|
38
39
|
s.add_runtime_dependency("faraday", "~> 1.0")
|
39
40
|
s.add_runtime_dependency("faraday_middleware", "~> 1.0")
|
40
41
|
s.add_runtime_dependency("i18n", "~> 1.0")
|
@@ -11,6 +11,7 @@ module Bridgetown
|
|
11
11
|
GITHUB_REGEX = %r!https://github\.com!.freeze
|
12
12
|
GITHUB_TREE_REGEX = %r!#{GITHUB_REGEX}/.*/.*/tree/.*/?!.freeze
|
13
13
|
GITHUB_BLOB_REGEX = %r!#{GITHUB_REGEX}/.*/.*/blob/!.freeze
|
14
|
+
GITHUB_REPO_REGEX = %r!github\.com/(.*?/[^/]*)!.freeze
|
14
15
|
|
15
16
|
def create_builder(filename, data = nil)
|
16
17
|
say_status :create_builder, filename
|
@@ -114,7 +115,7 @@ module Bridgetown
|
|
114
115
|
elsif github_blob_match
|
115
116
|
new_url.sub("/blob/", "/")
|
116
117
|
else
|
117
|
-
"#{new_url}
|
118
|
+
"#{new_url}/#{Bridgetown::Utils.default_github_branch_name(arg)}"
|
118
119
|
end
|
119
120
|
else
|
120
121
|
arg
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "tilt/
|
4
|
-
require "
|
3
|
+
require "tilt/erubi"
|
4
|
+
require "erubi/capture_end"
|
5
5
|
|
6
6
|
module Bridgetown
|
7
7
|
class ERBView < RubyTemplateView
|
8
|
-
|
8
|
+
def h(input)
|
9
|
+
Erubi.h(input)
|
10
|
+
end
|
9
11
|
|
10
12
|
def partial(partial_name, options = {})
|
11
13
|
options.merge!(options[:locals]) if options[:locals]
|
@@ -14,10 +16,10 @@ module Bridgetown
|
|
14
16
|
partial_segments.last.sub!(%r!^!, "_")
|
15
17
|
partial_name = partial_segments.join("/")
|
16
18
|
|
17
|
-
Tilt::
|
19
|
+
Tilt::ErubiTemplate.new(
|
18
20
|
site.in_source_dir(site.config[:partials_dir], "#{partial_name}.erb"),
|
19
|
-
|
20
|
-
|
21
|
+
outvar: "@_erbout",
|
22
|
+
engine_class: Erubi::CaptureEndEngine
|
21
23
|
).render(self, options)
|
22
24
|
end
|
23
25
|
|
@@ -32,21 +34,36 @@ module Bridgetown
|
|
32
34
|
md_output = converter.convert(content).strip
|
33
35
|
@_erbout << md_output
|
34
36
|
end
|
37
|
+
|
38
|
+
def capture
|
39
|
+
previous_buffer_state = @_erbout
|
40
|
+
@_erbout = +""
|
41
|
+
result = yield
|
42
|
+
@_erbout = previous_buffer_state
|
43
|
+
|
44
|
+
result
|
45
|
+
end
|
35
46
|
end
|
36
47
|
|
37
48
|
module Converters
|
38
49
|
class ERBTemplates < Converter
|
39
50
|
input :erb
|
40
51
|
|
41
|
-
# Logic to do the content conversion.
|
52
|
+
# Logic to do the ERB content conversion.
|
42
53
|
#
|
43
|
-
# content
|
54
|
+
# @param content [String] Content of the file (without front matter).
|
55
|
+
# @params convertible [Bridgetown::Page, Bridgetown::Document, Bridgetown::Layout]
|
56
|
+
# The instantiated object which is processing the file.
|
44
57
|
#
|
45
|
-
#
|
58
|
+
# @return [String] The converted content.
|
46
59
|
def convert(content, convertible)
|
47
60
|
erb_view = Bridgetown::ERBView.new(convertible)
|
48
61
|
|
49
|
-
erb_renderer = Tilt::
|
62
|
+
erb_renderer = Tilt::ErubiTemplate.new(
|
63
|
+
convertible.relative_path,
|
64
|
+
outvar: "@_erbout",
|
65
|
+
engine_class: Erubi::CaptureEndEngine
|
66
|
+
) { content }
|
50
67
|
|
51
68
|
if convertible.is_a?(Bridgetown::Layout)
|
52
69
|
erb_renderer.render(erb_view) do
|
@@ -68,12 +68,20 @@ module Bridgetown
|
|
68
68
|
# If that exact package hasn't been installed, execute yarn add
|
69
69
|
#
|
70
70
|
# Returns nothing.
|
71
|
-
def self.install_yarn_dependencies(required_gems)
|
71
|
+
def self.install_yarn_dependencies(required_gems, single_gemname = nil)
|
72
72
|
return unless File.exist?("package.json")
|
73
73
|
|
74
74
|
package_json = JSON.parse(File.read("package.json"))
|
75
75
|
|
76
|
-
|
76
|
+
gems_to_search = if single_gemname
|
77
|
+
required_gems.select do |loaded_gem|
|
78
|
+
loaded_gem.to_spec&.name == single_gemname.to_s
|
79
|
+
end
|
80
|
+
else
|
81
|
+
required_gems
|
82
|
+
end
|
83
|
+
|
84
|
+
gems_to_search.each do |loaded_gem|
|
77
85
|
yarn_dependency = find_yarn_dependency(loaded_gem)
|
78
86
|
next unless add_yarn_dependency?(yarn_dependency, package_json)
|
79
87
|
|
@@ -1,11 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "digest"
|
4
|
+
require "active_support/core_ext/hash/keys"
|
4
5
|
|
5
6
|
module Bridgetown
|
6
7
|
class RubyTemplateView
|
7
8
|
class Helpers
|
8
9
|
include Bridgetown::Filters
|
10
|
+
|
11
|
+
Context = Struct.new(:registers)
|
12
|
+
|
13
|
+
def initialize(site)
|
14
|
+
@site = site
|
15
|
+
|
16
|
+
# duck typing for Liquid context
|
17
|
+
@context = Context.new({ site: @site })
|
18
|
+
end
|
19
|
+
|
20
|
+
def webpack_path(asset_type)
|
21
|
+
Bridgetown::Utils.parse_webpack_manifest_file(@site, asset_type.to_s)
|
22
|
+
end
|
9
23
|
end
|
10
24
|
|
11
25
|
attr_reader :layout, :page, :site, :content
|
@@ -43,7 +57,7 @@ module Bridgetown
|
|
43
57
|
end
|
44
58
|
|
45
59
|
def helpers
|
46
|
-
@helpers ||= Helpers.new
|
60
|
+
@helpers ||= Helpers.new(@site)
|
47
61
|
end
|
48
62
|
|
49
63
|
def method_missing(method, *args, &block)
|
@@ -5,12 +5,10 @@ module Bridgetown
|
|
5
5
|
# A helper class to help find the path to webpack asset inside of a webpack
|
6
6
|
# manifest file.
|
7
7
|
class WebpackPath < Liquid::Tag
|
8
|
-
include Bridgetown::Filters::URLFilters
|
9
|
-
|
10
8
|
# @param tag_name [String] Name of the tag
|
11
9
|
# @param asset_type [String] The type of asset to parse (js, css)
|
12
10
|
# @param options [Hash] An options hash
|
13
|
-
# @return
|
11
|
+
# @return [void]
|
14
12
|
# @see {https://www.rdoc.info/github/Shopify/liquid/Liquid/Tag#initialize-instance_method}
|
15
13
|
def initialize(tag_name, asset_type, options)
|
16
14
|
super
|
@@ -19,12 +17,12 @@ module Bridgetown
|
|
19
17
|
@asset_type = asset_type.strip
|
20
18
|
end
|
21
19
|
|
22
|
-
# Render
|
23
|
-
# @param context [
|
20
|
+
# Render an asset path based on the Webpack manifest file
|
21
|
+
# @param context [Liquid::Context] Context passed to the tag
|
24
22
|
#
|
25
23
|
# @return [String] Returns "MISSING_WEBPACK_MANIFEST" if the manifest
|
26
|
-
# file
|
27
|
-
# @return [
|
24
|
+
# file isn't found
|
25
|
+
# @return [String] Returns a blank string if the asset isn't found
|
28
26
|
# @return [String] Returns the path to the asset if no issues parsing
|
29
27
|
#
|
30
28
|
# @raise [WebpackAssetError] if unable to find css or js in the manifest
|
@@ -32,40 +30,7 @@ module Bridgetown
|
|
32
30
|
def render(context)
|
33
31
|
@context = context
|
34
32
|
site = context.registers[:site]
|
35
|
-
|
36
|
-
manifest_file = site.in_root_dir(".bridgetown-webpack", "manifest.json")
|
37
|
-
|
38
|
-
parse_manifest_file(manifest_file)
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def parse_manifest_file(manifest_file)
|
44
|
-
return "MISSING_WEBPACK_MANIFEST" unless File.exist?(manifest_file)
|
45
|
-
|
46
|
-
manifest = JSON.parse(File.read(manifest_file))
|
47
|
-
frontend_path = relative_url("_bridgetown/static")
|
48
|
-
|
49
|
-
known_assets = %w(js css)
|
50
|
-
|
51
|
-
if known_assets.include?(@asset_type)
|
52
|
-
asset_path = manifest["main.#{@asset_type}"]
|
53
|
-
|
54
|
-
log_webpack_asset_error(@asset_type) if asset_path.nil?
|
55
|
-
|
56
|
-
asset_path = asset_path.split("/").last
|
57
|
-
return [frontend_path, @asset_type, asset_path].join("/")
|
58
|
-
end
|
59
|
-
|
60
|
-
Bridgetown.logger.error("Unknown Webpack asset type", @asset_type)
|
61
|
-
nil
|
62
|
-
end
|
63
|
-
|
64
|
-
def log_webpack_asset_error(asset_type)
|
65
|
-
error_message = "There was an error parsing your #{asset_type} files. \
|
66
|
-
Please check your #{asset_type} for any errors."
|
67
|
-
|
68
|
-
Bridgetown.logger.warn(Errors::WebpackAssetError, error_message)
|
33
|
+
Bridgetown::Utils.parse_webpack_manifest_file(site, @asset_type) || ""
|
69
34
|
end
|
70
35
|
end
|
71
36
|
end
|
@@ -331,6 +331,59 @@ module Bridgetown
|
|
331
331
|
end
|
332
332
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
|
333
333
|
|
334
|
+
# Return an asset path based on the Webpack manifest file
|
335
|
+
# @param site [Bridgetown::Site] The current site object
|
336
|
+
# @param asset_type [String] js or css
|
337
|
+
#
|
338
|
+
# @return [String] Returns "MISSING_WEBPACK_MANIFEST" if the manifest
|
339
|
+
# file isnt found
|
340
|
+
# @return [nil] Returns nil if the asset isnt found
|
341
|
+
# @return [String] Returns the path to the asset if no issues parsing
|
342
|
+
#
|
343
|
+
# @raise [WebpackAssetError] if unable to find css or js in the manifest
|
344
|
+
# file
|
345
|
+
def parse_webpack_manifest_file(site, asset_type)
|
346
|
+
manifest_file = site.in_root_dir(".bridgetown-webpack", "manifest.json")
|
347
|
+
return "MISSING_WEBPACK_MANIFEST" unless File.exist?(manifest_file)
|
348
|
+
|
349
|
+
manifest = JSON.parse(File.read(manifest_file))
|
350
|
+
|
351
|
+
known_assets = %w(js css)
|
352
|
+
if known_assets.include?(asset_type)
|
353
|
+
asset_path = manifest["main.#{asset_type}"]
|
354
|
+
|
355
|
+
log_webpack_asset_error(asset_type) && return if asset_path.nil?
|
356
|
+
|
357
|
+
asset_path = asset_path.split("/").last
|
358
|
+
return [static_frontend_path(site), asset_type, asset_path].join("/")
|
359
|
+
end
|
360
|
+
|
361
|
+
Bridgetown.logger.error("Unknown Webpack asset type", asset_type)
|
362
|
+
nil
|
363
|
+
end
|
364
|
+
|
365
|
+
def static_frontend_path(site)
|
366
|
+
path_parts = [site.config["baseurl"].to_s.chomp("/"), "_bridgetown/static"]
|
367
|
+
path_parts[0] = "/#{path_parts[0]}" unless path_parts[0].empty?
|
368
|
+
Addressable::URI.parse(path_parts.join("/")).normalize.to_s
|
369
|
+
end
|
370
|
+
|
371
|
+
def log_webpack_asset_error(asset_type)
|
372
|
+
error_message = "There was an error parsing your #{asset_type} files. \
|
373
|
+
Please check your #{asset_type} for any errors."
|
374
|
+
|
375
|
+
Bridgetown.logger.warn(Errors::WebpackAssetError, error_message)
|
376
|
+
end
|
377
|
+
|
378
|
+
def default_github_branch_name(repo_url)
|
379
|
+
repo_match = Bridgetown::Commands::Actions::GITHUB_REPO_REGEX.match(repo_url)
|
380
|
+
api_endpoint = "https://api.github.com/repos/#{repo_match[1]}"
|
381
|
+
JSON.parse(Faraday.get(api_endpoint).body)["default_branch"] || "master"
|
382
|
+
rescue StandardError => e
|
383
|
+
Bridgetown.logger.warn("Unable to connect to GitHub API: #{e.message}")
|
384
|
+
"master"
|
385
|
+
end
|
386
|
+
|
334
387
|
private
|
335
388
|
|
336
389
|
def merge_values(target, overwrite)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.16.0.
|
4
|
+
version: 0.16.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: 2020-07-
|
11
|
+
date: 2020-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: erubi
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.9'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.9'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: faraday
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -409,10 +423,10 @@ files:
|
|
409
423
|
- lib/site_template/src/_components/head.liquid
|
410
424
|
- lib/site_template/src/_components/navbar.liquid
|
411
425
|
- lib/site_template/src/_data/site_metadata.yml
|
412
|
-
- lib/site_template/src/_layouts/default.
|
413
|
-
- lib/site_template/src/_layouts/home.
|
414
|
-
- lib/site_template/src/_layouts/page.
|
415
|
-
- lib/site_template/src/_layouts/post.
|
426
|
+
- lib/site_template/src/_layouts/default.liquid
|
427
|
+
- lib/site_template/src/_layouts/home.liquid
|
428
|
+
- lib/site_template/src/_layouts/page.liquid
|
429
|
+
- lib/site_template/src/_layouts/post.liquid
|
416
430
|
- lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb
|
417
431
|
- lib/site_template/src/about.md
|
418
432
|
- lib/site_template/src/favicon.ico
|