module Middleman
Top-level Middleman
namespace
Core Middleman
Class
CLI Module
Namespace extensions module
Load helpers in helpers/
API for watching file change events
Rendering extension rubocop:disable UnderscorePrefixedVariableName
Routing extension
Support rack/showexceptions during development
rubocop:disable GlobalVars
ERb renderer
Core Sitemap
Extensions
Constants
- EXTENSION_FILE
Where to look in gems for extensions to auto-register
- VERSION
Current Version @return [String]
Public Class Methods
Automatically load extensions from available RubyGems which contain the EXTENSION_FILE
@private
# File lib/middleman-core/extensions.rb, line 58 def load_extensions_in_path require 'rubygems' extensions = rubygems_latest_specs.select do |spec| spec_has_file?(spec, EXTENSION_FILE) end extensions.each do |spec| require spec.name end end
Recursive method to find config.rb
# File lib/middleman-core/load_paths.rb, line 47 def locate_root(cwd=Pathname.new(Dir.pwd)) return cwd.to_s if (cwd + 'config.rb').exist? return false if cwd.root? locate_root(cwd.parent) end
Backwards compatible means of finding all the latest gemspecs available on the system
@private @return [Array] Array of latest Gem::Specification
# File lib/middleman-core/extensions.rb, line 75 def rubygems_latest_specs # If newer Rubygems if ::Gem::Specification.respond_to? :latest_specs ::Gem::Specification.latest_specs(true) else ::Gem.source_index.latest_specs end end
# File lib/middleman-core/load_paths.rb, line 6 def setup_load_paths @_is_setup ||= begin # Only look for config.rb if MM_ROOT isn't set if !ENV['MM_ROOT'] && found_path = locate_root ENV['MM_ROOT'] = found_path end is_bundler_setup = false # If we've found the root, try to setup Bundler if ENV['MM_ROOT'] root_gemfile = File.expand_path('Gemfile', ENV['MM_ROOT']) ENV['BUNDLE_GEMFILE'] ||= root_gemfile unless File.exist?(ENV['BUNDLE_GEMFILE']) git_gemfile = Pathname.new(__FILE__).expand_path.parent.parent.parent + 'Gemfile' ENV['BUNDLE_GEMFILE'] = git_gemfile.to_s end if File.exist?(ENV['BUNDLE_GEMFILE']) is_bundler_setup = true require 'bundler/setup' end end # Automatically discover extensions in RubyGems require 'middleman-core/extensions' if is_bundler_setup Bundler.require else ::Middleman.load_extensions_in_path end true end end
Where a given Gem::Specification has a specific file. Used to discover extensions.
@private @param [Gem::Specification] spec @param [String] path Path to look for @return [Boolean] Whether the file exists
# File lib/middleman-core/extensions.rb, line 91 def spec_has_file?(spec, path) full_path = File.join(spec.full_gem_path, path) File.exist?(full_path) end