GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Rubygem
Description: Merb Core: All you need. None you don't.
Homepage: http://www.merbivore.com
Clone URL: git://github.com/wycats/merb-core.git
Fixes pooling issue in Extlib by making a hook for exiting, and adds 
support for dependency taking a block
wycats (author)
Mon Oct 06 12:53:08 -0700 2008
commit  06a92fdd64917f24a27d6f3caa6eb6a1ef290325
tree    f1e6295cd6b4215eb756fdb5e4241b50f58e155d
parent  962514cdec3ae0a4c5b697fe4d15fd7c75168e4a
...
35
36
37
38
 
 
 
 
 
 
 
 
 
39
40
41
...
35
36
37
 
38
39
40
41
42
43
44
45
46
47
48
49
0
@@ -35,7 +35,15 @@ module Merb
0
   module GlobalHelpers; end
0
   
0
   class << self
0
- attr_accessor :exiting
0
+ attr_reader :exiting
0
+
0
+ def exiting=(bool)
0
+ Extlib.exiting = bool
0
+ if bool && Extlib.const_defined?("Pooling") && Extlib::Pooling.scavenger
0
+ Extlib::Pooling.scavenger.wakeup
0
+ end
0
+ @exiting = bool
0
+ end
0
 
0
     # Merge environment settings
0
     # Can allow you to have a "localdev" that runs like your "development"
...
1
2
 
 
 
 
 
 
3
4
5
...
11
12
13
14
 
15
 
 
16
17
18
...
38
39
40
41
 
42
43
44
 
45
46
 
47
48
49
...
63
64
65
66
 
67
68
69
70
71
 
 
 
 
 
72
73
74
...
1
2
3
4
5
6
7
8
9
10
11
...
17
18
19
 
20
21
22
23
24
25
26
...
46
47
48
 
49
50
51
 
52
53
 
54
55
56
57
...
71
72
73
 
74
75
76
77
78
 
79
80
81
82
83
84
85
86
0
@@ -1,5 +1,11 @@
0
 require 'rubygems/dependency'
0
 
0
+module Gem
0
+ class Dependency
0
+ attr_accessor :require_block
0
+ end
0
+end
0
+
0
 module Kernel
0
   
0
   # Keep track of all required dependencies.
0
@@ -11,8 +17,10 @@ module Kernel
0
   # @return <Gem::Dependency> Dependency information
0
   #
0
   # @api private
0
- def track_dependency(name, *ver)
0
+ def track_dependency(name, *ver, &blk)
0
     dep = Gem::Dependency.new(name, ver)
0
+ dep.require_block = blk
0
+
0
     existing = Merb::BootLoader::Dependencies.dependencies.find { |d| d.name == dep.name }
0
     if existing
0
       index = Merb::BootLoader::Dependencies.dependencies.index(existing)
0
@@ -38,12 +46,12 @@ module Kernel
0
   # forcing a dependency to load immediately.
0
   #
0
   # @return <Gem::Dependency> The dependency information.
0
- def dependency(name, *ver)
0
+ def dependency(name, *ver, &blk)
0
     immediate = ver.last.is_a?(Hash) && ver.pop[:immediate]
0
     if immediate || Merb::BootLoader.finished?(Merb::BootLoader::Dependencies)
0
- load_dependency(name, *ver)
0
+ load_dependency(name, *ver, &blk)
0
     else
0
- track_dependency(name, *ver)
0
+ track_dependency(name, *ver, &blk)
0
     end
0
   end
0
 
0
@@ -63,12 +71,16 @@ module Kernel
0
   # as a library.
0
   #
0
   # @return <Gem::Dependency> The dependency information.
0
- def load_dependency(name, *ver)
0
+ def load_dependency(name, *ver, &blk)
0
     dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver)
0
     gem(dep)
0
   rescue Gem::LoadError
0
   ensure
0
- require dep.name
0
+ if block = blk || dep.require_block
0
+ block.call
0
+ else
0
+ require dep.name
0
+ end
0
     Merb.logger.info!("loading gem '#{dep.name}' ...")
0
     return dep # ensure needs explicit return
0
   end
...
111
112
113
 
114
115
116
...
118
119
120
 
121
122
123
...
111
112
113
114
115
116
117
...
119
120
121
122
123
124
125
0
@@ -111,6 +111,7 @@ module Merb
0
         # In daemonized mode or not, support HUPing the process to
0
         # restart it.
0
         Merb.trap('HUP') do
0
+ Merb.exiting = true
0
           stop
0
           Merb.logger.warn! "Exiting port #{port} on #{Process.pid}\n"
0
           exit_process
0
@@ -118,6 +119,7 @@ module Merb
0
 
0
         # ABRTing the process will kill it, and it will not be respawned.
0
         Merb.trap('ABRT') do
0
+ Merb.exiting = true
0
           stopped = stop(128)
0
           Merb.logger.warn! "Exiting port #{port}\n" if stopped
0
           exit_process(128)

Comments

    No one has commented yet.