bridgetown-core 1.3.0 → 1.3.2

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/bridgetown-core.gemspec +1 -0
  3. data/lib/bridgetown-core/commands/console.rb +10 -2
  4. data/lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb +12 -7
  5. data/lib/bridgetown-core/commands/esbuild/update.rb +1 -1
  6. data/lib/bridgetown-core/concerns/localizable.rb +13 -1
  7. data/lib/bridgetown-core/configuration.rb +1 -0
  8. data/lib/bridgetown-core/configurations/netlify/netlify.sh +2 -3
  9. data/lib/bridgetown-core/configurations/netlify/netlify.toml +1 -12
  10. data/lib/bridgetown-core/drops/drop.rb +2 -1
  11. data/lib/bridgetown-core/filters/localization_filters.rb +28 -2
  12. data/lib/bridgetown-core/filters/translation_filters.rb +15 -2
  13. data/lib/bridgetown-core/filters.rb +3 -4
  14. data/lib/bridgetown-core/generated_page.rb +1 -1
  15. data/lib/bridgetown-core/generators/prototype_generator.rb +2 -1
  16. data/lib/bridgetown-core/helpers.rb +4 -3
  17. data/lib/bridgetown-core/log_writer.rb +3 -9
  18. data/lib/bridgetown-core/plugin_manager.rb +24 -2
  19. data/lib/bridgetown-core/rack/boot.rb +13 -2
  20. data/lib/bridgetown-core/resource/base.rb +1 -1
  21. data/lib/bridgetown-core/resource/relations.rb +1 -1
  22. data/lib/bridgetown-core/tags/l.rb +4 -2
  23. data/lib/bridgetown-core/tags/t.rb +6 -2
  24. data/lib/bridgetown-core/tasks/bridgetown_tasks.rake +11 -0
  25. data/lib/bridgetown-core/utils/loaders_manager.rb +3 -4
  26. data/lib/bridgetown-core/version.rb +1 -1
  27. data/lib/bridgetown-core/yaml_parser.rb +15 -4
  28. data/lib/bridgetown-core.rb +1 -1
  29. data/lib/site_template/config/initializers.rb +20 -0
  30. data/lib/site_template/package.json.erb +12 -12
  31. metadata +20 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90337c7726115f901df3009e9e2d4b528e8439850ac995c38e2cfec4aca38109
4
- data.tar.gz: 7f32a5135963a21cd915e3a2dd37576daed3c1a9783feb3c236bc5c73b0b138a
3
+ metadata.gz: 556799feca958f64e151dff3c039cc98240bc611a60cf650e3658f50490dcf79
4
+ data.tar.gz: 74bed3c07355d9b54107ce92334a0cf32a4d8909dd002efdeb4cbf6b0a729128
5
5
  SHA512:
6
- metadata.gz: 94c3185a2170a979aaa6434b5f36e45e9e73fc331aa42ede507ad559b2dc4abee70f7b8c77b8349a6a7449bd17e15f8ea1a47f6356a7a577829342623c09f84e
7
- data.tar.gz: 0d03a222870a2a66184498a04681e0b90252602d580e46b90208b10a76528543854ba4a5c6113fe623fead0dc95d49cf0e052cdc20466101ece87223c85e4134
6
+ metadata.gz: 8617f84687052ac6ed4b2413bbb4418fc3a332395fd647902379e75e4d22857d43a49edb30b8dbbb8aad7fe067412ad6c397fe0a05fd73ab5b3d3ea6866a7c55
7
+ data.tar.gz: 6c60464867cfb5fe8baf9e86d983a5392075a92f278f30499c68e1a1dec58b3be53991b7725b31de0c445f4afd448ca0056aa1841ecce79b2daa857c5cb43f6f
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
36
36
  s.add_runtime_dependency("addressable", "~> 2.4")
37
37
  s.add_runtime_dependency("amazing_print", "~> 1.2")
38
38
  s.add_runtime_dependency("colorator", "~> 1.0")
39
+ s.add_runtime_dependency("csv", "~> 3.2")
39
40
  s.add_runtime_dependency("erubi", "~> 1.9")
40
41
  s.add_runtime_dependency("faraday", "~> 2.0")
41
42
  s.add_runtime_dependency("faraday-follow_redirects", "~> 0.3")
@@ -66,9 +66,15 @@ module Bridgetown
66
66
  type: :boolean,
67
67
  desc: "Print verbose output."
68
68
 
69
- def console
69
+ def console # rubocop:disable Metrics
70
70
  require "irb"
71
- require "irb/ext/save-history"
71
+ new_history_behavior = false
72
+ begin
73
+ require "irb/ext/save-history"
74
+ rescue LoadError
75
+ # Code path for Ruby 3.3+
76
+ new_history_behavior = true
77
+ end
72
78
  require "amazing_print" unless options[:"bypass-ap"]
73
79
 
74
80
  Bridgetown.logger.adjust_verbosity(options)
@@ -96,6 +102,7 @@ module Bridgetown
96
102
  irb = IRB::Irb.new(workspace)
97
103
  IRB.conf[:IRB_RC]&.call(irb.context)
98
104
  IRB.conf[:MAIN_CONTEXT] = irb.context
105
+ irb.context.io.load_history if new_history_behavior
99
106
  Bridgetown.logger.info "Console:", "Your site is now available as #{"site".cyan}"
100
107
  Bridgetown.logger.info "",
101
108
  "You can also access #{"collections".cyan} or perform a " \
@@ -117,6 +124,7 @@ module Bridgetown
117
124
  end
118
125
  ensure
119
126
  IRB.conf[:AT_EXIT].each(&:call)
127
+ irb.context.io.save_history if new_history_behavior
120
128
  end
121
129
  end
122
130
  end
@@ -128,14 +128,19 @@ const importPostCssPlugin = (options, configuration) => ({
128
128
  })
129
129
 
130
130
  // Process the file through PostCSS
131
- const result = await postcss([importPlugin, ...options.plugins]).process(css, {
132
- map: true,
133
- ...options.options,
134
- from: args.path,
135
- });
136
-
131
+ let outputCSS = ""
132
+ try {
133
+ const result = await postcss([importPlugin, ...options.plugins]).process(css, {
134
+ map: true,
135
+ ...options.options,
136
+ from: args.path,
137
+ })
138
+ outputCSS = result.css
139
+ } catch(err) {
140
+ console.error(`\nerror: "${err.reason}" while processing CSS file:\n${err.file}:${err.line}:${err.column}\n`)
141
+ }
137
142
  return {
138
- contents: result.css,
143
+ contents: outputCSS,
139
144
  loader: "css",
140
145
  watchFiles: [args.path, ...additionalFilePaths],
141
146
  }
@@ -5,5 +5,5 @@ copy_file "jsconfig.json"
5
5
  say "🎉 esbuild configuration updated successfully!"
6
6
  say "You may need to add `$styles/` to the front of your main CSS imports."
7
7
  say "See https://www.bridgetownrb.com/docs/frontend-assets#esbuild-setup for details."
8
- say "⚠️ Don't forget to update the esbuild version in your `package.json` file to \"^0.17.19\""
8
+ say "⚠️ Don't forget to update the esbuild version in your `package.json` file to \"^0.19.2\""
9
9
  say "and run `yarn install`!"
@@ -13,12 +13,24 @@ module Bridgetown
13
13
  end
14
14
 
15
15
  matching_resources = result_set.select do |item|
16
- item.relative_path.parent == relative_path.parent && item.data.slug == data.slug
16
+ matches_resource?(item)
17
17
  end
18
18
 
19
19
  matching_resources.sort_by do |item|
20
20
  site.config.available_locales.index item.data.locale
21
21
  end
22
22
  end
23
+
24
+ def matches_resource?(item)
25
+ if item.relative_path.is_a?(String)
26
+ item.localeless_path == localeless_path
27
+ else
28
+ item.relative_path.parent == relative_path.parent
29
+ end && item.data.slug == data.slug
30
+ end
31
+
32
+ def localeless_path
33
+ relative_path.gsub(%r{\A#{data.locale}/}, "")
34
+ end
23
35
  end
24
36
  end
@@ -41,6 +41,7 @@ module Bridgetown
41
41
  category: { key: "categories", title: "Category" }, tag: { key: "tags", title: "Tag" },
42
42
  },
43
43
  "autoload_paths" => [],
44
+ "inflector" => nil,
44
45
  "eager_load_paths" => [],
45
46
  "autoloader_collapsed_paths" => [],
46
47
  "additional_watch_paths" => [],
@@ -3,12 +3,11 @@
3
3
 
4
4
  echo "Updating netlify.toml with references to our built files"
5
5
 
6
- CSS_PATH=`find output/_bridgetown/static/css/*.css -type f | sed -e 's,output\/,/,g'`
7
- JS_PATH=`find output/_bridgetown/static/js/*.js -type f | sed -e 's,output\/,/,g'`
6
+ CSS_PATH=`find output/_bridgetown/static/*.css -type f | sed -e 's,output\/,/,g'`
7
+ JS_PATH=`find output/_bridgetown/static/*.js -type f | sed -e 's,output\/,/,g'`
8
8
 
9
9
  echo "CSS Path: ${CSS_PATH}"
10
10
  echo "JS Path: ${JS_PATH}"
11
11
 
12
12
  sed -i s,CSS_PATH,${CSS_PATH},g netlify.toml
13
13
  sed -i s,JS_PATH,${JS_PATH},g netlify.toml
14
- sed -i s,NETLIFY_IMAGES_CDN_DOMAIN,${NETLIFY_IMAGES_CDN_DOMAIN},g netlify.toml
@@ -6,18 +6,8 @@
6
6
  NODE_ENV = "development"
7
7
  BRIDGETOWN_ENV = "production"
8
8
 
9
- [build.processing]
10
- skip_processing = false
11
- [build.processing.css]
12
- bundle = false
13
- minify = true
14
- [build.processing.js]
15
- bundle = false
16
- minify = true
17
9
  [build.processing.html]
18
10
  pretty_urls = true
19
- [build.processing.images]
20
- compress = true
21
11
 
22
12
  [[headers]]
23
13
  for = "*"
@@ -34,8 +24,7 @@
34
24
  [headers.values]
35
25
  Link = [
36
26
  "<CSS_PATH>; rel=preload; as=style",
37
- "<JS_PATH>; rel=preload; as=script",
38
- "<https://NETLIFY_IMAGES_CDN_DOMAIN>; rel=preconnect"
27
+ "<JS_PATH>; rel=preload; as=script"
39
28
  ]
40
29
 
41
30
  [[headers]]
@@ -202,7 +202,8 @@ module Bridgetown
202
202
  return self[key] if key?(key)
203
203
  raise KeyError, %(key not found: "#{key}") if default.nil? && block.nil?
204
204
  return yield(key) unless block.nil?
205
- return default unless default.nil?
205
+
206
+ default unless default.nil?
206
207
  end
207
208
 
208
209
  private
@@ -3,8 +3,34 @@
3
3
  module Bridgetown
4
4
  module Filters
5
5
  module LocalizationFilters
6
- def l(input)
7
- I18n.l(input.to_s)
6
+ def l(input, format = nil, locale = nil)
7
+ date = Liquid::Utils.to_date(input)
8
+ return input if date.nil?
9
+
10
+ format = maybe_symbolized(format, date)
11
+ locale ||= maybe_locale(format)
12
+ format = nil if locale == format
13
+
14
+ I18n.l(date, format: format, locale: locale)
15
+ end
16
+
17
+ private
18
+
19
+ def maybe_locale(format)
20
+ return if format.nil?
21
+
22
+ Bridgetown::Current.site.config.available_locales.include?(format.to_sym) ? format : nil
23
+ end
24
+
25
+ def maybe_symbolized(format, object)
26
+ return if format.nil?
27
+
28
+ type = type_of(object)
29
+ I18n.t("#{type}.formats").key?(format.to_sym) ? format.to_sym : format
30
+ end
31
+
32
+ def type_of(object)
33
+ object.respond_to?(:sec) ? "time" : "date"
8
34
  end
9
35
  end
10
36
  end
@@ -3,8 +3,21 @@
3
3
  module Bridgetown
4
4
  module Filters
5
5
  module TranslationFilters
6
- def t(input)
7
- I18n.t(input.to_s)
6
+ def t(input, options = "")
7
+ options = string_to_hash(options)
8
+ locale = options.delete(:locale)
9
+ count = options.delete(:count)
10
+ options[:count] = count.to_i unless count.nil?
11
+
12
+ I18n.t(input.to_s, locale: locale, **options)
13
+ rescue ArgumentError
14
+ input
15
+ end
16
+
17
+ private
18
+
19
+ def string_to_hash(options)
20
+ options.split(",").to_h { |e| e.split(":").map(&:strip) }.symbolize_keys
8
21
  end
9
22
  end
10
23
  end
@@ -7,6 +7,8 @@ module Bridgetown
7
7
  include URLFilters
8
8
  include GroupingFilters
9
9
  include DateFilters
10
+ include LocalizationFilters
11
+ include TranslationFilters
10
12
  include ConditionHelpers
11
13
 
12
14
  # Convert a Markdown string into HTML output.
@@ -102,7 +104,7 @@ module Bridgetown
102
104
  def obfuscate_link(input, prefix = "mailto")
103
105
  link = "<a href=\"#{prefix}:#{input}\">#{input}</a>"
104
106
  script = "<script type=\"text/javascript\">document.currentScript.insertAdjacentHTML('"
105
- script += "beforebegin', '#{rot47(link).gsub(%r!\\!, '\\\\\\')}'.replace(/[!-~]/g," # rubocop:disable Style/StringLiteralsInInterpolation, Style/RedundantRegexpArgument
107
+ script += "beforebegin', '#{rot47(link).gsub("\\", '\\\\\\')}'.replace(/[!-~]/g," # rubocop:disable Style/StringLiteralsInInterpolation
106
108
  script += "function(c){{var j=c.charCodeAt(0);if((j>=33)&&(j<=126)){"
107
109
  script += "return String.fromCharCode(33+((j+ 14)%94));}"
108
110
  script += "else{return String.fromCharCode(j);}}}));</script>"
@@ -433,6 +435,3 @@ end
433
435
  Liquid::Template.register_filter(
434
436
  Bridgetown::Filters
435
437
  )
436
- Liquid::Template.register_filter(
437
- Bridgetown::Filters::TranslationFilters
438
- )
@@ -168,7 +168,7 @@ module Bridgetown
168
168
  #
169
169
  # @return [String]
170
170
  def output_ext
171
- @output_ext ||= (permalink_ext || converter_output_ext)
171
+ @output_ext ||= permalink_ext || converter_output_ext
172
172
  end
173
173
 
174
174
  def permalink_ext
@@ -144,9 +144,10 @@ module Bridgetown
144
144
  end
145
145
 
146
146
  def process_prototype_page_data(collection, search_term, term)
147
+ pagination_key = prototyped_page.data.key?("paginate") ? "paginate" : "pagination"
147
148
  # Fill in pagination details to be handled later by Bridgetown::Paginate
148
149
  data["pagination"] = Bridgetown::Utils.deep_merge_hashes(
149
- prototyped_page.data["pagination"].to_h, {
150
+ prototyped_page.data[pagination_key].to_h, {
150
151
  "enabled" => true,
151
152
  "collection" => collection,
152
153
  "where_query" => [search_term, term],
@@ -97,10 +97,11 @@ module Bridgetown
97
97
  # @param options [Hash] key-value pairs of HTML attributes to add to the tag
98
98
  # @return [String] the anchor tag HTML
99
99
  # @raise [ArgumentError] if the file cannot be found
100
- def link_to(text, relative_path = nil, options = {})
101
- if block_given?
100
+ def link_to(text, relative_path = nil, options = {}, &block)
101
+ if block.present?
102
+ options = relative_path || {}
102
103
  relative_path = text
103
- text = yield
104
+ text = view.respond_to?(:capture) ? view.capture(&block) : yield
104
105
  elsif relative_path.nil?
105
106
  raise ArgumentError, "You must provide a relative path"
106
107
  end
@@ -2,18 +2,12 @@
2
2
 
3
3
  module Bridgetown
4
4
  class LogWriter < ::Logger
5
- def initialize # rubocop:disable Lint/MissingSuper
6
- @progname = nil
7
- @level = DEBUG
8
- @default_formatter = Formatter.new
9
- @logdev = $stdout
10
- @formatter = proc do |_, _, _, msg|
11
- msg.to_s
12
- end
5
+ def initialize
6
+ super($stdout, formatter: proc { |_, _, _, msg| msg.to_s })
13
7
  end
14
8
 
15
9
  def enable_prefix
16
- @formatter = proc do |_, _, _, msg|
10
+ self.formatter = proc do |_, _, _, msg|
17
11
  "\e[32m[Bridgetown]\e[0m #{msg}"
18
12
  end
19
13
  end
@@ -129,6 +129,24 @@ module Bridgetown
129
129
  "Required #{required_gems.map(&:name).join(", ")}")
130
130
  end
131
131
 
132
+ def self.package_manager
133
+ @package_manager ||= if File.exist?("yarn.lock")
134
+ "yarn"
135
+ elsif File.exist?("package-lock.json")
136
+ "npm"
137
+ elsif File.exist?("pnpm-lock.yaml")
138
+ "pnpm"
139
+ else
140
+ ""
141
+ end
142
+ end
143
+
144
+ def self.package_manager_install_command
145
+ package_manager == "npm" ? "install" : "add"
146
+ end
147
+
148
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
149
+
132
150
  # Iterates through loaded gems and finds yard-add gemspec metadata.
133
151
  # If that exact package hasn't been installed, execute yarn add
134
152
  #
@@ -146,18 +164,22 @@ module Bridgetown
146
164
  required_gems
147
165
  end
148
166
 
167
+ # all right, time to install the package
149
168
  gems_to_search.each do |loaded_gem|
150
169
  yarn_dependency = find_yarn_dependency(loaded_gem)
151
170
  next unless add_yarn_dependency?(yarn_dependency, package_json)
152
171
 
153
- # all right, time to install the package
154
- cmd = "yarn add #{yarn_dependency.join("@")}"
172
+ next if package_manager.empty?
173
+
174
+ cmd = "#{package_manager} #{package_manager_install_command} #{yarn_dependency.join("@")}"
155
175
  system cmd
156
176
  end
157
177
 
158
178
  gems_to_search
159
179
  end
160
180
 
181
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
182
+
161
183
  def self.find_yarn_dependency(loaded_gem)
162
184
  yarn_dependency = loaded_gem.to_spec&.metadata&.dig("yarn-add")&.match(YARN_DEPENDENCY_REGEXP)
163
185
  return nil if yarn_dependency&.length != 3 || yarn_dependency[2] == ""
@@ -48,7 +48,7 @@ module Bridgetown
48
48
  end
49
49
 
50
50
  # @param root [String] root of Bridgetown site, defaults to config value
51
- def self.autoload_server_folder( # rubocop:todo Metrics/MethodLength
51
+ def self.autoload_server_folder( # rubocop:todo Metrics
52
52
  root: Bridgetown::Current.preloaded_configuration.root_dir
53
53
  )
54
54
  server_folder = File.join(root, "server")
@@ -62,7 +62,18 @@ module Bridgetown
62
62
  loader.do_not_eager_load(File.join(server_folder, "roda_app.rb"))
63
63
 
64
64
  unless ENV["BRIDGETOWN_ENV"] == "production"
65
- Listen.to(server_folder) do |_modified, _added, _removed|
65
+ Listen.to(server_folder) do |modified, added, removed|
66
+ c = modified + added + removed
67
+ n = c.length
68
+
69
+ Bridgetown.logger.info(
70
+ "Reloading…",
71
+ "#{n} file#{"s" if n > 1} changed at #{Time.now.strftime("%Y-%m-%d %H:%M:%S")}"
72
+ )
73
+ c.each do |path|
74
+ Bridgetown.logger.info "", "- #{path["#{File.dirname(server_folder)}/".length..]}"
75
+ end
76
+
66
77
  loader.reload
67
78
  loader.eager_load
68
79
  Bridgetown::Rack::Routes.reload_subclasses
@@ -349,7 +349,7 @@ module Bridgetown
349
349
  end
350
350
 
351
351
  def import_taxonomies_from_data
352
- taxonomies.each do |_label, metadata|
352
+ taxonomies.each_value do |metadata|
353
353
  Array(data[metadata.type.key]).each do |term|
354
354
  metadata.terms << TaxonomyTerm.new(
355
355
  resource: self, label: term, type: metadata.type
@@ -24,7 +24,7 @@ module Bridgetown
24
24
  def relation_types
25
25
  @relation_types ||= begin
26
26
  types = []
27
- relation_schema&.each do |_relation_type, collections|
27
+ relation_schema&.each_value do |collections|
28
28
  types << collections
29
29
  types << Array(collections).map { |item| ActiveSupport::Inflector.pluralize(item) }
30
30
  end
@@ -3,9 +3,11 @@
3
3
  module Bridgetown
4
4
  module Tags
5
5
  class LocalizationTag < Liquid::Tag
6
+ include Bridgetown::Filters::LocalizationFilters
7
+
6
8
  def render(_context)
7
- key = @markup.strip
8
- I18n.l(key)
9
+ input, format, locale = @markup.split.map(&:strip)
10
+ l(input, format, locale)
9
11
  end
10
12
  end
11
13
  end
@@ -3,9 +3,13 @@
3
3
  module Bridgetown
4
4
  module Tags
5
5
  class TranslationTag < Liquid::Tag
6
+ include Bridgetown::Filters::TranslationFilters
7
+
6
8
  def render(_context)
7
- key = @markup.strip
8
- I18n.t(key)
9
+ input, options = @markup.split.map(&:strip)
10
+ options ||= ""
11
+
12
+ t(input, options).to_s
9
13
  end
10
14
  end
11
15
  end
@@ -73,3 +73,14 @@ task :environment do # rubocop:todo Metrics/BlockLength
73
73
  end
74
74
  end
75
75
  end
76
+
77
+ # rubocop:disable Bridgetown/NoPutsAllowed
78
+ desc "Provides a time zone-aware date string you can use in front matter"
79
+ task date: :environment do
80
+ run_initializers
81
+
82
+ puts "🗓️ Today's date & time in your site's timezone (#{ENV.fetch("TZ", "NOT SET")}):"
83
+ puts
84
+ puts "➡️ #{Time.now.strftime("%a, %d %b %Y %T %z")}"
85
+ end
86
+ # rubocop:enable Bridgetown/NoPutsAllowed
@@ -20,9 +20,7 @@ module Bridgetown
20
20
  def unload_loaders
21
21
  return if @loaders.keys.empty?
22
22
 
23
- @loaders.each do |_path, loader|
24
- loader.unload
25
- end
23
+ @loaders.each_value(&:unload)
26
24
  @loaders = {}
27
25
  end
28
26
 
@@ -47,7 +45,7 @@ module Bridgetown
47
45
  end
48
46
 
49
47
  def setup_loaders(autoload_paths = []) # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
50
- (autoload_paths.presence || config.autoload_paths).each do |load_path|
48
+ (autoload_paths.presence || config.autoload_paths).each do |load_path| # rubocop:todo Metrics/BlockLength
51
49
  if @loaders.key?(load_path)
52
50
  raise "Zeitwerk loader already added for `#{load_path}'. Please check your config"
53
51
  end
@@ -55,6 +53,7 @@ module Bridgetown
55
53
  next unless Dir.exist? load_path
56
54
 
57
55
  loader = Zeitwerk::Loader.new
56
+ loader.inflector = config.inflector if config.inflector
58
57
  begin
59
58
  loader.push_dir(load_path)
60
59
  rescue Zeitwerk::Error
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "1.3.0"
4
+ VERSION = "1.3.2"
5
5
  CODE_NAME = "Kelly Butte"
6
6
  end
@@ -6,12 +6,23 @@ module Bridgetown
6
6
 
7
7
  class << self
8
8
  def load_file(filename, **kwargs)
9
- kwargs = { permitted_classes: PERMITTED_CLASSES }.merge(kwargs)
10
- YAML.safe_load_file(filename, **kwargs)
9
+ YAML.safe_load_file filename, **merge_permitted_classes(kwargs)
11
10
  end
12
11
 
13
- def load(yaml)
14
- YAML.safe_load yaml, permitted_classes: PERMITTED_CLASSES
12
+ def load(yaml, **kwargs)
13
+ YAML.safe_load yaml, **merge_permitted_classes(kwargs)
14
+ end
15
+
16
+ private
17
+
18
+ def merge_permitted_classes(kwargs)
19
+ if kwargs.key?(:permitted_classes)
20
+ kwargs[:permitted_classes] |= PERMITTED_CLASSES
21
+ else
22
+ kwargs[:permitted_classes] = PERMITTED_CLASSES
23
+ end
24
+
25
+ kwargs
15
26
  end
16
27
  end
17
28
  end
@@ -77,7 +77,6 @@ module Bridgetown
77
77
  autoload :Cleaner, "bridgetown-core/cleaner"
78
78
  autoload :Collection, "bridgetown-core/collection"
79
79
  autoload :Component, "bridgetown-core/component"
80
- autoload :Configuration, "bridgetown-core/configuration"
81
80
  autoload :DefaultsReader, "bridgetown-core/readers/defaults_reader"
82
81
  autoload :Deprecator, "bridgetown-core/deprecator"
83
82
  autoload :EntryFilter, "bridgetown-core/entry_filter"
@@ -119,6 +118,7 @@ module Bridgetown
119
118
  require "bridgetown-core/liquid_extensions"
120
119
  require "bridgetown-core/filters"
121
120
 
121
+ require "bridgetown-core/configuration"
122
122
  require "bridgetown-core/drops/drop"
123
123
  require "bridgetown-core/drops/resource_drop"
124
124
  require_all "bridgetown-core/converters"
@@ -10,6 +10,26 @@ Bridgetown.configure do |config|
10
10
  # config.autoload_paths << "models"
11
11
  #
12
12
 
13
+ # You can configure the inflector used by Zeitwerk. In v2.0,
14
+ # ActiveSupport::Inflector will become the default.
15
+ #
16
+ # config.inflector = ActiveSupport::Inflector
17
+ #
18
+ # Add new inflection rules using the following format. Inflections
19
+ # are locale specific, and you may define rules for as many different
20
+ # locales as you wish. All of these examples are active by default:
21
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
22
+ # inflect.plural /^(ox)$/i, "\\1en"
23
+ # inflect.singular /^(ox)en/i, "\\1"
24
+ # inflect.irregular "person", "people"
25
+ # inflect.uncountable %w( fish sheep )
26
+ # end
27
+ #
28
+ # These inflection rules are supported but not enabled by default:
29
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
30
+ # inflect.acronym "RESTful"
31
+ # end
32
+
13
33
  # You can use `init` to initialize various Bridgetown features or plugin gems.
14
34
  # For example, you can use the Dotenv gem to load environment variables from
15
35
  # `.env`. Just `bundle add dotenv` and then uncomment this:
@@ -13,17 +13,17 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  <%- if frontend_bundling_option == "webpack" -%>
16
- "css-loader": "^6.7.1",
16
+ "css-loader": "^6.8.1",
17
17
  <%- end -%>
18
- "esbuild": "^0.17.19",
18
+ "esbuild": "^0.19.2",
19
19
  <%- if frontend_bundling_option == "webpack" -%>
20
- "esbuild-loader": "^2.18.0",
21
- "mini-css-extract-plugin": "^2.6.0",
20
+ "esbuild-loader": "^4.0.2",
21
+ "mini-css-extract-plugin": "^2.7.6",
22
22
  <%- else -%>
23
- "glob": "^10.2.6",
23
+ "glob": "^10.3.3",
24
24
  <%- end -%>
25
25
  <%- unless disable_postcss? -%>
26
- "postcss": "^8.4.23",
26
+ "postcss": "^8.4.29",
27
27
  "postcss-flexbugs-fixes": "^5.0.2",
28
28
  <%- if frontend_bundling_option == "esbuild" -%>
29
29
  "postcss-import": "^15.1.0",
@@ -31,20 +31,20 @@
31
31
  <%- else -%>
32
32
  "postcss-loader": "^6.2.1",
33
33
  <%- end -%>
34
- "postcss-preset-env": "^8.4.1",
34
+ "postcss-preset-env": "^9.1.2",
35
35
  <%- if frontend_bundling_option == "esbuild" -%>
36
36
  "read-cache": "^1.0.0"<%= "," unless postcss_option %>
37
37
  <%- end -%>
38
38
  <%- end -%>
39
39
  <%- unless postcss_option -%>
40
- "sass": "^1.62.1",
41
- "sass-loader": "^12.6.0"<%= "," if frontend_bundling_option == "webpack" %>
40
+ "sass": "^1.66.1",
41
+ "sass-loader": "^13.3.2"<%= "," if frontend_bundling_option == "webpack" %>
42
42
  <%- end -%>
43
43
  <%- if frontend_bundling_option == "webpack" -%>
44
- "webpack": "^5.72.0",
45
- "webpack-cli": "^4.9.2",
44
+ "webpack": "^5.88.2",
45
+ "webpack-cli": "^5.1.4",
46
46
  "webpack-manifest-plugin": "^5.0.0",
47
- "webpack-merge": "^5.8.0"
47
+ "webpack-merge": "^5.9.0"
48
48
  <%- end -%>
49
49
  }
50
50
  }
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.3.0
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2024-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '1.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: csv
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '3.2'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '3.2'
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: erubi
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -578,7 +592,7 @@ metadata:
578
592
  changelog_uri: https://github.com/bridgetownrb/bridgetown/releases
579
593
  homepage_uri: https://www.bridgetownrb.com
580
594
  rubygems_mfa_required: 'true'
581
- post_install_message:
595
+ post_install_message:
582
596
  rdoc_options:
583
597
  - "--charset=UTF-8"
584
598
  require_paths:
@@ -594,8 +608,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
594
608
  - !ruby/object:Gem::Version
595
609
  version: '0'
596
610
  requirements: []
597
- rubygems_version: 3.1.4
598
- signing_key:
611
+ rubygems_version: 3.2.33
612
+ signing_key:
599
613
  specification_version: 4
600
614
  summary: A next-generation, progressive site generator & fullstack framework, powered
601
615
  by Ruby