snap 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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