snap 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/VERSION +1 -1
  2. data/bin/snap +48 -8
  3. metadata +2 -2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/bin/snap CHANGED
@@ -3,22 +3,62 @@
3
3
  require 'snap'
4
4
  require 'optparse'
5
5
  require 'launchy'
6
+ require 'socket'
6
7
 
7
8
  options = {}
8
9
  if ARGV.any?
9
10
  OptionParser.new { |op|
10
11
  op.banner = "Usage: snap [options]"
11
- op.on('-e env') { |val| options[:environment] = val.to_sym }
12
- op.on('-s server') { |val| options[:server] = val }
13
- op.on('-p port') { |val| options[:port] = val.to_i }
14
- op.on('-r root') { |val| options[:root] = val }
15
- op.on('-o') { |val| options[:open] = true }
12
+ op.on('-e env', 'Specify the server environment on which to run') { |val| options[:environment] = val.to_sym }
13
+ op.on('-s server', 'Specify the address to bind to') { |val| options[:server] = val }
14
+ op.on('-p port', 'Specify the port on which to run') { |val| options[:port] = val.to_i }
15
+ op.on('-r root', 'Specify the root of the directory listing') { |val| options[:root] = val }
16
+ op.on('-n', 'Do not open browser') { |val| options[:do_not_open] = true }
17
+ op.on('-c', 'Cold snap') { |val| options[:cold] = true }
16
18
  }.parse!(ARGV.dup)
17
19
  end
18
20
 
19
- if options[:open]
20
- Launchy.open("http://127.0.0.1:#{options[:port] || 4567}")
21
+ # if a port isn't specified, find the first open one between 4567 and 49151
22
+ unless options[:port]
23
+ options[:port] = 4567
24
+ begin
25
+ TCPServer.new('0.0.0.0', options[:port]).close
26
+ rescue Errno::EADDRINUSE
27
+ raise "Cannot find an open port on [4567, 49151]" if options[:port] == 49151
28
+ options[:port] += 1
29
+ retry
30
+ end
31
+ end
32
+
33
+ if options[:cold]
34
+ cold_snap = <<COLDSNAP
35
+ /~~~~~~\ _______________________
36
+ /' -s- ~~~~\____/ Brr, it's a cold snap |
37
+ /'dHHb ~~~/ \_______________________/
38
+ /'dHHHA :
39
+ /' VHHHHaadHHb:
40
+ /' `VHHHHHHHHb:
41
+ /' `VHHHHHHH:
42
+ /' dHHHHHHH:
43
+ | dHHHHHHHH:
44
+ | dHHHHHHHH:
45
+ | VHHHHHHHHH:
46
+ | b HHHHHHHHV:
47
+ | Hb HHHHHHHV'
48
+ | HH dHHHHHHV'
49
+ | VHbdHHHHHHV'
50
+ | VHHHHHHHV'
51
+ \ VHHHHHHH:
52
+ \oodboooooodH
53
+ HHHHHHHHHHHHHHHHHHHHHHHHGGN94
54
+ COLDSNAP
55
+ puts cold_snap
21
56
  end
22
57
 
23
58
  # run!
24
- Snap::Server.run!(options)
59
+ if fork
60
+ Snap::Server.run!(options)
61
+ else
62
+ sleep 0.5 # let the server start up
63
+ Launchy.open("http://127.0.0.1:#{options[:port]}") unless options[:do_not_open]
64
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Stielau
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-05 00:00:00 -08:00
12
+ date: 2010-01-07 00:00:00 -08:00
13
13
  default_executable: snap
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency