bridgetown-core 0.21.2 → 1.0.0.alpha2

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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -0
  3. data/Rakefile +5 -5
  4. data/bin/bridgetown +2 -0
  5. data/bridgetown-core.gemspec +3 -0
  6. data/lib/bridgetown-core/cache.rb +3 -5
  7. data/lib/bridgetown-core/cleaner.rb +2 -10
  8. data/lib/bridgetown-core/collection.rb +62 -86
  9. data/lib/bridgetown-core/commands/base.rb +62 -2
  10. data/lib/bridgetown-core/commands/build.rb +33 -12
  11. data/lib/bridgetown-core/commands/concerns/actions.rb +2 -2
  12. data/lib/bridgetown-core/commands/concerns/build_options.rb +3 -10
  13. data/lib/bridgetown-core/commands/concerns/configuration_overridable.rb +3 -1
  14. data/lib/bridgetown-core/commands/console.rb +3 -3
  15. data/lib/bridgetown-core/commands/doctor.rb +13 -11
  16. data/lib/bridgetown-core/commands/new.rb +14 -6
  17. data/lib/bridgetown-core/commands/plugins.rb +8 -11
  18. data/lib/bridgetown-core/commands/serve/servlet.rb +4 -4
  19. data/lib/bridgetown-core/commands/serve.rb +37 -37
  20. data/lib/bridgetown-core/commands/start.rb +106 -0
  21. data/lib/bridgetown-core/commands/webpack/webpack.defaults.js.erb +2 -2
  22. data/lib/bridgetown-core/commands/webpack.rb +1 -1
  23. data/lib/bridgetown-core/component.rb +1 -5
  24. data/lib/bridgetown-core/concerns/site/configurable.rb +1 -13
  25. data/lib/bridgetown-core/concerns/site/content.rb +17 -118
  26. data/lib/bridgetown-core/concerns/site/extensible.rb +3 -4
  27. data/lib/bridgetown-core/concerns/site/localizable.rb +3 -1
  28. data/lib/bridgetown-core/concerns/site/processable.rb +9 -20
  29. data/lib/bridgetown-core/concerns/site/renderable.rb +19 -30
  30. data/lib/bridgetown-core/concerns/site/ssr.rb +53 -0
  31. data/lib/bridgetown-core/concerns/site/writable.rb +6 -9
  32. data/lib/bridgetown-core/configuration.rb +19 -48
  33. data/lib/bridgetown-core/configurations/minitesting.rb +1 -1
  34. data/lib/bridgetown-core/configurations/turbo.rb +1 -1
  35. data/lib/bridgetown-core/converter.rb +1 -0
  36. data/lib/bridgetown-core/converters/erb_templates.rb +3 -2
  37. data/lib/bridgetown-core/converters/liquid_templates.rb +3 -2
  38. data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +1 -1
  39. data/lib/bridgetown-core/converters/smartypants.rb +1 -0
  40. data/lib/bridgetown-core/current.rb +4 -0
  41. data/lib/bridgetown-core/drops/collection_drop.rb +1 -1
  42. data/lib/bridgetown-core/drops/drop.rb +4 -4
  43. data/lib/bridgetown-core/drops/generated_page_drop.rb +23 -0
  44. data/lib/bridgetown-core/drops/resource_drop.rb +3 -3
  45. data/lib/bridgetown-core/drops/site_drop.rb +3 -47
  46. data/lib/bridgetown-core/entry_filter.rb +1 -0
  47. data/lib/bridgetown-core/errors.rb +0 -2
  48. data/lib/bridgetown-core/filters/url_filters.rb +2 -0
  49. data/lib/bridgetown-core/filters.rb +11 -12
  50. data/lib/bridgetown-core/frontmatter_defaults.rb +52 -90
  51. data/lib/bridgetown-core/{page.rb → generated_page.rb} +34 -60
  52. data/lib/bridgetown-core/generators/prototype_generator.rb +49 -61
  53. data/lib/bridgetown-core/helpers.rb +8 -3
  54. data/lib/bridgetown-core/hooks.rb +2 -2
  55. data/lib/bridgetown-core/layout.rb +15 -4
  56. data/lib/bridgetown-core/liquid_renderer.rb +1 -3
  57. data/lib/bridgetown-core/log_adapter.rb +1 -1
  58. data/lib/bridgetown-core/log_writer.rb +7 -1
  59. data/lib/bridgetown-core/model/base.rb +12 -4
  60. data/lib/bridgetown-core/model/builder_origin.rb +23 -11
  61. data/lib/bridgetown-core/model/origin.rb +3 -0
  62. data/lib/bridgetown-core/model/plugin_origin.rb +34 -0
  63. data/lib/bridgetown-core/model/repo_origin.rb +1 -1
  64. data/lib/bridgetown-core/plugin_manager.rb +10 -10
  65. data/lib/bridgetown-core/publisher.rb +1 -1
  66. data/lib/bridgetown-core/rack/boot.rb +47 -0
  67. data/lib/bridgetown-core/rack/logger.rb +22 -0
  68. data/lib/bridgetown-core/rack/roda.rb +66 -0
  69. data/lib/bridgetown-core/rack/routes.rb +88 -0
  70. data/lib/bridgetown-core/rack/static_indexes.rb +30 -0
  71. data/lib/bridgetown-core/reader.rb +20 -47
  72. data/lib/bridgetown-core/readers/layout_reader.rb +2 -2
  73. data/lib/bridgetown-core/readers/plugin_content_reader.rb +8 -7
  74. data/lib/bridgetown-core/renderer.rb +2 -12
  75. data/lib/bridgetown-core/resource/base.rb +51 -27
  76. data/lib/bridgetown-core/resource/permalink_processor.rb +23 -12
  77. data/lib/bridgetown-core/resource/relations.rb +2 -3
  78. data/lib/bridgetown-core/resource/taxonomy_term.rb +1 -5
  79. data/lib/bridgetown-core/resource/transformer.rb +8 -6
  80. data/lib/bridgetown-core/ruby_template_view.rb +6 -8
  81. data/lib/bridgetown-core/site.rb +4 -8
  82. data/lib/bridgetown-core/static_file.rb +14 -21
  83. data/lib/bridgetown-core/tags/find.rb +6 -6
  84. data/lib/bridgetown-core/tags/highlight.rb +5 -5
  85. data/lib/bridgetown-core/tags/include.rb +22 -32
  86. data/lib/bridgetown-core/tags/link.rb +4 -0
  87. data/lib/bridgetown-core/tags/live_reload_dev_js.rb +13 -0
  88. data/lib/bridgetown-core/tags/post_url.rb +9 -14
  89. data/lib/bridgetown-core/tags/render_content.rb +2 -2
  90. data/lib/bridgetown-core/tasks/bridgetown_tasks.rake +54 -0
  91. data/lib/bridgetown-core/url.rb +5 -4
  92. data/lib/bridgetown-core/utils/aux.rb +57 -0
  93. data/lib/bridgetown-core/utils/ruby_exec.rb +3 -45
  94. data/lib/bridgetown-core/utils/ruby_front_matter.rb +22 -7
  95. data/lib/bridgetown-core/utils.rb +60 -33
  96. data/lib/bridgetown-core/version.rb +2 -2
  97. data/lib/bridgetown-core/watcher.rb +4 -6
  98. data/lib/bridgetown-core.rb +16 -23
  99. data/lib/site_template/Gemfile.erb +6 -2
  100. data/lib/site_template/README.md +6 -6
  101. data/lib/site_template/Rakefile +49 -0
  102. data/lib/site_template/bridgetown.config.yml +2 -3
  103. data/lib/site_template/config/puma.rb +27 -0
  104. data/lib/site_template/config.ru +7 -0
  105. data/lib/site_template/frontend/javascript/index.js.erb +3 -3
  106. data/lib/site_template/package.json.erb +7 -12
  107. data/lib/site_template/server/roda_app.rb +22 -0
  108. data/lib/site_template/server/routes/hello.rb.sample +10 -0
  109. data/lib/site_template/src/_components/head.liquid +2 -1
  110. data/lib/site_template/src/about.md +0 -1
  111. data/lib/site_template/src/posts.md +2 -3
  112. metadata +63 -18
  113. data/lib/bridgetown-core/concerns/data_accessible.rb +0 -20
  114. data/lib/bridgetown-core/concerns/validatable.rb +0 -56
  115. data/lib/bridgetown-core/document.rb +0 -437
  116. data/lib/bridgetown-core/drops/document_drop.rb +0 -80
  117. data/lib/bridgetown-core/drops/excerpt_drop.rb +0 -19
  118. data/lib/bridgetown-core/drops/page_drop.rb +0 -18
  119. data/lib/bridgetown-core/excerpt.rb +0 -200
  120. data/lib/bridgetown-core/readers/data_reader.rb +0 -89
  121. data/lib/bridgetown-core/readers/page_reader.rb +0 -26
  122. data/lib/bridgetown-core/readers/post_reader.rb +0 -109
  123. data/lib/bridgetown-core/regenerator.rb +0 -202
  124. data/lib/bridgetown-core/related_posts.rb +0 -55
  125. data/lib/site_template/config/.keep +0 -0
  126. data/lib/site_template/start.js +0 -17
  127. data/lib/site_template/sync.js +0 -35
@@ -6,5 +6,9 @@ module Bridgetown
6
6
  # @return [Bridgetown::Site]
7
7
 
8
8
  attribute :site
9
+
10
+ # @!method self.preloaded_configuration
11
+ # @return [Bridgetown::Configuration]
12
+ attribute :preloaded_configuration
9
13
  end
10
14
  end
@@ -8,7 +8,7 @@ module Bridgetown
8
8
  mutable false
9
9
 
10
10
  def_delegator :@obj, :write?, :output
11
- def_delegators :@obj, :label, :docs, :files, :relative_path, :resources, :static_files
11
+ def_delegators :@obj, :label, :files, :relative_path, :resources, :static_files
12
12
 
13
13
  private def_delegator :@obj, :metadata, :fallback_data
14
14
 
@@ -28,7 +28,7 @@ module Bridgetown
28
28
  # drop.
29
29
  #
30
30
  # Returns nothing
31
- def initialize(obj)
31
+ def initialize(obj) # rubocop:disable Lint/MissingSuper
32
32
  @obj = obj
33
33
  end
34
34
 
@@ -69,11 +69,11 @@ module Bridgetown
69
69
  if respond_to?(setter)
70
70
  public_send(setter, val)
71
71
  elsif respond_to?(key.to_s)
72
- if self.class.mutable?
73
- mutations[key] = val
74
- else
72
+ unless self.class.mutable?
75
73
  raise Errors::DropMutationException, "Key #{key} cannot be set in the drop."
76
74
  end
75
+
76
+ mutations[key] = val
77
77
  else
78
78
  fallback_data[key] = val
79
79
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bridgetown
4
+ module Drops
5
+ class GeneratedPageDrop < Drop
6
+ extend Forwardable
7
+
8
+ mutable false
9
+
10
+ def_delegators :@obj,
11
+ :data,
12
+ :content,
13
+ :dir,
14
+ :name,
15
+ :path,
16
+ :url,
17
+ :relative_url,
18
+ :relative_path
19
+
20
+ private def_delegator :@obj, :data, :fallback_data
21
+ end
22
+ end
23
+ end
@@ -11,7 +11,6 @@ module Bridgetown
11
11
 
12
12
  mutable false
13
13
 
14
- def_delegator :@obj, :relative_path, :path
15
14
  def_delegators :@obj,
16
15
  :id,
17
16
  :data,
@@ -20,6 +19,7 @@ module Bridgetown
20
19
  :summary,
21
20
  :to_s,
22
21
  :absolute_url,
22
+ :path,
23
23
  :relative_path,
24
24
  :relative_url,
25
25
  :date,
@@ -32,8 +32,8 @@ module Bridgetown
32
32
  @collection ||= @obj.collection.to_liquid
33
33
  end
34
34
 
35
- def excerpt
36
- fallback_data["excerpt"].to_s
35
+ def relative_path
36
+ @relative_path ||= @obj.relative_path.to_s
37
37
  end
38
38
 
39
39
  def <=>(other)
@@ -13,7 +13,6 @@ module Bridgetown
13
13
  :data,
14
14
  :locale,
15
15
  :time,
16
- :pages,
17
16
  :generated_pages,
18
17
  :static_files,
19
18
  :tags,
@@ -25,51 +24,10 @@ module Bridgetown
25
24
 
26
25
  attr_writer :current_document
27
26
 
28
- def [](key)
29
- if !@obj.uses_resource? && !%w(posts data).freeze.include?(key) &&
30
- @obj.collections.key?(key)
31
- return @obj.collections[key].docs
32
- end
33
-
34
- super(key)
35
- end
36
-
37
- def key?(key)
38
- (!@obj.uses_resource? && key != "posts" && @obj.collections.key?(key)) || super
39
- end
40
-
41
27
  def uses_resource
42
28
  @obj.uses_resource?
43
29
  end
44
30
 
45
- def posts
46
- unless @obj.uses_resource?
47
- @site_posts ||= @obj.collections.posts.docs.sort { |a, b| b <=> a }
48
- end
49
- end
50
-
51
- # TODO: deprecate before v1.0
52
- def html_pages
53
- @site_html_pages ||= @obj.pages.select do |page|
54
- page.html? || page.url.end_with?("/")
55
- end
56
- end
57
-
58
- # TODO: deprecate before v1.0
59
- def collections
60
- @site_collections ||= @obj.collections.values.sort_by(&:label).map(&:to_liquid)
61
- end
62
-
63
- # `Site#documents` cannot be memoized so that `Site#docs_to_write` can access the
64
- # latest state of the attribute.
65
- #
66
- # Since this method will be called after `Site#pre_render` hook, the `Site#documents`
67
- # array shouldn't thereafter change and can therefore be safely memoized to prevent
68
- # additional computation of `Site#documents`.
69
- def documents
70
- @documents ||= @obj.documents
71
- end
72
-
73
31
  def resources
74
32
  @resources ||= @obj.resources
75
33
  end
@@ -82,11 +40,9 @@ module Bridgetown
82
40
  @site_metadata ||= @obj.data["site_metadata"]
83
41
  end
84
42
 
85
- # TODO: change this so you *do* use site.config...aka site.config.timezone,
86
- # not site.timezone
87
- #
88
- # return nil for `{{ site.config }}` even if --config was passed via CLI
89
- def config; end
43
+ def config
44
+ @obj.config
45
+ end
90
46
  end
91
47
  end
92
48
  end
@@ -3,6 +3,7 @@
3
3
  module Bridgetown
4
4
  class EntryFilter
5
5
  attr_reader :site
6
+
6
7
  SPECIAL_LEADING_CHAR_REGEX = %r!\A#{Regexp.union([".", "_", "#", "~"])}!o.freeze
7
8
  SPECIAL_LEADING_CHAR_NO_UNDERSCORES_REGEX = %r!\A#{Regexp.union([".", "#", "~"])}!o.freeze
8
9
 
@@ -14,7 +14,5 @@ module Bridgetown
14
14
  PostURLError = Class.new(FatalException)
15
15
  InvalidURLError = Class.new(FatalException)
16
16
  InvalidConfigurationError = Class.new(FatalException)
17
-
18
- WebpackAssetError = Class.new(FatalException)
19
17
  end
20
18
  end
@@ -51,6 +51,7 @@ module Bridgetown
51
51
 
52
52
  def compute_absolute_url(input)
53
53
  return if input.nil?
54
+ return input.absolute_url if input.respond_to?(:absolute_url)
54
55
 
55
56
  input = input.url if input.respond_to?(:url)
56
57
  return input if Addressable::URI.parse(input.to_s).absolute?
@@ -66,6 +67,7 @@ module Bridgetown
66
67
 
67
68
  def compute_relative_url(input)
68
69
  return if input.nil?
70
+ return input.relative_url if input.respond_to?(:relative_url)
69
71
 
70
72
  input = input.url if input.respond_to?(:url)
71
73
  return input if Addressable::URI.parse(input.to_s).absolute?
@@ -104,7 +104,7 @@ module Bridgetown
104
104
  def obfuscate_link(input, prefix = "mailto")
105
105
  link = "<a href=\"#{prefix}:#{input}\">#{input}</a>"
106
106
  script = "<script type=\"text/javascript\">document.currentScript.insertAdjacentHTML('"
107
- script += "beforebegin', '#{rot47(link).gsub(%r!\\!, '\\\\\\')}'.replace(/[!-~]/g,"
107
+ script += "beforebegin', '#{rot47(link).gsub(%r!\\!, '\\\\\\')}'.replace(/[!-~]/g," # rubocop:disable Style/StringLiteralsInInterpolation
108
108
  script += "function(c){{var j=c.charCodeAt(0);if((j>=33)&&(j<=126)){"
109
109
  script += "return String.fromCharCode(33+((j+ 14)%94));}"
110
110
  script += "else{return String.fromCharCode(j);}}}));</script>"
@@ -180,7 +180,7 @@ module Bridgetown
180
180
  # their `#inspect` string object.
181
181
  #
182
182
  # Returns the filtered array of objects
183
- def where(input, property, value)
183
+ def where(input, property, value) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
184
184
  return input if !property || value.is_a?(Array) || value.is_a?(Hash)
185
185
  return input unless input.respond_to?(:select)
186
186
 
@@ -194,11 +194,9 @@ module Bridgetown
194
194
  @where_filter_cache[input_id][property] ||= {}
195
195
 
196
196
  # stash or retrive results to return
197
- @where_filter_cache[input_id][property][value] ||= begin
198
- input.select do |object|
199
- compare_property_vs_target(item_property(object, property), value)
200
- end.to_a
201
- end
197
+ @where_filter_cache[input_id][property][value] ||= input.select do |object|
198
+ compare_property_vs_target(item_property(object, property), value)
199
+ end.to_a
202
200
  end
203
201
 
204
202
  # Filters an array of objects against an expression
@@ -247,13 +245,14 @@ module Bridgetown
247
245
  if property.nil?
248
246
  input.sort
249
247
  else
250
- if nils == "first"
248
+ case nils
249
+ when "first"
251
250
  order = - 1
252
- elsif nils == "last"
251
+ when "last"
253
252
  order = + 1
254
253
  else
255
254
  raise ArgumentError, "Invalid nils order: " \
256
- "'#{nils}' is not a valid nils order. It must be 'first' or 'last'."
255
+ "'#{nils}' is not a valid nils order. It must be 'first' or 'last'."
257
256
  end
258
257
 
259
258
  sort_input(input, property, order)
@@ -327,7 +326,7 @@ module Bridgetown
327
326
  # If the property doesn't exist, return the sort order respective of
328
327
  # which item doesn't have the property.
329
328
  # We also utilize the Schwartzian transform to make this more efficient.
330
- def sort_input(input, property, order)
329
+ def sort_input(input, property, order) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
331
330
  input.map { |item| [item_property(item, property), item] }
332
331
  .sort! do |a_info, b_info|
333
332
  a_property = a_info.first
@@ -413,7 +412,7 @@ module Bridgetown
413
412
  case item
414
413
  when Hash
415
414
  pairs = item.map { |k, v| as_liquid([k, v]) }
416
- Hash[pairs]
415
+ Hash[pairs] # rubocop:todo Style/HashConversion
417
416
  when Array
418
417
  item.map { |i| as_liquid(i) }
419
418
  else
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- # This class handles custom defaults for YAML frontmatter settings.
5
- # These are set in bridgetown.config.yml and apply both to internal use (e.g. layout)
6
- # and the data available to liquid.
7
- #
4
+ # This class handles custom defaults for front matter settings.
8
5
  # It is exposed via the frontmatter_defaults method on the site class.
9
6
  class FrontmatterDefaults
10
- # Initializes a new instance.
7
+ # @return [Bridgetown::Site]
8
+ attr_reader :site
9
+
11
10
  def initialize(site)
12
11
  @site = site
13
12
  end
@@ -16,24 +15,6 @@ module Bridgetown
16
15
  @glob_cache = {}
17
16
  end
18
17
 
19
- def update_deprecated_types(set)
20
- return set unless set.key?("scope") && set["scope"].key?("type")
21
-
22
- set["scope"]["type"] =
23
- case set["scope"]["type"]
24
- when "page"
25
- Deprecator.defaults_deprecate_type("page", "pages")
26
- "pages"
27
- when "post"
28
- Deprecator.defaults_deprecate_type("post", "posts")
29
- "posts"
30
- else
31
- set["scope"]["type"]
32
- end
33
-
34
- set
35
- end
36
-
37
18
  def ensure_time!(set)
38
19
  return set unless set.key?("values") && set["values"].key?("date")
39
20
  return set if set["values"]["date"].is_a?(Time)
@@ -45,44 +26,19 @@ module Bridgetown
45
26
  set
46
27
  end
47
28
 
48
- # Finds a default value for a given setting, filtered by path and type
29
+ # Collects a hash with all default values for a resource
49
30
  #
50
- # path - the path (relative to the source) of the page or
51
- # post the default is used in
52
- # type - a symbol indicating whether a :page,
53
- # a :post calls this method
31
+ # @param path [String] the relative path of the resource
32
+ # @param collection [Symbol] :posts, :pages, etc.
54
33
  #
55
- # Returns the default value or nil if none was found
56
- def find(path, type, setting)
57
- merged_data = {}
58
- merge_data_cascade_for_path(path, merged_data)
59
- return merged_data[setting] if merged_data.key?(setting)
60
-
61
- value = nil
62
- old_scope = nil
63
-
64
- matching_sets(path, type).each do |set|
65
- if set["values"].key?(setting) && has_precedence?(old_scope, set["scope"])
66
- value = set["values"][setting]
67
- old_scope = set["scope"]
68
- end
69
- end
70
- value
71
- end
72
-
73
- # Collects a hash with all default values for a page or post
74
- #
75
- # path - the relative path of the page or post
76
- # type - a symbol indicating the type (:post or :page)
77
- #
78
- # Returns a hash with all default values (an empty hash if there are none)
79
- def all(path, type)
34
+ # @returns [Hash] all default values (an empty hash if there are none)
35
+ def all(path, collection)
80
36
  defaults = {}
81
37
 
82
38
  merge_data_cascade_for_path(path, defaults)
83
39
 
84
40
  old_scope = nil
85
- matching_sets(path, type).each do |set|
41
+ matching_sets(path, collection).each do |set|
86
42
  if has_precedence?(old_scope, set["scope"])
87
43
  defaults = Utils.deep_merge_hashes(defaults, set["values"])
88
44
  old_scope = set["scope"]
@@ -96,8 +52,8 @@ module Bridgetown
96
52
  private
97
53
 
98
54
  def merge_data_cascade_for_path(path, merged_data)
99
- absolute_path = @site.in_source_dir(path)
100
- @site.defaults_reader.path_defaults
55
+ absolute_path = site.in_source_dir(path)
56
+ site.defaults_reader.path_defaults
101
57
  .select { |k, _v| absolute_path.include? k }
102
58
  .sort_by { |k, _v| k.length }
103
59
  .each do |defaults|
@@ -105,22 +61,22 @@ module Bridgetown
105
61
  end
106
62
  end
107
63
 
108
- # Checks if a given default setting scope matches the given path and type
64
+ # Checks if a given default setting scope matches the given path and collection
109
65
  #
110
66
  # scope - the hash indicating the scope, as defined in bridgetown.config.yml
111
67
  # path - the path to check for
112
- # type - the type (:post or :page) to check for
68
+ # collection - the collection (:posts or :pages) to check for
113
69
  #
114
- # Returns true if the scope applies to the given type and path
115
- def applies?(scope, path, type)
116
- applies_type?(scope, type) && applies_path?(scope, path)
70
+ # Returns true if the scope applies to the given collection and path
71
+ def applies?(scope, path, collection)
72
+ applies_collection?(scope, collection) && applies_path?(scope, path)
117
73
  end
118
74
 
119
75
  def applies_path?(scope, path)
120
76
  rel_scope_path = scope["path"]
121
77
  return true if !rel_scope_path.is_a?(String) || rel_scope_path.empty?
122
78
 
123
- sanitized_path = sanitize_path(path)
79
+ sanitized_path = strip_collections_dir(sanitize_path(path))
124
80
 
125
81
  if rel_scope_path.include?("*")
126
82
  glob_scope(sanitized_path, rel_scope_path)
@@ -130,7 +86,7 @@ module Bridgetown
130
86
  end
131
87
 
132
88
  def glob_scope(sanitized_path, rel_scope_path)
133
- site_source = Pathname.new(@site.source)
89
+ site_source = Pathname.new(site.source)
134
90
  abs_scope_path = site_source.join(rel_scope_path).to_s
135
91
 
136
92
  glob_cache(abs_scope_path).each do |scope_path|
@@ -152,33 +108,31 @@ module Bridgetown
152
108
  end
153
109
 
154
110
  def strip_collections_dir(path)
155
- collections_dir = @site.config["collections_dir"]
111
+ collections_dir = site.config["collections_dir"]
156
112
  slashed_coll_dir = collections_dir.empty? ? "/" : "#{collections_dir}/"
157
113
  return path if collections_dir.empty? || !path.to_s.start_with?(slashed_coll_dir)
158
114
 
159
115
  path.sub(slashed_coll_dir, "")
160
116
  end
161
117
 
162
- # Determines whether the scope applies to type.
163
- # The scope applies to the type if:
164
- # 1. no 'type' is specified
165
- # 2. the 'type' in the scope is the same as the type asked about
118
+ # Determines whether the scope applies to collection.
119
+ # The scope applies to the collection if:
120
+ # 1. no 'collection' is specified
121
+ # 2. the 'collection' in the scope is the same as the collection asked about
166
122
  #
167
- # scope - the Hash defaults set being asked about application
168
- # type - the type of the document being processed / asked about
169
- # its defaults.
123
+ # @param scope [Hash] the defaults set being asked about
124
+ # @param collection [Symbol] the collection of the resource being processed
170
125
  #
171
- # Returns true if either of the above conditions are satisfied,
172
- # otherwise returns false
173
- def applies_type?(scope, type)
174
- !scope.key?("type") || scope["type"].eql?(type.to_s)
126
+ # @returns [Boolean] whether either of the above conditions are satisfied
127
+ def applies_collection?(scope, collection)
128
+ !scope.key?("collection") || scope["collection"].eql?(collection.to_s)
175
129
  end
176
130
 
177
131
  # Checks if a given set of default values is valid
178
132
  #
179
- # set - the default value hash, as defined in bridgetown.config.yml
133
+ # @param set [Hash] the default value hash as defined in bridgetown.config.yml
180
134
  #
181
- # Returns true if the set is valid and can be used in this class
135
+ # @returns [Boolean] if the set is valid and can be used
182
136
  def valid?(set)
183
137
  set.is_a?(Hash) && set["values"].is_a?(Hash)
184
138
  end
@@ -198,24 +152,22 @@ module Bridgetown
198
152
 
199
153
  if new_path.length != old_path.length
200
154
  new_path.length >= old_path.length
201
- elsif new_scope.key?("type")
155
+ elsif new_scope.key?("collection")
202
156
  true
203
157
  else
204
- !old_scope.key? "type"
158
+ !old_scope.key? "collection"
205
159
  end
206
160
  end
207
161
  # rubocop: enable Naming/PredicateName
208
162
 
209
- # Collects a list of sets that match the given path and type
163
+ # Collects a list of sets that match the given path and collection
210
164
  #
211
- # Returns an array of hashes
212
- def matching_sets(path, type)
165
+ # @return [Array<Hash>]
166
+ def matching_sets(path, collection)
213
167
  @matched_set_cache ||= {}
214
168
  @matched_set_cache[path] ||= {}
215
- @matched_set_cache[path][type] ||= begin
216
- valid_sets.select do |set|
217
- !set.key?("scope") || applies?(set["scope"], path, type)
218
- end
169
+ @matched_set_cache[path][collection] ||= valid_sets.select do |set|
170
+ !set.key?("scope") || applies?(set["scope"], path, collection)
219
171
  end
220
172
  end
221
173
 
@@ -224,14 +176,16 @@ module Bridgetown
224
176
  # This is not cached to allow plugins to modify the configuration
225
177
  # and have their changes take effect
226
178
  #
227
- # Returns an array of hashes
179
+ # @return [Array<Hash>]
228
180
  def valid_sets
229
- sets = @site.config["defaults"]
181
+ sets = site.config["defaults"]
230
182
  return [] unless sets.is_a?(Array)
231
183
 
232
184
  sets.map do |set|
233
185
  if valid?(set)
234
- ensure_time!(update_deprecated_types(set))
186
+ massage_scope!(set)
187
+ # TODO: is this trip really necessary?
188
+ ensure_time!(set)
235
189
  else
236
190
  Bridgetown.logger.warn "Defaults:", "An invalid front-matter default set was found:"
237
191
  Bridgetown.logger.warn set.to_s
@@ -240,10 +194,18 @@ module Bridgetown
240
194
  end.compact
241
195
  end
242
196
 
243
- # Sanitizes the given path by removing a leading and adding a trailing slash
197
+ # Set path to blank if not specified and alias older type to collection
198
+ def massage_scope!(set)
199
+ set["scope"] ||= {}
200
+ set["scope"]["path"] ||= ""
201
+ return unless set["scope"]["type"] && !set["scope"]["collection"]
202
+
203
+ set["scope"]["collection"] = set["scope"]["type"]
204
+ end
244
205
 
245
206
  SANITIZATION_REGEX = %r!\A/|(?<=[^/])\z!.freeze
246
207
 
208
+ # Sanitizes the given path by removing a leading and adding a trailing slash
247
209
  def sanitize_path(path)
248
210
  if path.nil? || path.empty?
249
211
  ""