Replace hooks

remove_hooks
Thomas Reynolds 2015-05-02 19:24:18 -07:00
parent b9f0330869
commit 86bbcb7676
6 changed files with 37 additions and 56 deletions

View File

@ -9,9 +9,6 @@ require 'i18n'
require 'active_support/json'
require 'active_support/core_ext/integer/inflections'
# Simple callback library
require 'hooks'
# Our custom logger
require 'middleman-core/logger'
@ -21,6 +18,7 @@ require 'middleman-core/sitemap/store'
require 'middleman-core/configuration'
require 'middleman-core/callback_manager'
require 'middleman-core/extension_manager'
require 'middleman-core/core_extensions'
@ -56,31 +54,6 @@ module Middleman
end
end
# Uses callbacks
include Hooks
include Hooks::InstanceHooks
define_hook :initialized
define_hook :after_configuration
define_hook :before_configuration
# Before request hook
define_hook :before
# Ready (all loading and parsing of extensions complete) hook
define_hook :ready
# Runs before the build is started
define_hook :before_build
# Runs after the build is finished
define_hook :after_build
define_hook :before_shutdown
define_hook :before_render
define_hook :after_render
# Which host preview should start on.
# @return [Fixnum]
config.define_setting :host, '0.0.0.0', 'The preview server host'
@ -209,6 +182,20 @@ module Middleman
# Search the root of the project for required files
$LOAD_PATH.unshift(root) unless $LOAD_PATH.include?(root)
@callbacks = ::Middleman::CallbackManager.new
@callbacks.install_methods!(self, [
:initialized,
:after_configuration,
:before_configuration,
:before,
:ready,
:before_build,
:after_build,
:before_shutdown,
:before_render,
:after_render
])
@middleware = Set.new
@mappings = Set.new
@ -244,9 +231,9 @@ module Middleman
@extensions.auto_activate(:before_configuration)
run_hook :initialized
execute_callbacks :initialized
run_hook :before_configuration
execute_callbacks :before_configuration
evaluate_configuration
@ -270,10 +257,10 @@ module Middleman
@extensions.activate_all
run_hook :after_configuration
execute_callbacks :after_configuration
config_context.execute_callbacks(:after_configuration)
run_hook :ready
execute_callbacks :ready
@config_context.execute_callbacks(:ready)
end
@ -365,7 +352,7 @@ module Middleman
end
def shutdown!
run_hook :before_shutdown
execute_callbacks :before_shutdown
end
# Work around this bug: http://bugs.ruby-lang.org/issues/4521

View File

@ -49,7 +49,7 @@ module Middleman
@has_error = false
@events = {}
@app.run_hook :before_build, self
@app.execute_callbacks :before_build, [self]
queue_current_paths if @cleaning
prerender_css
@ -61,7 +61,7 @@ module Middleman
::Middleman::Profiling.report('build')
# Run hooks
@app.run_hook :after_build, self
@app.execute_callbacks :after_build, [self]
@app.config_context.execute_callbacks(:after_build, [self])
!@has_error

View File

@ -25,8 +25,10 @@ module Middleman
end
install_target.define_singleton_method(:execute_callbacks) do |keys, *args|
manager.execute(keys, args, self)
manager.execute(keys, args[0], self)
end
install_target.define_singleton_method(:callbacks_for, &method(:callbacks_for))
end
Contract Or[Symbol, ArrayOf[Symbol]], Proc => Any
@ -40,10 +42,13 @@ module Middleman
Contract Or[Symbol, ArrayOf[Symbol]], Maybe[ArrayOf[Any]], Maybe[RespondTo[:instance_exec]] => Any
def execute(keys, args=[], scope=self)
immutable_keys = keys.is_a?(Symbol) ? keys : ::Hamster::Vector.new(keys)
callbacks_for(keys).each { |b| scope.instance_exec(*args, &b) }
end
callbacks = @callbacks.get(immutable_keys)
callbacks && callbacks.each { |b| scope.instance_exec(*args, &b) }
Contract Or[Symbol, ArrayOf[Symbol]] => ::Hamster::Set
def callbacks_for(keys)
immutable_keys = keys.is_a?(Symbol) ? keys : ::Hamster::Vector.new(keys)
@callbacks.get(immutable_keys) || ::Hamster.set
end
end
end

View File

@ -59,14 +59,10 @@ module Middleman
options = options.deep_merge(options[:renderer_options]) if options[:renderer_options]
template_class = ::Tilt[path]
# Allow hooks to manipulate the template before render
@app.class.callbacks_for_hook(:before_render).each do |callback|
newbody = if callback.respond_to?(:call)
callback.call(body, path, locs, template_class)
elsif callback.respond_to?(:evaluate)
callback.evaluate(self, body, path, locs, template_class)
end
body = newbody if newbody # Allow the callback to return nil to skip it
content = @app.callbacks_for(:before_render).reduce(content) do |sum, callback|
callback.call(content, path, locs, template_class) || sum
end
# Read compiled template from disk or cache
@ -80,14 +76,8 @@ module Middleman
end
# Allow hooks to manipulate the result after render
@app.class.callbacks_for_hook(:after_render).each do |callback|
# Uber::Options::Value doesn't respond to call
newcontent = if callback.respond_to?(:call)
callback.call(content, path, locs, template_class)
elsif callback.respond_to?(:evaluate)
callback.evaluate(self, content, path, locs, template_class)
end
content = newcontent if newcontent # Allow the callback to return nil to skip it
content = @app.callbacks_for(:after_render).reduce(content) do |sum, callback|
callback.call(content, path, locs, template_class) || sum
end
output = ::ActiveSupport::SafeBuffer.new ''

View File

@ -85,7 +85,7 @@ module Middleman
full_request_path = File.join(env['SCRIPT_NAME'], request_path) # Path including rack mount
# Run before callbacks
@middleman.run_hook :before
@middleman.execute_callbacks :before
# Get the resource object for this path
resource = @middleman.sitemap.find_resource_by_destination_path(request_path.gsub(' ', '%20'))

View File

@ -24,7 +24,6 @@ Gem::Specification.new do |s|
s.add_dependency('rack', ['>= 1.4.5', '< 2.0'])
s.add_dependency('tilt', ['~> 1.4.1'])
s.add_dependency('erubis')
s.add_dependency('hooks', ['~> 0.3'])
# Helpers
s.add_dependency('activesupport', ['~> 4.2.0'])