Guest User

Untitled

a guest
Feb 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. diff --git a/lib/merb-core.rb b/lib/merb-core.rb
  2. index 28317f1..f9f034a 100644
  3. --- a/lib/merb-core.rb
  4. +++ b/lib/merb-core.rb
  5. @@ -36,7 +36,15 @@ module Merb
  6. module GlobalHelpers; end
  7.  
  8. class << self
  9. - attr_accessor :exiting
  10. + attr_reader :exiting
  11. +
  12. + def exiting=(bool)
  13. + Extlib.exiting = bool
  14. + if bool && Extlib.const_defined?("Pooling") && Extlib::Pooling.scavenger
  15. + Extlib::Pooling.scavenger.wakeup
  16. + end
  17. + @exiting = bool
  18. + end
  19.  
  20. # Merge environment settings
  21. # Can allow you to have a "localdev" that runs like your "development"
  22. diff --git a/lib/merb-core/core_ext/kernel.rb b/lib/merb-core/core_ext/kernel.rb
  23. index 202b877..51cdb67 100644
  24. --- a/lib/merb-core/core_ext/kernel.rb
  25. +++ b/lib/merb-core/core_ext/kernel.rb
  26. @@ -1,5 +1,11 @@
  27. require 'rubygems/dependency'
  28.  
  29. +module Gem
  30. + class Dependency
  31. + attr_accessor :require_block
  32. + end
  33. +end
  34. +
  35. module Kernel
  36.  
  37. # Keep track of all required dependencies.
  38. @@ -11,8 +17,10 @@ module Kernel
  39. # @return <Gem::Dependency> Dependency information
  40. #
  41. # @api private
  42. - def track_dependency(name, *ver)
  43. + def track_dependency(name, *ver, &blk)
  44. dep = Gem::Dependency.new(name, ver)
  45. + dep.require_block = blk
  46. +
  47. existing = Merb::BootLoader::Dependencies.dependencies.find { |d| d.name == dep.name }
  48. if existing
  49. index = Merb::BootLoader::Dependencies.dependencies.index(existing)
  50. @@ -41,9 +49,9 @@ module Kernel
  51. def dependency(name, *ver)
  52. immediate = ver.last.is_a?(Hash) && ver.pop[:immediate]
  53. if immediate || Merb::BootLoader.finished?(Merb::BootLoader::Dependencies)
  54. - load_dependency(name, *ver)
  55. + load_dependency(name, *ver, &blk)
  56. else
  57. - track_dependency(name, *ver)
  58. + track_dependency(name, *ver, &blk)
  59. end
  60. end
  61.  
  62. @@ -63,12 +71,16 @@ module Kernel
  63. # as a library.
  64. #
  65. # @return <Gem::Dependency> The dependency information.
  66. - def load_dependency(name, *ver)
  67. + def load_dependency(name, *ver, &blk)
  68. dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver)
  69. gem(dep)
  70. rescue Gem::LoadError
  71. ensure
  72. - require dep.name
  73. + if block = blk || dep.require_block
  74. + block.call
  75. + else
  76. + require dep.name
  77. + end
  78. Merb.logger.info!("loading gem '#{dep.name}' ...")
  79. return dep # ensure needs explicit return
  80. end
  81. diff --git a/lib/merb-core/rack/adapter/abstract.rb b/lib/merb-core/rack/adapter/abstract.rb
  82. index d6c5e95..cb4f36a 100644
  83. --- a/lib/merb-core/rack/adapter/abstract.rb
  84. +++ b/lib/merb-core/rack/adapter/abstract.rb
  85. @@ -111,6 +111,7 @@ module Merb
  86. # In daemonized mode or not, support HUPing the process to
  87. # restart it.
  88. Merb.trap('HUP') do
  89. + Merb.exiting = true
  90. stop
  91. Merb.logger.warn! "Exiting port #{port} on #{Process.pid}\n"
  92. exit_process
  93. @@ -118,6 +119,7 @@ module Merb
  94.  
  95. # ABRTing the process will kill it, and it will not be respawned.
  96. Merb.trap('ABRT') do
  97. + Merb.exiting = true
  98. stopped = stop(128)
  99. Merb.logger.warn! "Exiting port #{port}\n" if stopped
  100. exit_process(128)
Add Comment
Please, Sign In to add comment