fix various warnings with "check-warnings" target
[rainbows.git] / lib / rainbows / never_block.rb
bloba11b81de60cd0acaad66bc9935d0948b8b92573d
1 # -*- encoding: binary -*-
3 # {NeverBlock}[www.espace.com.eg/neverblock/] library that combines
4 # the EventMachine library with Ruby Fibers.  This includes use of
5 # Thread-based Fibers under Ruby 1.8.  It currently does NOT support
6 # a streaming "rack.input" but is compatible with everything else
7 # EventMachine supports.
9 # In your Rainbows! config block, you may specify a Fiber pool size
10 # to limit your application concurrency (without using Rainbows::AppPool)
12 #   Rainbows! do
13 #     use :NeverBlock, :pool_size => 50
14 #     worker_connections 100
15 #   end
17 module Rainbows::NeverBlock
19   # :stopdoc:
20   DEFAULTS = {
21     :pool_size => 20, # same default size used by NB
22     :backend => :EventMachine, # NeverBlock doesn't support Rev yet
23   }
25   # same pool size NB core itself uses
26   def self.setup # :nodoc:
27     o = Rainbows::O
28     DEFAULTS.each { |k,v| o[k] ||= v }
29     Integer === o[:pool_size] && o[:pool_size] > 0 or
30       raise ArgumentError, "pool_size must a be an Integer > 0"
31     Rainbows.const_get(o[:backend])
32     require "never_block" # require EM first since we need a higher version
33   end
35   def self.extended(klass)
36     klass.extend(Rainbows.const_get(Rainbows::O[:backend])) # EventMachine
37     klass.extend(Rainbows::NeverBlock::Core)
38   end
39   # :startdoc:
40 end
41 # :enddoc:
42 require 'rainbows/never_block/core'