Module: Momentarily

Defined in:
lib/momentarily.rb,
lib/momentarily/version.rb

Constant Summary collapse

VERSION =
"0.0.6"
@@timeout =
60
@@debug =
false
@@inline =
false

Class Method Summary collapse

Class Method Details

.defer(work = nil, callback = nil, &block) ⇒ Object



66
67
68
# File 'lib/momentarily.rb', line 66

def Momentarily.defer(work = nil, callback = nil, &block)
	EM.defer( ( work || block ), callback)
end

.die_gracefully_on_signalObject



48
49
50
51
# File 'lib/momentarily.rb', line 48

def Momentarily.die_gracefully_on_signal
	Signal.trap("INT")  { EM.stop }
	Signal.trap("TERM") { EM.stop }
end

.later(work = nil, callback = nil, &block) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/momentarily.rb', line 53

def Momentarily.later(work = nil, callback = nil, &block)
	if @@inline
		(work || block).call
		callback.call unless callback.blank?
	else
		EM.defer( self.railsify(( work || block )), self.railsify(callback) )
	end
end

.next_tick(work = nil, &block) ⇒ Object



62
63
64
# File 'lib/momentarily.rb', line 62

def Momentarily.next_tick(work = nil, &block)
	EM.next_tick( ( work || block ) ) 
end

.reactor_running?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/momentarily.rb', line 70

def Momentarily.reactor_running?
	EM.reactor_running?
end

.startObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/momentarily.rb', line 19

def Momentarily.start
	# faciliates debugging
	Thread.abort_on_exception = @@debug
	if defined?(PhusionPassenger)
		puts "Momentarily: Passenger thread init." if @@debug
		PhusionPassenger.on_event(:starting_worker_process) do |forked|
			# for passenger, we need to avoid orphaned threads
			if forked && EM.reactor_running?
				EM.stop
			end
			Thread.new {
				EM.run
			}
			die_gracefully_on_signal
		end
	# if Thin is defined, but in console mode, Thin probably isn't running
	elsif (!EM.reactor_running? && defined?(Thin).nil?) || !defined?(Rails::Console).nil?
		# spawn a thread and start it up
		puts "Momentarily: Standard thread init." if @@debug
		Thread.new {
			EM.run
		}
	else
		# Thin is built on EventMachine, doesn't need another thread
		puts "Momentarily: Reactor already running or detected Thin." if @@debug
	end

end