Module: Bridgetown

Defined in:
bridgetown-core/lib/bridgetown-core/site.rb,
bridgetown-core/lib/bridgetown-core/slot.rb,
bridgetown-core/lib/bridgetown-core/cache.rb,
bridgetown-core/lib/bridgetown-core/hooks.rb,
bridgetown-core/lib/bridgetown-core/utils.rb,
bridgetown-core/lib/bridgetown-core/errors.rb,
bridgetown-core/lib/bridgetown-core/layout.rb,
bridgetown-core/lib/bridgetown-core/plugin.rb,
bridgetown-core/lib/bridgetown-core/reader.rb,
bridgetown-core/lib/bridgetown-core/tags/l.rb,
bridgetown-core/lib/bridgetown-core/tags/t.rb,
bridgetown-core/lib/bridgetown-core/cleaner.rb,
bridgetown-core/lib/bridgetown-core/current.rb,
bridgetown-core/lib/bridgetown-core/filters.rb,
bridgetown-core/lib/bridgetown-core/helpers.rb,
bridgetown-core/lib/bridgetown-core/watcher.rb,
bridgetown-core/lib/bridgetown-core/tags/dsd.rb,
bridgetown-core/lib/bridgetown-core/component.rb,
bridgetown-core/lib/bridgetown-core/converter.rb,
bridgetown-core/lib/bridgetown-core/generator.rb,
bridgetown-core/lib/bridgetown-core/inflector.rb,
bridgetown-core/lib/bridgetown-core/rack/boot.rb,
bridgetown-core/lib/bridgetown-core/tags/find.rb,
bridgetown-core/lib/bridgetown-core/tags/link.rb,
bridgetown-core/lib/bridgetown-core/tags/with.rb,
bridgetown-core/lib/bridgetown-core/utils/aux.rb,
bridgetown-core/lib/bridgetown-core/collection.rb,
bridgetown-core/lib/bridgetown-core/deprecator.rb,
bridgetown-core/lib/bridgetown-core/drops/drop.rb,
bridgetown-core/lib/bridgetown-core/log_writer.rb,
bridgetown-core/lib/bridgetown-core/model/base.rb,
bridgetown-core/lib/bridgetown-core/log_adapter.rb,
bridgetown-core/lib/bridgetown-core/rack/logger.rb,
bridgetown-core/lib/bridgetown-core/rack/routes.rb,
bridgetown-core/lib/bridgetown-core/static_file.rb,
bridgetown-core/lib/bridgetown-core/yaml_parser.rb,
bridgetown-core/lib/bridgetown-core/commands/new.rb,
bridgetown-core/lib/bridgetown-core/entry_filter.rb,
bridgetown-core/lib/bridgetown-core/front_matter.rb,
bridgetown-core/lib/bridgetown-core/model/origin.rb,
bridgetown-core/lib/bridgetown-core/commands/base.rb,
bridgetown-core/lib/bridgetown-core/configuration.rb,
bridgetown-core/lib/bridgetown-core/resource/base.rb,
bridgetown-core/lib/bridgetown-core/tags/post_url.rb,
bridgetown-core/lib/bridgetown-core/commands/apply.rb,
bridgetown-core/lib/bridgetown-core/commands/build.rb,
bridgetown-core/lib/bridgetown-core/commands/clean.rb,
bridgetown-core/lib/bridgetown-core/commands/start.rb,
bridgetown-core/lib/bridgetown-core/generated_page.rb,
bridgetown-core/lib/bridgetown-core/plugin_manager.rb,
bridgetown-core/lib/bridgetown-core/tags/class_map.rb,
bridgetown-core/lib/bridgetown-core/tags/highlight.rb,
bridgetown-core/lib/bridgetown-core/commands/doctor.rb,
bridgetown-core/lib/bridgetown-core/drops/site_drop.rb,
bridgetown-core/lib/bridgetown-core/liquid_renderer.rb,
bridgetown-core/lib/bridgetown-core/tags/asset_path.rb,
bridgetown-core/lib/bridgetown-core/utils/ruby_exec.rb,
bridgetown-core/lib/bridgetown-core/commands/console.rb,
bridgetown-core/lib/bridgetown-core/commands/esbuild.rb,
bridgetown-core/lib/bridgetown-core/commands/plugins.rb,
bridgetown-core/lib/bridgetown-core/front_matter/ruby.rb,
bridgetown-core/lib/bridgetown-core/liquid_extensions.rb,
bridgetown-core/lib/bridgetown-core/model/repo_origin.rb,
bridgetown-core/lib/bridgetown-core/rack/loader_hooks.rb,
bridgetown-core/lib/bridgetown-core/commands/configure.rb,
bridgetown-core/lib/bridgetown-core/resource/relations.rb,
bridgetown-core/lib/bridgetown-core/ruby_template_view.rb,
bridgetown-core/lib/bridgetown-core/utils/require_gems.rb,
bridgetown-core/lib/bridgetown-core/converters/identity.rb,
bridgetown-core/lib/bridgetown-core/converters/markdown.rb,
bridgetown-core/lib/bridgetown-core/drops/resource_drop.rb,
bridgetown-core/lib/bridgetown-core/filters/from_liquid.rb,
bridgetown-core/lib/bridgetown-core/filters/url_filters.rb,
bridgetown-core/lib/bridgetown-core/model/plugin_origin.rb,
bridgetown-core/lib/bridgetown-core/tags/render_content.rb,
bridgetown-core/lib/bridgetown-core/concerns/localizable.rb,
bridgetown-core/lib/bridgetown-core/concerns/publishable.rb,
bridgetown-core/lib/bridgetown-core/drops/relations_drop.rb,
bridgetown-core/lib/bridgetown-core/filters/date_filters.rb,
bridgetown-core/lib/bridgetown-core/front_matter/loaders.rb,
bridgetown-core/lib/bridgetown-core/liquid_renderer/file.rb,
bridgetown-core/lib/bridgetown-core/model/builder_origin.rb,
bridgetown-core/lib/bridgetown-core/resource/destination.rb,
bridgetown-core/lib/bridgetown-core/resource/transformer.rb,
bridgetown-core/lib/bridgetown-core/drops/bridgetown_drop.rb,
bridgetown-core/lib/bridgetown-core/drops/collection_drop.rb,
bridgetown-core/lib/bridgetown-core/front_matter/defaults.rb,
bridgetown-core/lib/bridgetown-core/front_matter/importer.rb,
bridgetown-core/lib/bridgetown-core/liquid_renderer/table.rb,
bridgetown-core/lib/bridgetown-core/readers/layout_reader.rb,
bridgetown-core/lib/bridgetown-core/utils/loaders_manager.rb,
bridgetown-core/lib/bridgetown-core/commands/registrations.rb,
bridgetown-core/lib/bridgetown-core/concerns/prioritizable.rb,
bridgetown-core/lib/bridgetown-core/concerns/transformable.rb,
bridgetown-core/lib/bridgetown-core/drops/static_file_drop.rb,
bridgetown-core/lib/bridgetown-core/resource/taxonomy_term.rb,
bridgetown-core/lib/bridgetown-core/resource/taxonomy_type.rb,
bridgetown-core/lib/bridgetown-core/readers/defaults_reader.rb,
bridgetown-core/lib/bridgetown-core/tags/live_reload_dev_js.rb,
bridgetown-core/lib/bridgetown-core/converters/erb_templates.rb,
bridgetown-core/lib/bridgetown-core/filters/grouping_filters.rb,
bridgetown-core/lib/bridgetown-core/commands/concerns/actions.rb,
bridgetown-core/lib/bridgetown-core/concerns/layout_placeable.rb,
bridgetown-core/lib/bridgetown-core/converters/ruby_templates.rb,
bridgetown-core/lib/bridgetown-core/drops/generated_page_drop.rb,
bridgetown-core/lib/bridgetown-core/filters/condition_helpers.rb,
bridgetown-core/lib/bridgetown-core/front_matter/loaders/base.rb,
bridgetown-core/lib/bridgetown-core/front_matter/loaders/ruby.rb,
bridgetown-core/lib/bridgetown-core/front_matter/loaders/yaml.rb,
bridgetown-core/lib/bridgetown-core/drops/unified_payload_drop.rb,
bridgetown-core/lib/bridgetown-core/converters/liquid_templates.rb,
bridgetown-core/lib/bridgetown-core/converters/serbea_templates.rb,
bridgetown-core/lib/bridgetown-core/filters/translation_filters.rb,
bridgetown-core/lib/bridgetown-core/liquid_renderer/file_system.rb,
bridgetown-core/lib/bridgetown-core/filters/localization_filters.rb,
bridgetown-core/lib/bridgetown-core/resource/permalink_processor.rb,
bridgetown-core/lib/bridgetown-core/utils/smarty_pants_converter.rb,
bridgetown-core/lib/bridgetown-core/commands/concerns/git_helpers.rb,
bridgetown-core/lib/bridgetown-core/readers/plugin_content_reader.rb,
bridgetown-core/lib/bridgetown-core/commands/concerns/summarizable.rb,
bridgetown-core/lib/bridgetown-core/generators/prototype_generator.rb,
bridgetown-core/lib/bridgetown-core/commands/concerns/build_options.rb,
bridgetown-core/lib/bridgetown-core/concerns/intuitive_expectations.rb,
bridgetown-core/lib/bridgetown-core/configuration/configuration_dsl.rb,
bridgetown-core/lib/bridgetown-core/converters/markdown/kramdown_parser.rb,
bridgetown-core/lib/bridgetown-core/commands/concerns/configuration_overridable.rb,
bridgetown-builder/lib/bridgetown-builder.rb,
bridgetown-builder/lib/bridgetown-builder/plugin.rb,
bridgetown-builder/lib/bridgetown-builder/builder.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/http.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/hooks.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/liquid.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/helpers.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/resources.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/generators.rb,
bridgetown-builder/lib/bridgetown-builder/dsl/inspectors.rb,
bridgetown-foundation/lib/bridgetown/version.rb,
bridgetown-foundation/lib/bridgetown-foundation.rb,
bridgetown-foundation/lib/bridgetown/foundation/refine_ext/module.rb,
bridgetown-foundation/lib/bridgetown/foundation/refine_ext/object.rb,
bridgetown-foundation/lib/bridgetown/foundation/refine_ext/string.rb,
bridgetown-foundation/lib/bridgetown/foundation/refine_ext/deep_duplicatable.rb,
bridgetown-paginate/lib/bridgetown-paginate.rb,
bridgetown-paginate/lib/bridgetown-paginate/utils.rb,
bridgetown-paginate/lib/bridgetown-paginate/defaults.rb,
bridgetown-paginate/lib/bridgetown-paginate/paginator.rb,
bridgetown-paginate/lib/bridgetown-paginate/pagination_page.rb,
bridgetown-paginate/lib/bridgetown-paginate/pagination_model.rb,
bridgetown-paginate/lib/bridgetown-paginate/pagination_indexer.rb,
bridgetown-paginate/lib/bridgetown-paginate/pagination_generator.rb,
bridgetown-routes/lib/bridgetown-routes.rb,
bridgetown-routes/lib/bridgetown-routes/manifest.rb,
bridgetown-routes/lib/bridgetown-routes/code_blocks.rb,
bridgetown-routes/lib/bridgetown-routes/view_helpers.rb,
bridgetown-routes/lib/bridgetown-routes/flash_additions.rb,
bridgetown-routes/lib/bridgetown-routes/manifest_router.rb,
bridgetown-core/lib/bridgetown-core.rb

Defined Under Namespace

Modules: Builders, Commands, ConsoleMethods, Converters, Deprecator, Drops, ERBCapture, Errors, Filters, Foundation, FrontMatter, Hooks, IntuitiveExpectations, LayoutPlaceable, LiquidExtensions, Localizable, Model, Paginate, Prioritizable, Publishable, Rack, Refinements, Resource, RodaCallable, Routes, Streamlined, Tags, Transformable, Utils, Watcher Classes: Builder, Cache, Cleaner, Collection, Component, Configuration, Converter, Current, DefaultsReader, ERBEngine, ERBView, EntryFilter, GeneratedPage, Generator, Inflector, Layout, LayoutReader, LiquidRenderer, LogAdapter, LogWriter, OutputBuffer, Plugin, PluginContentReader, PluginManager, PrototypeGenerator, PrototypePage, PureRubyView, Reader, RubyTemplateView, SerbeaView, Server, Signals, Site, Slot, StaticFile, WrappedObjectWithRefinements, YAMLParser

Constant Summary collapse

VERSION =
"2.0.0.beta3"
CODE_NAME =
"(TBD!)"

Class Method Summary collapse

Class Method Details

.add_refinement(mod) ⇒ Object



66
67
68
69
# File 'bridgetown-foundation/lib/bridgetown-foundation.rb', line 66

def self.add_refinement(mod, &)
  Bridgetown::Refinements.include(mod)
  Bridgetown::WrappedObjectWithRefinements.class_eval(&)
end

.begin!Object

Set up the Bridgetown execution environment before attempting to load any plugins or gems prior to a site build



134
135
136
137
138
139
# File 'bridgetown-core/lib/bridgetown-core.rb', line 134

def begin!
  ENV["RACK_ENV"] ||= environment

  Bridgetown::Current.preloaded_configuration = Bridgetown::Configuration::Preflight.new
  Bridgetown::PluginManager.setup_bundler
end

.build_errors_pathString

When there’s a build error, error details will be logged to a file which the dev server can read and pass along to the browser.

Returns:

  • (String)

    the path to the cached errors file



367
368
369
370
# File 'bridgetown-core/lib/bridgetown-core.rb', line 367

def build_errors_path
  site_config = Bridgetown::Current.site&.config || Bridgetown::Current.preloaded_configuration
  File.join(site_config.root_dir, site_config.cache_dir, "build_errors.txt")
end

.configuration(override = {}) ⇒ Hash

Generate a Bridgetown configuration hash by merging the default options with anything in bridgetown.config.yml, and adding the given options on top.

Parameters:

  • override (Hash) (defaults to: {})
    • A an optional hash of config directives that override any options in both the defaults and the config file. See Bridgetown::Configuration::DEFAULTS for a list of option names and their defaults.

Returns:

  • (Hash)

    The final configuration hash.



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'bridgetown-core/lib/bridgetown-core.rb', line 151

def configuration(override = {})
  config = Configuration.new
  override = Configuration.new(override)
  unless override.delete("skip_config_files")
    config = config.read_config_files(config.config_files(override))
  end

  # Merge DEFAULTS < bridgetown.config.yml < override
  # @param obj [Bridgetown::Configuration]
  Configuration.from(Utils.deep_merge_hashes(config, override)).tap do |obj|
    set_timezone(obj["timezone"]) if obj["timezone"]

    # Copy "global" source manifests and initializers into this new configuration
    if Bridgetown::Current.preloaded_configuration.is_a?(Bridgetown::Configuration::Preflight)
      obj.source_manifests = Bridgetown::Current.preloaded_configuration.source_manifests

      if Bridgetown::Current.preloaded_configuration.initializers
        obj.initializers = Bridgetown::Current.preloaded_configuration.initializers
      end
    end

    Bridgetown::Current.preloaded_configuration = obj
  end
end

.configureObject



248
249
250
# File 'bridgetown-core/lib/bridgetown-core.rb', line 248

def configure(&)
  initializer(:init, &)
end

.environmentObject Also known as: env

Tells you which Bridgetown environment you are building in so you can skip tasks if you need to.



127
128
129
# File 'bridgetown-core/lib/bridgetown-core.rb', line 127

def environment
  (ENV["BRIDGETOWN_ENV"] || "development").questionable
end

.initializer(name, prepend: false, replace: false, &block) ⇒ Object

rubocop:todo Metrics



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'bridgetown-core/lib/bridgetown-core.rb', line 208

def initializer(name, prepend: false, replace: false, &block) # rubocop:todo Metrics
  unless Bridgetown::Current.preloaded_configuration
    raise "The `#{name}' initializer in #{block.source_location[0]} was called " \
          "without a preloaded configuration"
  end

  Bridgetown::Current.preloaded_configuration.initializers ||= {}

  if Bridgetown::Current.preloaded_configuration.initializers.key?(name.to_sym)
    if replace
      Bridgetown.logger.warn(
        "Initializing:",
        "The previous `#{name}' initializer was replaced by a new initializer"
      )
    else
      prev_block = Bridgetown::Current.preloaded_configuration.initializers[name.to_sym].block
      new_block = block
      block = if prepend
                proc do |*args, **kwargs|
                  new_block.(*args, **kwargs)
                  prev_block.(*args, **kwargs)
                end
              else
                proc do |*args, **kwargs|
                  prev_block.(*args, **kwargs)
                  new_block.(*args, **kwargs)
                end
              end
    end
  end

  Bridgetown::Current.preloaded_configuration.initializers[name.to_sym] =
    Bridgetown::Configuration::Initializer.new(
      name: name.to_sym,
      block:,
      completed: false
    )
end

.live_reload_pathString

This file gets touched each time there’s a new build, which then triggers live reload in the browser.

Returns:

  • (String)

    the path to the empty file being watched

See Also:



377
378
379
380
# File 'bridgetown-core/lib/bridgetown-core.rb', line 377

def live_reload_path
  site_config = Bridgetown::Current.site&.config || Bridgetown::Current.preloaded_configuration
  File.join(site_config.root_dir, site_config.cache_dir, "live_reload.txt")
end

.load_dotenv(root:) ⇒ Object

Loads ENV configuration via dotenv gem, if available

Parameters:

  • root (String)

    root of Bridgetown site



275
276
277
278
279
280
281
282
283
# File 'bridgetown-core/lib/bridgetown-core.rb', line 275

def load_dotenv(root:)
  dotenv_files = [
    File.join(root, ".env.#{Bridgetown.env}.local"),
    (File.join(root, ".env.local") unless Bridgetown.env.test?),
    File.join(root, ".env.#{Bridgetown.env}"),
    File.join(root, ".env"),
  ].compact
  Dotenv.load(*dotenv_files)
end

.load_tasksObject



259
260
261
262
263
264
265
266
267
268
269
270
# File 'bridgetown-core/lib/bridgetown-core.rb', line 259

def load_tasks
  require "bridgetown-core/commands/base"
  unless Bridgetown::Current.preloaded_configuration
    Bridgetown::Current.preloaded_configuration = Bridgetown::Configuration::Preflight.new
  end
  Bridgetown::PluginManager.setup_bundler

  if Bridgetown::Current.preloaded_configuration.is_a?(Bridgetown::Configuration::Preflight)
    Bridgetown::Current.preloaded_configuration = Bridgetown.configuration
  end
  load File.expand_path("bridgetown-core/tasks/bridgetown_tasks.rake", __dir__)
end

.loggerLogAdapter

Fetch the logger instance for this Bridgetown process.

Returns:



319
320
321
# File 'bridgetown-core/lib/bridgetown-core.rb', line 319

def logger
  @logger ||= LogAdapter.new(LogWriter.new, (ENV["BRIDGETOWN_LOG_LEVEL"] || :info).to_sym)
end

.logger=(writer) ⇒ LogAdapter

Set the log writer. New log writer must respond to the same methods as Ruby’s internal Logger.

Parameters:

  • writer (Object)

    the new Logger-compatible log transport

Returns:



329
330
331
# File 'bridgetown-core/lib/bridgetown-core.rb', line 329

def logger=(writer)
  @logger = LogAdapter.new(writer, (ENV["BRIDGETOWN_LOG_LEVEL"] || :info).to_sym)
end

.refine(*obj) ⇒ WrappedObjectWithRefinements

Call this method to wrap any object(s) in order to use Foundation’s refinements

Parameters:

  • *obj (Object)

Returns:



58
59
60
61
62
63
64
# File 'bridgetown-foundation/lib/bridgetown-foundation.rb', line 58

def self.refine(*obj)
  if obj.length == 1
    WrappedObjectWithRefinements.new(obj[0])
  else
    obj.map { WrappedObjectWithRefinements.new _1 }
  end
end

.register_commandObject

Convenience method to register a new Thor command



255
256
257
# File 'bridgetown-core/lib/bridgetown-core.rb', line 255

def register_command(&)
  Bridgetown::Commands::Registrations.register(&)
end

.reset_configuration!Bridgetown::Configuration::Preflight

Initialize a preflight configuration object, copying initializers and source manifests from a previous standard configuration if necessary. Typically only needed in test suites to reset before a new test.



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'bridgetown-core/lib/bridgetown-core.rb', line 181

def reset_configuration! # rubocop:disable Metrics/AbcSize
  if Bridgetown::Current.preloaded_configuration.nil?
    return Bridgetown::Current.preloaded_configuration =
             Bridgetown::Configuration::Preflight.new
  end

  return unless Bridgetown::Current.preloaded_configuration.is_a?(Bridgetown::Configuration)

  previous_config = Bridgetown::Current.preloaded_configuration
  new_config = Bridgetown::Configuration::Preflight.new
  new_config.initializers = previous_config.initializers
  new_config.source_manifests = previous_config.source_manifests
  if new_config.initializers
    new_config.initializers.delete(:init)
    new_config.initializers.select! do |_k, initializer|
      next false if initializer.block.source_location[0].start_with?(
        File.join(previous_config.root_dir, "config")
      )

      initializer.completed = false
      true
    end
  end

  Bridgetown::Current.preloaded_configuration = new_config
end

.sanitized_path(base_directory, questionable_path) ⇒ String

Ensures the questionable path is prefixed with the base directory and prepends the questionable path with the base directory if false.

Parameters:

  • base_directory (String)

    the directory with which to prefix the questionable path

  • questionable_path (String)

    the path we’re unsure about, and want prefixed

Returns:

  • (String)

    the sanitized path



342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# File 'bridgetown-core/lib/bridgetown-core.rb', line 342

def sanitized_path(base_directory, questionable_path)
  return base_directory if base_directory.eql?(questionable_path)

  clean_path = questionable_path.dup
  clean_path.insert(0, "/") if clean_path.start_with?("~")
  clean_path = File.expand_path(clean_path, "/")

  return clean_path if clean_path.eql?(base_directory)

  # remove any remaining extra leading slashes not stripped away by calling
  # `File.expand_path` above.
  clean_path.squeeze!("/")

  if clean_path.start_with?(base_directory.sub(%r!\z!, "/"))
    clean_path
  else
    clean_path.sub!(%r!\A\w:/!, "/")
    File.join(base_directory, clean_path)
  end
end

.set_timezone(timezone) ⇒ void

This method returns an undefined value.

Set the TZ environment variable to use the timezone specified

rubocop:disable Naming/AccessorMethodName

Parameters:

  • timezone (String)

    the IANA Time Zone



303
304
305
# File 'bridgetown-core/lib/bridgetown-core.rb', line 303

def set_timezone(timezone)
  ENV["TZ"] = timezone
end

.timezoneString

Get the current TZ environment variable

Returns:

  • (String)


310
311
312
# File 'bridgetown-core/lib/bridgetown-core.rb', line 310

def timezone
  ENV["TZ"]
end

.touch_live_reload_file(path = live_reload_path) ⇒ Object



382
383
384
385
# File 'bridgetown-core/lib/bridgetown-core.rb', line 382

def touch_live_reload_file(path = live_reload_path)
  FileUtils.mkdir_p File.dirname(path)
  FileUtils.touch path
end

.with_unbundled_envvoid

This method returns an undefined value.

Determines the correct Bundler environment block method to use and passes the block on to it.



289
290
291
292
293
294
295
# File 'bridgetown-core/lib/bridgetown-core.rb', line 289

def with_unbundled_env(&)
  if Bundler.bundler_major_version >= 2
    Bundler.method(:with_unbundled_env).call(&)
  else
    Bundler.method(:with_clean_env).call(&)
  end
end