bridgetown-core 0.15.0.beta2 → 0.15.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34bf7d4a458a8c56d645d8243fc445948bbed43c65d32930437ec92a06c25620
4
- data.tar.gz: be2065a0a7e49ba29d84e49a5eb33df6d43f2a543d2cd29540e2f712599af4aa
3
+ metadata.gz: 0731d836363a7cc613e8a42a833fb1d45e50f293558cd78238d9b214b73e2d99
4
+ data.tar.gz: 2597ac785d145bcd26083d08e803d4f0937165d8150bfb05eea5b9ba90ad6e4f
5
5
  SHA512:
6
- metadata.gz: bf8ef56bf7943a347c9fe092794551e2c6c620a068d7008eca1ee1c8c1c95ae9d71dd42448fd57011f77f4fc5025a32219345917d7e5aa72c2de196ddade77c0
7
- data.tar.gz: ed4bee93af751055e526365d84b3c34c10665add8f2d5329da7cd7549a473ed2f0beb6b19d5e8b04e2f511926465d8cb892355cb25f8b22b4060dc33915dafc9
6
+ metadata.gz: 7bead893392ffe25b85bcef0419201fa5a8752793f9b8812ac26e512ab35e2638d888ec02c64c672e7930c509afbe0fffa2c98b40316351028951469e63c9310
7
+ data.tar.gz: e8083bd29fb64deef6f0fe17b028cb1aa373944cfcb15fe0ce686b03f6db6e12bcdbcb25842e4a508b2979facb9655cfe358fac685f7c2af4c44e2a6edb65c1c
@@ -77,27 +77,43 @@ module Bridgetown
77
77
 
78
78
  private
79
79
 
80
+ def determine_remote_filename(arg)
81
+ if arg.end_with?(".rb")
82
+ arg.split("/").yield_self do |segments|
83
+ arg.sub!(%r!/#{segments.last}$!, "")
84
+ segments.last
85
+ end
86
+ else
87
+ "bridgetown.automation.rb"
88
+ end
89
+ end
90
+
80
91
  # TODO: option to download and confirm remote automation?
81
92
  def transform_automation_url(arg)
82
93
  return arg unless arg.start_with?("http")
83
94
 
84
- remote_file = if arg.end_with?(".rb")
85
- arg.split("/").yield_self do |segments|
86
- arg.sub!(%r!/#{segments.last}$!, "")
87
- segments.last
88
- end
89
- else
90
- "bridgetown.automation.rb"
91
- end
95
+ remote_file = determine_remote_filename(arg)
96
+
97
+ github_regex = %r!https://github\.com!
98
+ github_tree_regex = %r!#{github_regex}/.*/.*/tree/.*/?!
99
+
100
+ github_match = github_regex.match(arg)
101
+ github_tree_match = github_tree_regex.match(arg)
92
102
 
93
103
  if arg.start_with?("https://gist.github.com")
94
104
  return arg.sub(
95
105
  "https://gist.github.com", "https://gist.githubusercontent.com"
96
106
  ) + "/raw/#{remote_file}"
97
- elsif arg.start_with?("https://github.com")
98
- return arg.sub(
99
- "https://github.com", "https://raw.githubusercontent.com"
100
- ) + "/master/#{remote_file}"
107
+ elsif github_match
108
+ new_url = arg.sub(github_regex, "https://raw.githubusercontent.com")
109
+
110
+ if github_tree_match
111
+ new_url = new_url.sub("/tree/", "/")
112
+ else
113
+ new_url += "/master"
114
+ end
115
+
116
+ return "#{new_url}/#{remote_file}"
101
117
  end
102
118
 
103
119
  arg + "/#{remote_file}"
@@ -188,13 +188,10 @@ module Bridgetown
188
188
  #
189
189
  # Returns nothing.
190
190
  def do_layout(payload, layouts)
191
- self.output = _renderer.tap do |renderer|
191
+ _renderer.tap do |renderer|
192
192
  renderer.layouts = layouts
193
193
  renderer.payload = payload
194
194
  end.run
195
-
196
- Bridgetown.logger.debug "Post-Render Hooks:", relative_path
197
- Bridgetown::Hooks.trigger hook_owner, :post_render, self
198
195
  ensure
199
196
  @_renderer = nil # this will allow the modifications above to disappear
200
197
  end
@@ -43,8 +43,7 @@ module Bridgetown
43
43
  def render_regenerated(document, payload)
44
44
  return unless regenerator.regenerate?(document)
45
45
 
46
- document.output = Bridgetown::Renderer.new(self, document, payload).run
47
- document.trigger_hooks(:post_render)
46
+ Bridgetown::Renderer.new(self, document, payload).run
48
47
  end
49
48
  end
50
49
  end
@@ -81,7 +81,10 @@ module Bridgetown
81
81
  end
82
82
 
83
83
  def output
84
- @output ||= Renderer.new(doc.site, self, site.site_payload).run
84
+ @output || (
85
+ Renderer.new(doc.site, self, site.site_payload).run
86
+ @output
87
+ )
85
88
  end
86
89
 
87
90
  def place_in_layout?
@@ -10,11 +10,8 @@ module Bridgetown
10
10
 
11
11
  def parse(content)
12
12
  measure_time do
13
- # Remove extraneous indentation for rendercontent tags
14
- processed_content = content.gsub(%r!^[ \t]+{%-? rendercontent!, "{% rendercontent")
15
-
16
13
  @renderer.cache[@filename] ||= Liquid::Template.parse(
17
- processed_content, line_numbers: true
14
+ content, line_numbers: true
18
15
  )
19
16
  end
20
17
  @template = @renderer.cache[@filename]
@@ -67,30 +67,43 @@ module Bridgetown
67
67
  # If that exact package hasn't been installed, execute yarn add
68
68
  #
69
69
  # Returns nothing.
70
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
71
70
  def self.install_yarn_dependencies(required_gems)
72
71
  return unless File.exist?("package.json")
73
72
 
74
73
  package_json = JSON.parse(File.read("package.json"))
75
74
 
76
75
  required_gems.each do |loaded_gem|
77
- next unless loaded_gem.to_spec&.metadata&.dig("yarn-add")
78
-
79
- yarn_add_dependency = loaded_gem.to_spec.metadata["yarn-add"].split("@")
80
- next unless yarn_add_dependency.length == 2
81
-
82
- # check matching version number is see if it's already installed
83
- if package_json["dependencies"]
84
- current_package = package_json["dependencies"].dig(yarn_add_dependency.first)
85
- next unless current_package.nil? || current_package != yarn_add_dependency.last
86
- end
76
+ yarn_dependency = find_yarn_dependency(loaded_gem)
77
+ next unless add_yarn_dependency?(yarn_dependency, package_json)
87
78
 
88
79
  # all right, time to install the package
89
- cmd = "yarn add #{yarn_add_dependency.join("@")}"
80
+ cmd = "yarn add #{yarn_dependency.join("@")}"
90
81
  system cmd
91
82
  end
92
83
  end
93
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
84
+
85
+ def self.find_yarn_dependency(loaded_gem)
86
+ yarn_dependency = loaded_gem.to_spec&.metadata&.dig("yarn-add")&.split("@")
87
+ return nil if yarn_dependency&.length != 2
88
+
89
+ yarn_dependency
90
+ end
91
+
92
+ def self.add_yarn_dependency?(yarn_dependency, package_json)
93
+ return false if yarn_dependency.nil?
94
+
95
+ # check matching version number is see if it's already installed
96
+ if package_json["dependencies"]
97
+ current_version = package_json["dependencies"].dig(yarn_dependency.first)
98
+ package_requires_updating?(current_version, yarn_dependency.last)
99
+ else
100
+ true
101
+ end
102
+ end
103
+
104
+ def self.package_requires_updating?(current_version, dep_version)
105
+ current_version.nil? || current_version != dep_version && !current_version.include?("/")
106
+ end
94
107
 
95
108
  # Require all .rb files
96
109
  #
@@ -53,7 +53,7 @@ module Bridgetown
53
53
 
54
54
  # Prepare payload and render the document
55
55
  #
56
- # Returns String rendered document output
56
+ # Returns nothing
57
57
  def run
58
58
  Bridgetown.logger.debug "Rendering:", document.relative_path
59
59
 
@@ -63,8 +63,8 @@ module Bridgetown
63
63
  assign_layout_data!
64
64
 
65
65
  document.trigger_hooks(:pre_render, payload)
66
-
67
- render_document
66
+ document.output = render_document
67
+ document.trigger_hooks(:post_render)
68
68
  end
69
69
 
70
70
  # Render the document.
@@ -5,7 +5,9 @@ module Bridgetown
5
5
  class BlockRenderTag < Liquid::Block
6
6
  def render(context)
7
7
  context.stack({}) do
8
- content = super.gsub(%r!^[ \t]+!, "") # unindent the incoming text
8
+ # unindent the incoming text
9
+ content = Bridgetown::Utils.reindent_for_markdown(super)
10
+
9
11
  regions = gather_content_regions(context)
10
12
 
11
13
  site = context.registers[:site]
@@ -17,7 +19,7 @@ module Bridgetown
17
19
  unless regions.empty?
18
20
  regions.each do |region_name, region_content|
19
21
  region_name = region_name.sub("content_with_region_", "")
20
- context[region_name] = converter.convert(region_content.gsub(%r!^[ \t]+!, ""))
22
+ context[region_name] = converter.convert(region_content.strip_heredoc)
21
23
  render_params.push "#{region_name}: #{region_name}"
22
24
  end
23
25
  end
@@ -287,6 +287,50 @@ module Bridgetown
287
287
  merged
288
288
  end
289
289
 
290
+ # Returns a string that's been reindented so that Markdown's four+ spaces =
291
+ # code doesn't get triggered for nested Liquid components
292
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
293
+ def reindent_for_markdown(input)
294
+ lines = input.lines
295
+ return input if lines.first.nil?
296
+
297
+ starting_indentation = lines.find { |line| line != "\n" }&.match(%r!^ +!)
298
+ return input unless starting_indentation
299
+
300
+ starting_indent_length = starting_indentation[0].length
301
+
302
+ skip_pre_lines = false
303
+ lines.map do |line|
304
+ continue_processing = !skip_pre_lines
305
+
306
+ if skip_pre_lines
307
+ skip_pre_lines = false if line.include?("</pre>")
308
+ end
309
+ if line.include?("<pre")
310
+ skip_pre_lines = true
311
+ continue_processing = false
312
+ end
313
+
314
+ if continue_processing
315
+ line_indentation = line.match(%r!^ +!).yield_self do |indent|
316
+ indent.nil? ? "" : indent[0]
317
+ end
318
+ new_indentation = line_indentation.rjust(starting_indent_length, " ")
319
+
320
+ if %r!^ +!.match?(line)
321
+ line
322
+ .sub(%r!^ {1,#{starting_indent_length}}!, new_indentation)
323
+ .sub(%r!^#{new_indentation}!, "")
324
+ else
325
+ line
326
+ end
327
+ else
328
+ line
329
+ end
330
+ end.join("")
331
+ end
332
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
333
+
290
334
  private
291
335
 
292
336
  def merge_values(target, overwrite)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.15.0.beta2"
4
+ VERSION = "0.15.0.beta3"
5
5
  CODE_NAME = "Overlook"
6
6
  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.15.0.beta2
4
+ version: 0.15.0.beta3
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-05-31 00:00:00.000000000 Z
11
+ date: 2020-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport