guard-webrick 0.1.0
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.
- data/.gitignore +5 -0
- data/CHANGELOG.rdoc +3 -0
- data/Gemfile +4 -0
- data/Guardfile +10 -0
- data/LICENSE +20 -0
- data/README.rdoc +60 -0
- data/Rakefile +32 -0
- data/guard-webrick.gemspec +31 -0
- data/lib/guard/webrick.rb +114 -0
- data/lib/guard/webrick/server.rb +34 -0
- data/lib/guard/webrick/templates/Guardfile +2 -0
- data/lib/guard/webrick/version.rb +5 -0
- data/spec/guard/webrick/server_spec.rb +49 -0
- data/spec/guard/webrick_spec.rb +183 -0
- data/spec/spec_helper.rb +10 -0
- metadata +196 -0
data/CHANGELOG.rdoc
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Fletcher Nichol
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
= Guard::WEBrick
|
2
|
+
|
3
|
+
Guard::WEBrick automatically starts and restarts WEBrick when needed. Useful when you are working on a static site but want to benefit from {Guard::LiveReload}[http://github.com/guard/guard-livereload].
|
4
|
+
|
5
|
+
- Tested on Ruby 1.8.7, 1.9.2, Ruby Enterprise Edition, and JRuby
|
6
|
+
|
7
|
+
== Install
|
8
|
+
|
9
|
+
Please be sure to have {Guard}[http://github.com/guard/guard] installed before continue.
|
10
|
+
|
11
|
+
Install the gem:
|
12
|
+
|
13
|
+
gem install guard-webrick
|
14
|
+
|
15
|
+
Add it to your Gemfile (inside test group):
|
16
|
+
|
17
|
+
gem 'guard-webrick'
|
18
|
+
|
19
|
+
Add guard definition to your Guardfile by running this command:
|
20
|
+
|
21
|
+
guard init webrick
|
22
|
+
|
23
|
+
== Usage
|
24
|
+
|
25
|
+
Please read {Guard usage doc}[http://github.com/guard/guard#readme]
|
26
|
+
|
27
|
+
== Guardfile
|
28
|
+
|
29
|
+
You can adapt your 'view' files like you want.
|
30
|
+
Please read {Guard doc}[http://github.com/guard/guard#readme] for more info about Guardfile DSL.
|
31
|
+
|
32
|
+
guard 'webrick' do
|
33
|
+
end
|
34
|
+
|
35
|
+
== Options
|
36
|
+
|
37
|
+
The WEBrick guard has 3 options that you can set like this:
|
38
|
+
|
39
|
+
guard 'webrick', :host => '127.0.0.1', :port => '35728', :docroot => 'public' do
|
40
|
+
...
|
41
|
+
end
|
42
|
+
|
43
|
+
Available options:
|
44
|
+
|
45
|
+
:host => '127.3.3.1' # default '0.0.0.0'
|
46
|
+
:port => '12345' # default '3000'
|
47
|
+
:docroot => 'public' # default current working directory
|
48
|
+
:launchy => false # default true
|
49
|
+
|
50
|
+
== Development
|
51
|
+
|
52
|
+
- Source hosted at {GitHub}[http://github.com/fnichol/guard-webrick]
|
53
|
+
- Report issues/Questions/Feature requests on {GitHub Issues}[http://github.com/fnichol/guard-webrick/issues]
|
54
|
+
|
55
|
+
Pull requests are very welcome! Make sure your patches are well tested. Please create a topic branch for every separate change
|
56
|
+
you make.
|
57
|
+
|
58
|
+
== Authors
|
59
|
+
|
60
|
+
{Fletcher Nichol}[http://github.com/fnichol]
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
task :default => :spec
|
7
|
+
|
8
|
+
namespace(:spec) do
|
9
|
+
desc "Run all specs on multiple ruby versions (requires rvm)"
|
10
|
+
task(:portability) do
|
11
|
+
rubies = if ENV['RUBIES']
|
12
|
+
ENV['RUBIES'].split(' ')
|
13
|
+
else
|
14
|
+
%w[1.8.7 1.9.2 ree jruby]
|
15
|
+
end
|
16
|
+
rubies.each do |version|
|
17
|
+
rvm_ruby = if ENV['GEMSET']
|
18
|
+
"#{version}@#{ENV['GEMSET']}"
|
19
|
+
else
|
20
|
+
version
|
21
|
+
end
|
22
|
+
system <<-BASH
|
23
|
+
bash -c '
|
24
|
+
source ~/.rvm/scripts/rvm;
|
25
|
+
rvm #{rvm_ruby};
|
26
|
+
echo "--------- version #{rvm_ruby} ----------\n";
|
27
|
+
bundle install;
|
28
|
+
rake spec'
|
29
|
+
BASH
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "guard/webrick/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "guard-webrick"
|
7
|
+
s.version = Guard::WEBrickVersion::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Fletcher Nichol']
|
10
|
+
s.email = ['fnichol@nichol.ca']
|
11
|
+
s.homepage = 'http://rubygems.org/gems/guard-webrick'
|
12
|
+
s.summary = %q{Guard gem for WEBrick}
|
13
|
+
s.description = %q{Guard::WEBrick automatically starts and restarts WEBrick when needed.}
|
14
|
+
|
15
|
+
s.required_rubygems_version = '>= 1.3.6'
|
16
|
+
s.rubyforge_project = "guard-webrick"
|
17
|
+
|
18
|
+
s.add_dependency 'guard', '~> 0.3'
|
19
|
+
s.add_dependency 'ffi', '~> 1.0.7'
|
20
|
+
s.add_dependency 'spoon', '~> 0.0.1'
|
21
|
+
|
22
|
+
s.add_development_dependency 'bundler', '~> 1.0.10'
|
23
|
+
s.add_development_dependency 'rspec', '~> 2.5.0'
|
24
|
+
s.add_development_dependency 'guard-rspec', '~> 0.2.0'
|
25
|
+
s.add_development_dependency 'guard-bundler', '~> 0.1.1'
|
26
|
+
|
27
|
+
s.files = `git ls-files`.split("\n")
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
30
|
+
s.require_paths = ["lib"]
|
31
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'guard'
|
2
|
+
require 'guard/guard'
|
3
|
+
require 'spoon'
|
4
|
+
require 'launchy'
|
5
|
+
require 'socket'
|
6
|
+
require 'timeout'
|
7
|
+
|
8
|
+
module Guard
|
9
|
+
class WEBrick < Guard
|
10
|
+
|
11
|
+
attr_accessor :pid
|
12
|
+
|
13
|
+
def initialize(watchers=[], options={})
|
14
|
+
super
|
15
|
+
@options = {
|
16
|
+
:host => '0.0.0.0',
|
17
|
+
:port => 3000,
|
18
|
+
:docroot => Dir::pwd,
|
19
|
+
:launchy => true
|
20
|
+
}.update(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# =================
|
24
|
+
# = Guard methods =
|
25
|
+
# =================
|
26
|
+
|
27
|
+
# Call once when guard starts
|
28
|
+
def start
|
29
|
+
UI.info "Starting up WEBrick..."
|
30
|
+
if running?
|
31
|
+
UI.error "Another instance of WEBrick::HTTPServer is running."
|
32
|
+
false
|
33
|
+
else
|
34
|
+
@pid = Spoon.spawnp('ruby',
|
35
|
+
File.expand_path(File.join(File.dirname(__FILE__), %w{webrick server.rb})),
|
36
|
+
@options[:host],
|
37
|
+
@options[:port].to_s,
|
38
|
+
@options[:docroot]
|
39
|
+
)
|
40
|
+
wait_for_port
|
41
|
+
if @options[:launchy]
|
42
|
+
Launchy.open("http://#{@options[:host]}:#{@options[:port]}")
|
43
|
+
@options[:launchy] = false # only run once
|
44
|
+
end
|
45
|
+
@pid
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Call with Ctrl-C signal (when Guard quit)
|
50
|
+
def stop
|
51
|
+
UI.info "Shutting down WEBrick..."
|
52
|
+
Process.kill("TERM", @pid)
|
53
|
+
Process.wait(@pid)
|
54
|
+
@pid = nil
|
55
|
+
true
|
56
|
+
end
|
57
|
+
|
58
|
+
# Call with Ctrl-Z signal
|
59
|
+
def reload
|
60
|
+
restart
|
61
|
+
end
|
62
|
+
|
63
|
+
# Call on file(s) modifications
|
64
|
+
def run_on_change(paths = {})
|
65
|
+
restart
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def restart
|
71
|
+
UI.info "Restarting WEBrick..."
|
72
|
+
stop
|
73
|
+
start
|
74
|
+
end
|
75
|
+
|
76
|
+
def running?
|
77
|
+
begin
|
78
|
+
if @pid
|
79
|
+
Process.getpgid @pid
|
80
|
+
true
|
81
|
+
else
|
82
|
+
false
|
83
|
+
end
|
84
|
+
rescue Errno::ESRCH
|
85
|
+
false
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def wait_for_port
|
90
|
+
while true do
|
91
|
+
sleep 0.2
|
92
|
+
port_open?(@options[:host], @options[:port]) and return
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# thanks to: http://bit.ly/bVN5AQ
|
97
|
+
def port_open?(addr, port)
|
98
|
+
begin
|
99
|
+
Timeout::timeout(1) do
|
100
|
+
begin
|
101
|
+
s = TCPSocket.new(addr, port)
|
102
|
+
s.close
|
103
|
+
return true
|
104
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
105
|
+
return false
|
106
|
+
end
|
107
|
+
end
|
108
|
+
rescue Timeout::Error
|
109
|
+
end
|
110
|
+
|
111
|
+
return false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'webrick'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
class WEBrick
|
5
|
+
class Server
|
6
|
+
|
7
|
+
attr_reader :server
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
@server = ::WEBrick::HTTPServer.new(
|
11
|
+
:BindAddress => options[:host],
|
12
|
+
:Port => options[:port],
|
13
|
+
:DocumentRoot => File.expand_path(options[:docroot])
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
%w{TERM HUP}.each { |signal| trap(signal){ server.shutdown } }
|
19
|
+
# ignore signals for guard
|
20
|
+
%w{INT TSTP QUIT}.each { |signal| trap(signal) {} }
|
21
|
+
@server.start
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if __FILE__ == $0
|
28
|
+
host, port, docroot = ARGV
|
29
|
+
Guard::WEBrick::Server.new(
|
30
|
+
:host => host,
|
31
|
+
:port => port,
|
32
|
+
:docroot => docroot
|
33
|
+
).start
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'guard/webrick/server'
|
3
|
+
|
4
|
+
describe Guard::WEBrick::Server do
|
5
|
+
|
6
|
+
describe "initialize" do
|
7
|
+
|
8
|
+
it "should create a WEBrick::HTTPServer instance" do
|
9
|
+
::WEBrick::HTTPServer.should_receive(:new).with(
|
10
|
+
:BindAddress => '0.0.0.0',
|
11
|
+
:Port => 3000,
|
12
|
+
:DocumentRoot => Dir::pwd
|
13
|
+
)
|
14
|
+
new_server
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should expand the docroot path" do
|
18
|
+
::WEBrick::HTTPServer.should_receive(:new).with(
|
19
|
+
:BindAddress => '0.0.0.0',
|
20
|
+
:Port => 3000,
|
21
|
+
:DocumentRoot => File.expand_path(File.join(Dir::pwd, 'public'))
|
22
|
+
)
|
23
|
+
new_server(:docroot => 'public')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "start" do
|
28
|
+
|
29
|
+
subject { new_server }
|
30
|
+
|
31
|
+
it "should start the WEBrick::HTTPServer instance" do
|
32
|
+
::WEBrick::HTTPServer.stub(:new).and_return(mock_http_server)
|
33
|
+
subject.server.should_receive(:start)
|
34
|
+
subject.start
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def new_server(options = {})
|
40
|
+
Guard::WEBrick::Server.new({
|
41
|
+
:host => '0.0.0.0',
|
42
|
+
:port => 3000,
|
43
|
+
:docroot => Dir::pwd
|
44
|
+
}.update(options))
|
45
|
+
end
|
46
|
+
|
47
|
+
def mock_http_server
|
48
|
+
@mock_http_server ||= mock(::WEBrick::HTTPServer).as_null_object
|
49
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Guard::WEBrick do
|
4
|
+
subject { Guard::WEBrick.new }
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
Launchy.stub(:open)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "options" do
|
11
|
+
|
12
|
+
describe "host" do
|
13
|
+
|
14
|
+
it "should be '0.0.0.0' by default" do
|
15
|
+
subject = Guard::WEBrick.new([])
|
16
|
+
subject.options[:host].should == '0.0.0.0'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be set to '127.0.0.5'" do
|
20
|
+
subject = Guard::WEBrick.new([], { :host => '127.0.0.5' })
|
21
|
+
subject.options[:host].should == '127.0.0.5'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "port" do
|
26
|
+
|
27
|
+
it "should be 3000 by default" do
|
28
|
+
subject = Guard::WEBrick.new([])
|
29
|
+
subject.options[:port].should == 3000
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be set to 8080" do
|
33
|
+
subject = Guard::WEBrick.new([], { :port => 8080 })
|
34
|
+
subject.options[:port].should == 8080
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "docroot" do
|
39
|
+
|
40
|
+
it "should be Dir::pwd by default" do
|
41
|
+
subject = Guard::WEBrick.new([])
|
42
|
+
subject.options[:docroot].should == Dir::pwd
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be set to #{File.join(Dir::pwd, 'public')}" do
|
46
|
+
subject = Guard::WEBrick.new([], { :docroot => File.join(Dir::pwd, 'public') })
|
47
|
+
subject.options[:docroot].should == File.join(Dir::pwd, 'public')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "launchy" do
|
52
|
+
|
53
|
+
it "should be true by default" do
|
54
|
+
subject = Guard::WEBrick.new([])
|
55
|
+
subject.options[:launchy].should == true
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be set to false" do
|
59
|
+
subject = Guard::WEBrick.new([], { :launchy => false })
|
60
|
+
subject.options[:launchy].should == false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "start" do
|
66
|
+
|
67
|
+
before(:each) do
|
68
|
+
Spoon.stub(:spawnp).and_return(123456)
|
69
|
+
subject.stub(:wait_for_port)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should spawn the server instance" do
|
73
|
+
subject = Guard::WEBrick.new([], { :host => '127.0.2.5', :port => 8080,
|
74
|
+
:docroot => '/tmp' })
|
75
|
+
subject.stub(:wait_for_port)
|
76
|
+
Spoon.should_receive(:spawnp).with( 'ruby',
|
77
|
+
File.expand_path(File.join(File.dirname(__FILE__),
|
78
|
+
%w{.. .. lib guard webrick server.rb})),
|
79
|
+
'127.0.2.5', '8080', '/tmp'
|
80
|
+
)
|
81
|
+
subject.start
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should pass startup options to the server instance" do
|
85
|
+
Spoon.should_receive(:spawnp).with( 'ruby',
|
86
|
+
File.expand_path(File.join(File.dirname(__FILE__),
|
87
|
+
%w{.. .. lib guard webrick server.rb})),
|
88
|
+
'0.0.0.0', '3000', Dir::pwd
|
89
|
+
)
|
90
|
+
subject.start
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should set the pid" do
|
94
|
+
subject.start
|
95
|
+
subject.pid.should == 123456
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should return true" do
|
99
|
+
subject.start.should be_true
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should warn when server instance is already running" do
|
103
|
+
subject.start
|
104
|
+
Process.stub(:getpgid).and_return(true)
|
105
|
+
Guard::UI.should_receive(:error).with(
|
106
|
+
"Another instance of WEBrick::HTTPServer is running.")
|
107
|
+
subject.start
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should open a web browser page" do
|
111
|
+
Launchy.should_receive(:open).with("http://0.0.0.0:3000")
|
112
|
+
subject.start
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should not open a web browser if disabled" do
|
116
|
+
subject = Guard::WEBrick.new([], { :launchy => false })
|
117
|
+
subject.stub(:wait_for_port)
|
118
|
+
Launchy.should_not_receive(:open)
|
119
|
+
subject.start
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "stop" do
|
124
|
+
|
125
|
+
before(:each) do
|
126
|
+
Spoon.stub(:spawnp).and_return(123456)
|
127
|
+
Process.stub(:wait)
|
128
|
+
Process.stub(:kill)
|
129
|
+
subject.stub(:wait_for_port)
|
130
|
+
subject.start
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should kill the server instance" do
|
134
|
+
Process.should_receive(:kill).with("TERM", 123456)
|
135
|
+
subject.stop
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should wait for the child process to exit" do
|
139
|
+
Process.should_receive(:wait).with(123456)
|
140
|
+
subject.stop
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should set pid to nil" do
|
144
|
+
subject.stop
|
145
|
+
subject.pid.should be_nil
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should return true" do
|
149
|
+
subject.stop.should be_true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
%w{reload run_on_change}.each do |method|
|
154
|
+
describe method do
|
155
|
+
|
156
|
+
before(:each) do
|
157
|
+
Spoon.stub(:spawnp).and_return(123456)
|
158
|
+
Process.stub(:wait)
|
159
|
+
Process.stub(:kill)
|
160
|
+
subject.stub(:wait_for_port)
|
161
|
+
subject.start
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should restart the server" do
|
165
|
+
subject.should_receive(:stop).ordered
|
166
|
+
subject.should_receive(:start).ordered
|
167
|
+
subject.send(method)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should return true" do
|
171
|
+
subject.send(method).should be_true
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should only open a web browser the first time" do
|
175
|
+
subject = Guard::WEBrick.new([], { :launchy => true })
|
176
|
+
subject.stub(:wait_for_port)
|
177
|
+
Launchy.should_receive(:open).once
|
178
|
+
subject.start
|
179
|
+
subject.send(method)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: guard-webrick
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Fletcher Nichol
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-19 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: guard
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 3
|
33
|
+
version: "0.3"
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: ffi
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 25
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 0
|
48
|
+
- 7
|
49
|
+
version: 1.0.7
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: spoon
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 29
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
- 0
|
64
|
+
- 1
|
65
|
+
version: 0.0.1
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: bundler
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 1
|
79
|
+
- 0
|
80
|
+
- 10
|
81
|
+
version: 1.0.10
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec
|
86
|
+
prerelease: false
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ~>
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 27
|
93
|
+
segments:
|
94
|
+
- 2
|
95
|
+
- 5
|
96
|
+
- 0
|
97
|
+
version: 2.5.0
|
98
|
+
type: :development
|
99
|
+
version_requirements: *id005
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: guard-rspec
|
102
|
+
prerelease: false
|
103
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ~>
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
hash: 23
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
- 2
|
112
|
+
- 0
|
113
|
+
version: 0.2.0
|
114
|
+
type: :development
|
115
|
+
version_requirements: *id006
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
name: guard-bundler
|
118
|
+
prerelease: false
|
119
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
hash: 25
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
- 1
|
128
|
+
- 1
|
129
|
+
version: 0.1.1
|
130
|
+
type: :development
|
131
|
+
version_requirements: *id007
|
132
|
+
description: Guard::WEBrick automatically starts and restarts WEBrick when needed.
|
133
|
+
email:
|
134
|
+
- fnichol@nichol.ca
|
135
|
+
executables: []
|
136
|
+
|
137
|
+
extensions: []
|
138
|
+
|
139
|
+
extra_rdoc_files: []
|
140
|
+
|
141
|
+
files:
|
142
|
+
- .gitignore
|
143
|
+
- CHANGELOG.rdoc
|
144
|
+
- Gemfile
|
145
|
+
- Guardfile
|
146
|
+
- LICENSE
|
147
|
+
- README.rdoc
|
148
|
+
- Rakefile
|
149
|
+
- guard-webrick.gemspec
|
150
|
+
- lib/guard/webrick.rb
|
151
|
+
- lib/guard/webrick/server.rb
|
152
|
+
- lib/guard/webrick/templates/Guardfile
|
153
|
+
- lib/guard/webrick/version.rb
|
154
|
+
- spec/guard/webrick/server_spec.rb
|
155
|
+
- spec/guard/webrick_spec.rb
|
156
|
+
- spec/spec_helper.rb
|
157
|
+
has_rdoc: true
|
158
|
+
homepage: http://rubygems.org/gems/guard-webrick
|
159
|
+
licenses: []
|
160
|
+
|
161
|
+
post_install_message:
|
162
|
+
rdoc_options: []
|
163
|
+
|
164
|
+
require_paths:
|
165
|
+
- lib
|
166
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
hash: 3
|
172
|
+
segments:
|
173
|
+
- 0
|
174
|
+
version: "0"
|
175
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
hash: 23
|
181
|
+
segments:
|
182
|
+
- 1
|
183
|
+
- 3
|
184
|
+
- 6
|
185
|
+
version: 1.3.6
|
186
|
+
requirements: []
|
187
|
+
|
188
|
+
rubyforge_project: guard-webrick
|
189
|
+
rubygems_version: 1.6.2
|
190
|
+
signing_key:
|
191
|
+
specification_version: 3
|
192
|
+
summary: Guard gem for WEBrick
|
193
|
+
test_files:
|
194
|
+
- spec/guard/webrick/server_spec.rb
|
195
|
+
- spec/guard/webrick_spec.rb
|
196
|
+
- spec/spec_helper.rb
|