refactor Server into a dynamically loadable class

This commit is contained in:
Thomas Reynolds 2011-07-13 00:38:04 -07:00
parent 61ef9ee3da
commit 17be87bafd
30 changed files with 300 additions and 337 deletions

View file

@ -50,22 +50,18 @@ module Middleman::CoreExtensions::Features
#
# activate MyFeatureModule
def activate(feature)
feature = feature.to_s if feature.is_a? Symbol
if feature.is_a? Symbol
feature = feature.to_s
end
if feature.is_a? String
feature = feature.camelize
feature = Middleman::Features.const_get(feature)
end
$stderr.puts "== Activating: #{feature}" if logging?
register feature
end
# Deprecated API. Please use `activate` instead.
def enable(feature_name)
$stderr.puts "Warning: Feature activation has been renamed from enable to activate"
activate(feature_name)
super(feature_name)
end
# Add a block/proc to be run after features have been setup
def after_feature_init(&block)
@ -73,6 +69,10 @@ module Middleman::CoreExtensions::Features
@run_after_features << block
end
def run_after_features
@run_after_features || []
end
# Load features before starting server
def new
# Check for and evaluate local configuration
@ -88,8 +88,14 @@ module Middleman::CoreExtensions::Features
activate ext
end
@run_after_features.each { |block| class_eval(&block) }
run_after_features.each { |block| class_eval(&block) }
if logging?
extensions.each do |ext|
$stderr.puts "== Extension: #{ext}"
end
end
super
end
end

View file

@ -42,31 +42,35 @@ module Middleman::CoreExtensions::FrontMatter
app.data_content("page", data)
end
end
def parse_front_matter(content)
yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
if content =~ yaml_regex
begin
data = YAML.load($1)
rescue => e
puts "YAML Exception: #{e.message}"
end
content = content.split(yaml_regex).last
end
data ||= {}
[data, content]
end
end
alias :included :registered
end
module ClassMethods
def parse_front_matter(content)
yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
if content =~ yaml_regex
begin
data = YAML.load($1)
rescue => e
puts "YAML Exception: #{e.message}"
end
content = content.split(yaml_regex).last
end
data ||= {}
[data, content]
Middleman::CoreExtensions::FrontMatter.parse_front_matter(content)
end
end
module YamlAware
def prepare
options, @data = Middleman::Server.parse_front_matter(@data)
options, @data = Middleman::CoreExtensions::FrontMatter.parse_front_matter(@data)
super
end
end

View file

@ -25,8 +25,9 @@ module Middleman::CoreExtensions::RackMap
builder.use ::Rack::Head
middleware.each { |c,a,b| builder.use(c, *a, &b) }
maps.each { |p,b| builder.map(p, &b) }
app = self
builder.map "/" do
run Middleman::Server.new!(*args, &bk)
run app.new!(*args, &bk)
end
builder
end