bridgetown-core 0.17.0 → 0.18.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/bridgetown-core.gemspec +1 -0
  4. data/lib/bridgetown-core.rb +44 -29
  5. data/lib/bridgetown-core/collection.rb +5 -1
  6. data/lib/bridgetown-core/commands/apply.rb +2 -2
  7. data/lib/bridgetown-core/commands/new.rb +1 -1
  8. data/lib/bridgetown-core/concerns/layout_placeable.rb +1 -1
  9. data/lib/bridgetown-core/concerns/liquid_renderable.rb +10 -0
  10. data/lib/bridgetown-core/concerns/site/configurable.rb +21 -23
  11. data/lib/bridgetown-core/concerns/site/content.rb +46 -33
  12. data/lib/bridgetown-core/concerns/site/extensible.rb +14 -13
  13. data/lib/bridgetown-core/concerns/site/localizable.rb +6 -2
  14. data/lib/bridgetown-core/concerns/site/processable.rb +12 -15
  15. data/lib/bridgetown-core/concerns/site/renderable.rb +34 -26
  16. data/lib/bridgetown-core/concerns/site/writable.rb +7 -15
  17. data/lib/bridgetown-core/concerns/validatable.rb +2 -2
  18. data/lib/bridgetown-core/configuration.rb +10 -4
  19. data/lib/bridgetown-core/converter.rb +0 -42
  20. data/lib/bridgetown-core/converters/erb_templates.rb +80 -16
  21. data/lib/bridgetown-core/converters/liquid_templates.rb +103 -0
  22. data/lib/bridgetown-core/converters/markdown.rb +0 -3
  23. data/lib/bridgetown-core/document.rb +34 -21
  24. data/lib/bridgetown-core/drops/site_drop.rb +4 -0
  25. data/lib/bridgetown-core/drops/unified_payload_drop.rb +0 -1
  26. data/lib/bridgetown-core/drops/url_drop.rb +19 -3
  27. data/lib/bridgetown-core/excerpt.rb +1 -1
  28. data/lib/bridgetown-core/filters.rb +36 -7
  29. data/lib/bridgetown-core/generators/prototype_generator.rb +42 -25
  30. data/lib/bridgetown-core/helpers.rb +84 -0
  31. data/lib/bridgetown-core/liquid_renderer.rb +1 -1
  32. data/lib/bridgetown-core/log_writer.rb +2 -2
  33. data/lib/bridgetown-core/page.rb +8 -2
  34. data/lib/bridgetown-core/plugin_manager.rb +34 -1
  35. data/lib/bridgetown-core/reader.rb +1 -4
  36. data/lib/bridgetown-core/readers/data_reader.rb +3 -3
  37. data/lib/bridgetown-core/readers/defaults_reader.rb +1 -1
  38. data/lib/bridgetown-core/readers/post_reader.rb +28 -15
  39. data/lib/bridgetown-core/renderer.rb +42 -162
  40. data/lib/bridgetown-core/ruby_template_view.rb +26 -26
  41. data/lib/bridgetown-core/site.rb +12 -2
  42. data/lib/bridgetown-core/tags/render_content.rb +2 -2
  43. data/lib/bridgetown-core/utils.rb +14 -0
  44. data/lib/bridgetown-core/utils/ruby_exec.rb +1 -1
  45. data/lib/bridgetown-core/version.rb +2 -2
  46. data/lib/bridgetown-core/watcher.rb +1 -0
  47. data/lib/site_template/src/images/.keep +1 -0
  48. metadata +21 -3
@@ -5,28 +5,9 @@ require "active_support/core_ext/hash/keys"
5
5
 
6
6
  module Bridgetown
7
7
  class RubyTemplateView
8
- class Helpers
9
- include Bridgetown::Filters
8
+ require "bridgetown-core/helpers"
10
9
 
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
23
-
24
- def t(*args)
25
- I18n.send :t, *args
26
- end
27
- end
28
-
29
- attr_reader :layout, :page, :site, :content
10
+ attr_reader :layout, :page, :paginator, :site, :content
30
11
 
31
12
  def initialize(convertible)
32
13
  if convertible.is_a?(Layout)
@@ -34,8 +15,10 @@ module Bridgetown
34
15
  @page = layout.current_document
35
16
  @content = layout.current_document_output
36
17
  else
18
+ @layout = convertible.site.layouts[convertible.data["layout"]]
37
19
  @page = convertible
38
20
  end
21
+ @paginator = page.paginator if page.respond_to?(:paginator)
39
22
  @site = page.site
40
23
  end
41
24
 
@@ -43,11 +26,20 @@ module Bridgetown
43
26
  raise "Must be implemented in a subclass"
44
27
  end
45
28
 
29
+ def render(item, options = {}, &block)
30
+ if item.respond_to?(:render_in)
31
+ item.render_in(self, &block)
32
+ else
33
+ partial(item, options, &block)
34
+ end
35
+ end
36
+
46
37
  def site_drop
47
38
  site.site_payload.site
48
39
  end
49
40
 
50
- def liquid_render(component, options = {})
41
+ def liquid_render(component, options = {}, &block)
42
+ options[:_block_content] = capture(&block) if block && respond_to?(:capture)
51
43
  render_statement = _render_statement(component, options)
52
44
 
53
45
  template = site.liquid_renderer.file(
@@ -61,7 +53,7 @@ module Bridgetown
61
53
  end
62
54
 
63
55
  def helpers
64
- @helpers ||= Helpers.new(@site)
56
+ @helpers ||= Helpers.new(self, site)
65
57
  end
66
58
 
67
59
  def method_missing(method, *args, &block)
@@ -79,11 +71,19 @@ module Bridgetown
79
71
  private
80
72
 
81
73
  def _render_statement(component, options)
82
- render_statement = ["{% render \"#{component}\""]
74
+ render_statement = if options[:_block_content]
75
+ ["{% rendercontent \"#{component}\""]
76
+ else
77
+ ["{% render \"#{component}\""]
78
+ end
83
79
  unless options.empty?
84
80
  render_statement << ", " + options.keys.map { |k| "#{k}: #{k}" }.join(", ")
85
81
  end
86
82
  render_statement << " %}"
83
+ if options[:_block_content]
84
+ render_statement << options[:_block_content]
85
+ render_statement << "{% endrendercontent %}"
86
+ end
87
87
  render_statement.join
88
88
  end
89
89
 
@@ -91,8 +91,8 @@ module Bridgetown
91
91
  {
92
92
  registers: {
93
93
  site: site,
94
- page: page,
95
- cached_partials: Bridgetown::Renderer.cached_partials,
94
+ page: page.to_liquid,
95
+ cached_partials: Bridgetown::Converters::LiquidTemplates.cached_partials,
96
96
  },
97
97
  strict_filters: site.config["liquid"]["strict_filters"],
98
98
  strict_variables: site.config["liquid"]["strict_variables"],
@@ -15,8 +15,18 @@ module Bridgetown
15
15
  attr_reader :root_dir, :source, :dest, :cache_dir, :config,
16
16
  :regenerator, :liquid_renderer, :components_load_paths,
17
17
  :includes_load_paths
18
- attr_accessor :layouts, :pages, :static_files,
19
- :exclude, :include, :lsi, :highlighter, :permalink_style,
18
+
19
+ # All files not pages/documents or structured data in the source folder
20
+ # @return [Array<StaticFile>]
21
+ attr_accessor :static_files
22
+
23
+ # @return [Array<Layout>]
24
+ attr_accessor :layouts
25
+
26
+ # @return [Array<Page>]
27
+ attr_accessor :pages
28
+
29
+ attr_accessor :exclude, :include, :lsi, :highlighter, :permalink_style,
20
30
  :time, :future, :unpublished, :limit_posts,
21
31
  :keep_files, :baseurl, :data, :file_read_opts,
22
32
  :plugin_manager, :converters, :generators, :reader
@@ -3,7 +3,7 @@
3
3
  module Bridgetown
4
4
  module Tags
5
5
  class BlockRenderTag < Liquid::Block
6
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
6
+ # rubocop:disable Metrics/MethodLength
7
7
  def render(context)
8
8
  context.stack({}) do
9
9
  # unindent the incoming text
@@ -37,7 +37,7 @@ module Bridgetown
37
37
  .render_tag(context, +"")
38
38
  end
39
39
  end
40
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
40
+ # rubocop:enable Metrics/MethodLength
41
41
 
42
42
  private
43
43
 
@@ -23,6 +23,20 @@ module Bridgetown
23
23
  slug.gsub(%r![_ ]!, "-").split("-").map!(&:capitalize).join(" ")
24
24
  end
25
25
 
26
+ # XML escape a string for use. Replaces any special characters with
27
+ # appropriate HTML entity replacements.
28
+ #
29
+ # Examples
30
+ #
31
+ # xml_escape('foo "bar" <baz>')
32
+ # # => "foo &quot;bar&quot; &lt;baz&gt;"
33
+ #
34
+ # @param input [String] The String to escape.
35
+ # @return [String] the escaped String.
36
+ def xml_escape(input)
37
+ input.to_s.encode(xml: :attr).gsub(%r!\A"|"\Z!, "")
38
+ end
39
+
26
40
  # Non-destructive version of deep_merge_hashes! See that method.
27
41
  #
28
42
  # Returns the merged hashes.
@@ -59,7 +59,7 @@ module Bridgetown
59
59
 
60
60
  # This is where the magic happens! DON'T BE EVIL!!! ;-)
61
61
  output = obj.instance_eval(ruby_code)
62
- output.is_a?(Hash) ? output.with_indifferent_access : output
62
+ output.is_a?(Hash) ? output.with_dot_access : output
63
63
  end
64
64
  end
65
65
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.17.0"
5
- CODE_NAME = "Mount Scott"
4
+ VERSION = "0.18.3"
5
+ CODE_NAME = "Taylor Street"
6
6
  end
@@ -130,6 +130,7 @@ module Bridgetown
130
130
  Bridgetown::Hooks.trigger :site, :pre_reload, site
131
131
  Bridgetown::Hooks.clear_reloadable_hooks
132
132
  site.plugin_manager.reload_plugin_files
133
+ site.plugin_manager.reload_component_loaders
133
134
  site.process
134
135
  Bridgetown.logger.info "Done! 🎉", "#{"Completed".green} in less than" \
135
136
  " #{(Time.now - time).ceil(2)} seconds."
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.17.0
4
+ version: 0.18.3
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-09-17 00:00:00.000000000 Z
11
+ date: 2020-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: hash_with_dot_access
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: i18n
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -298,6 +312,7 @@ executables:
298
312
  extensions: []
299
313
  extra_rdoc_files: []
300
314
  files:
315
+ - ".yardopts"
301
316
  - Rakefile
302
317
  - bin/bridgetown
303
318
  - bridgetown-core.gemspec
@@ -336,6 +351,7 @@ files:
336
351
  - lib/bridgetown-core/converter.rb
337
352
  - lib/bridgetown-core/converters/erb_templates.rb
338
353
  - lib/bridgetown-core/converters/identity.rb
354
+ - lib/bridgetown-core/converters/liquid_templates.rb
339
355
  - lib/bridgetown-core/converters/markdown.rb
340
356
  - lib/bridgetown-core/converters/markdown/kramdown_parser.rb
341
357
  - lib/bridgetown-core/converters/smartypants.rb
@@ -363,6 +379,7 @@ files:
363
379
  - lib/bridgetown-core/frontmatter_defaults.rb
364
380
  - lib/bridgetown-core/generator.rb
365
381
  - lib/bridgetown-core/generators/prototype_generator.rb
382
+ - lib/bridgetown-core/helpers.rb
366
383
  - lib/bridgetown-core/hooks.rb
367
384
  - lib/bridgetown-core/layout.rb
368
385
  - lib/bridgetown-core/liquid_extensions.rb
@@ -435,6 +452,7 @@ files:
435
452
  - lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb
436
453
  - lib/site_template/src/about.md
437
454
  - lib/site_template/src/favicon.ico
455
+ - lib/site_template/src/images/.keep
438
456
  - lib/site_template/src/index.md
439
457
  - lib/site_template/src/posts.md
440
458
  - lib/site_template/start.js
@@ -464,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
482
  - !ruby/object:Gem::Version
465
483
  version: 2.7.0
466
484
  requirements: []
467
- rubygems_version: 3.0.6
485
+ rubygems_version: 3.1.4
468
486
  signing_key:
469
487
  specification_version: 4
470
488
  summary: A Webpack-aware, Ruby-based static site generator for the modern Jamstack