module MailCatcher
Constants
- VERSION
Public Instance Methods
browse(url)
click to toggle source
# File lib/mail_catcher.rb, line 41 def browse url if windows? system "start", "/b", url elsif which "open" system "open", url end end
browse?()
click to toggle source
# File lib/mail_catcher.rb, line 37 def browse? windows? or which "open" end
growl?()
click to toggle source
# File lib/mail_catcher.rb, line 33 def growl? growlnotify? end
growlnotify?()
click to toggle source
# File lib/mail_catcher.rb, line 29 def growlnotify? which "growlnotify" end
mac?()
click to toggle source
# File lib/mail_catcher.rb, line 17 def mac? RbConfig::CONFIG['host_os'] =~ /darwin/ end
macruby?()
click to toggle source
# File lib/mail_catcher.rb, line 25 def macruby? mac? and const_defined? :MACRUBY_VERSION end
options()
click to toggle source
# File lib/mail_catcher.rb, line 62 def options @@options rescue @@defaults end
parse!(arguments=ARGV, defaults=@defaults)
click to toggle source
# File lib/mail_catcher.rb, line 70 def parse! arguments=ARGV, defaults=@defaults @@defaults.dup.tap do |options| OptionParser.new do |parser| parser.banner = "Usage: mailcatcher [options]" parser.version = VERSION parser.on("--ip IP", "Set the ip address of both servers") do |ip| options[:smtp_ip] = options[:http_ip] = ip end parser.on("--smtp-ip IP", "Set the ip address of the smtp server") do |ip| options[:smtp_ip] = ip end parser.on("--smtp-port PORT", Integer, "Set the port of the smtp server") do |port| options[:smtp_port] = port end parser.on("--http-ip IP", "Set the ip address of the http server") do |ip| options[:http_ip] = ip end parser.on("--http-port PORT", Integer, "Set the port address of the http server") do |port| options[:http_port] = port end parser.on("--no-quit", "Don't allow quitting the process") do options[:quit] = false end if mac? parser.on("--[no-]growl", "Growl to the local machine when a message arrives") do |growl| if growl and not growlnotify? puts "You'll need to install growlnotify from the Growl installer." puts puts "See: http://growl.info/extras.php#growlnotify" exit -2 end options[:growl] = growl end end unless windows? parser.on('-f', '--foreground', 'Run in the foreground') do options[:daemon] = false end end if browse? parser.on('-b', '--browse', 'Open web browser') do options[:browse] = true end end parser.on('-v', '--verbose', 'Be more verbose') do options[:verbose] = true end parser.on('-h', '--help', 'Display this help information') do puts parser exit end end.parse! end end
quit!()
click to toggle source
# File lib/mail_catcher.rb, line 192 def quit! EventMachine.next_tick { EventMachine.stop_event_loop } end
quittable?()
click to toggle source
# File lib/mail_catcher.rb, line 66 def quittable? options[:quit] end
run!(options=nil)
click to toggle source
# File lib/mail_catcher.rb, line 137 def run! options=nil # If we are passed options, fill in the blanks options &&= options.reverse_merge @@defaults # Otherwise, parse them from ARGV options ||= parse! # Stash them away for later @@options = options puts "Starting MailCatcher" #Thin::Logging.silent = true # One EventMachine loop... EventMachine.run do # Get our lion on if asked MailCatcher::Growl.start if options[:growl] smtp_url = "smtp://#{options[:smtp_ip]}:#{options[:smtp_port]}" http_url = "http://#{options[:http_ip]}:#{options[:http_port]}" # Set up an SMTP server to run within EventMachine rescue_port options[:smtp_port] do EventMachine.start_server options[:smtp_ip], options[:smtp_port], Smtp puts "==> #{smtp_url}" end # Let Thin set itself up inside our EventMachine loop # (Skinny/WebSockets just works on the inside) # rescue_port options[:http_port] do #Thin::Server.start options[:http_ip], options[:http_port], Web # puts "==> #{http_url}" # end # Open the web browser before detatching console if options[:browse] EventMachine.next_tick do browse http_url end end # Daemonize, if we should, but only after the servers have started. if options[:daemon] EventMachine.next_tick do if quittable? puts "*** MailCatcher runs as a daemon by default. Go to the web interface to quit." else puts "*** MailCatcher is now running as a daemon that cannot be quit." end #Process.daemon end end end end
which(command)
click to toggle source
# File lib/mail_catcher.rb, line 11 def which command not windows? and Open3.popen3 'which', 'command' do |stdin, stdout, stderr| return stdout.read.chomp.presence end end
windows?()
click to toggle source
# File lib/mail_catcher.rb, line 21 def windows? RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ end
Protected Instance Methods
rescue_port(port) { || ... }
click to toggle source
# File lib/mail_catcher.rb, line 198 def rescue_port port begin yield # XXX: EventMachine only spits out RuntimeError with a string description rescue RuntimeError if $!.to_s =~ /\bno acceptor\b/ puts "~~> ERROR: Something's using port #{port}. Are you already running MailCatcher?" exit -1 else raise end end end