Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/lib/merb-core.rb b/lib/merb-core.rb
- index 28317f1..f9f034a 100644
- --- a/lib/merb-core.rb
- +++ b/lib/merb-core.rb
- @@ -36,7 +36,15 @@ module Merb
- module GlobalHelpers; end
- class << self
- - attr_accessor :exiting
- + attr_reader :exiting
- +
- + def exiting=(bool)
- + Extlib.exiting = bool
- + if bool && Extlib.const_defined?("Pooling") && Extlib::Pooling.scavenger
- + Extlib::Pooling.scavenger.wakeup
- + end
- + @exiting = bool
- + end
- # Merge environment settings
- # Can allow you to have a "localdev" that runs like your "development"
- diff --git a/lib/merb-core/core_ext/kernel.rb b/lib/merb-core/core_ext/kernel.rb
- index 202b877..51cdb67 100644
- --- a/lib/merb-core/core_ext/kernel.rb
- +++ b/lib/merb-core/core_ext/kernel.rb
- @@ -1,5 +1,11 @@
- require 'rubygems/dependency'
- +module Gem
- + class Dependency
- + attr_accessor :require_block
- + end
- +end
- +
- module Kernel
- # Keep track of all required dependencies.
- @@ -11,8 +17,10 @@ module Kernel
- # @return <Gem::Dependency> Dependency information
- #
- # @api private
- - def track_dependency(name, *ver)
- + def track_dependency(name, *ver, &blk)
- dep = Gem::Dependency.new(name, ver)
- + dep.require_block = blk
- +
- existing = Merb::BootLoader::Dependencies.dependencies.find { |d| d.name == dep.name }
- if existing
- index = Merb::BootLoader::Dependencies.dependencies.index(existing)
- @@ -41,9 +49,9 @@ module Kernel
- def dependency(name, *ver)
- immediate = ver.last.is_a?(Hash) && ver.pop[:immediate]
- if immediate || Merb::BootLoader.finished?(Merb::BootLoader::Dependencies)
- - load_dependency(name, *ver)
- + load_dependency(name, *ver, &blk)
- else
- - track_dependency(name, *ver)
- + track_dependency(name, *ver, &blk)
- end
- end
- @@ -63,12 +71,16 @@ module Kernel
- # as a library.
- #
- # @return <Gem::Dependency> The dependency information.
- - def load_dependency(name, *ver)
- + def load_dependency(name, *ver, &blk)
- dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver)
- gem(dep)
- rescue Gem::LoadError
- ensure
- - require dep.name
- + if block = blk || dep.require_block
- + block.call
- + else
- + require dep.name
- + end
- Merb.logger.info!("loading gem '#{dep.name}' ...")
- return dep # ensure needs explicit return
- end
- diff --git a/lib/merb-core/rack/adapter/abstract.rb b/lib/merb-core/rack/adapter/abstract.rb
- index d6c5e95..cb4f36a 100644
- --- a/lib/merb-core/rack/adapter/abstract.rb
- +++ b/lib/merb-core/rack/adapter/abstract.rb
- @@ -111,6 +111,7 @@ module Merb
- # In daemonized mode or not, support HUPing the process to
- # restart it.
- Merb.trap('HUP') do
- + Merb.exiting = true
- stop
- Merb.logger.warn! "Exiting port #{port} on #{Process.pid}\n"
- exit_process
- @@ -118,6 +119,7 @@ module Merb
- # ABRTing the process will kill it, and it will not be respawned.
- Merb.trap('ABRT') do
- + Merb.exiting = true
- stopped = stop(128)
- Merb.logger.warn! "Exiting port #{port}\n" if stopped
- exit_process(128)
Add Comment
Please, Sign In to add comment