realweb 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/lib/realweb.rb +5 -8
- data/lib/realweb/forking_server.rb +2 -0
- data/lib/realweb/server.rb +42 -8
- data/lib/realweb/thread_server.rb +2 -0
- metadata +19 -8
data/LICENSE
CHANGED
data/lib/realweb.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require 'open-uri'
|
1
|
+
require 'realweb/server'
|
2
|
+
require 'realweb/thread_server'
|
3
|
+
require 'realweb/forking_server'
|
5
4
|
|
6
5
|
module RealWeb
|
6
|
+
ServerUnreachable = Class.new(RuntimeError)
|
7
|
+
|
7
8
|
class << self
|
8
9
|
def start_server_in_thread(*args)
|
9
10
|
ThreadServer.new(*args) { |server| server.start }
|
@@ -24,7 +25,3 @@ module RealWeb
|
|
24
25
|
alias with_server with_server_in_fork
|
25
26
|
end
|
26
27
|
end
|
27
|
-
|
28
|
-
require 'realweb/server'
|
29
|
-
require 'realweb/thread_server'
|
30
|
-
require 'realweb/forking_server'
|
data/lib/realweb/server.rb
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
require 'rack'
|
2
|
+
require 'timeout'
|
3
|
+
require 'logger'
|
4
|
+
require 'uri'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'stringio'
|
7
|
+
|
1
8
|
module RealWeb
|
2
9
|
class Server
|
3
10
|
attr_reader :host, :rack_server
|
@@ -5,6 +12,17 @@ module RealWeb
|
|
5
12
|
DEFAULT_PORT_RANGE = 8000..10000
|
6
13
|
DEFAULT_HOST = '127.0.0.1'
|
7
14
|
DEFAULT_LOGGER = Logger.new(StringIO.new)
|
15
|
+
DEFAULT_TIMEOUT = 2 # seconds
|
16
|
+
|
17
|
+
# return true if available, false if still waiting
|
18
|
+
def self.server_ready?(server)
|
19
|
+
open(server.base_uri)
|
20
|
+
true
|
21
|
+
rescue OpenURI::HTTPError
|
22
|
+
true
|
23
|
+
rescue Errno::ECONNREFUSED => e
|
24
|
+
false
|
25
|
+
end
|
8
26
|
|
9
27
|
def self.with_rackup(*args)
|
10
28
|
new(*args) do |server|
|
@@ -14,6 +32,21 @@ module RealWeb
|
|
14
32
|
end
|
15
33
|
end
|
16
34
|
|
35
|
+
# Create a RealWeb::Server object, either a RealWeb::ForkingServer or
|
36
|
+
# a RealWeb::ThreadServer.
|
37
|
+
#
|
38
|
+
# :port_range - Range specifying acceptable tcp ports to boot on.
|
39
|
+
# :logger - An instance of Logger.
|
40
|
+
# :host - Alternative host. Default is 127.0.0.1.
|
41
|
+
# :verbose - Print server logs and errors to stdout/err
|
42
|
+
# :timeout - Timout in seconds to wait for the server to boot.
|
43
|
+
# :ready - A Proc that returns true when the server is ready, or false
|
44
|
+
# if it is not ready yet. This proc will be called every 100ms with the
|
45
|
+
# server as an argument. If blank, an open-uri based check will be used.
|
46
|
+
# :pre_spawn_callback - a lambda to be called with the server object before
|
47
|
+
# spawning the server.
|
48
|
+
#
|
49
|
+
# Any remaining options will be passed to Rack::Server on boot.
|
17
50
|
def initialize(config_ru, options = {})
|
18
51
|
@config_ru = config_ru
|
19
52
|
@running = false
|
@@ -22,6 +55,8 @@ module RealWeb
|
|
22
55
|
@logger = options.delete(:logger) || DEFAULT_LOGGER
|
23
56
|
@host = options.delete(:host) || DEFAULT_HOST
|
24
57
|
@verbose = options.delete(:verbose) || false
|
58
|
+
@timeout = options.delete(:timeout) || DEFAULT_TIMEOUT
|
59
|
+
@ready = options.delete(:ready) || self.class.method(:server_ready?)
|
25
60
|
|
26
61
|
@pre_spawn_callback = options.delete(:pre_spawn_callback)
|
27
62
|
@rack_options = options
|
@@ -85,17 +120,16 @@ module RealWeb
|
|
85
120
|
end
|
86
121
|
|
87
122
|
def wait_for_server
|
88
|
-
|
123
|
+
Timeout.timeout(@timeout) do
|
89
124
|
begin
|
90
125
|
sleep 0.1
|
91
|
-
|
92
|
-
return
|
93
|
-
rescue OpenURI::HTTPError
|
94
|
-
return
|
95
|
-
rescue Errno::ECONNREFUSED => e
|
96
|
-
end
|
126
|
+
end until @ready.call(self)
|
97
127
|
end
|
98
|
-
|
128
|
+
rescue Timeout::Error
|
129
|
+
raise RealWeb::ServerUnreachable, <<-ERROR
|
130
|
+
Unable to reach RealWeb server after #{@timeout}s: #{@config_ru}.#{@verbose || "\nBoot RealWeb with {verbose: true} to print errrors."}
|
131
|
+
ERROR
|
99
132
|
end
|
133
|
+
|
100
134
|
end
|
101
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: realweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rack
|
@@ -77,6 +77,22 @@ dependencies:
|
|
77
77
|
- - ! '>='
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: simplecov
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
80
96
|
description: Easily runs a rack app for tests that hit web APIs
|
81
97
|
email: cloud-engineering@engineyard.com
|
82
98
|
executables: []
|
@@ -103,18 +119,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
119
|
- - ! '>='
|
104
120
|
- !ruby/object:Gem::Version
|
105
121
|
version: '0'
|
106
|
-
segments:
|
107
|
-
- 0
|
108
|
-
hash: -1675846270648618555
|
109
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
123
|
none: false
|
111
124
|
requirements:
|
112
125
|
- - ! '>='
|
113
126
|
- !ruby/object:Gem::Version
|
114
127
|
version: '0'
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: -1675846270648618555
|
118
128
|
requirements: []
|
119
129
|
rubyforge_project:
|
120
130
|
rubygems_version: 1.8.24
|
@@ -122,3 +132,4 @@ signing_key:
|
|
122
132
|
specification_version: 3
|
123
133
|
summary: Easily runs a rack app for tests that hit web APIs
|
124
134
|
test_files: []
|
135
|
+
has_rdoc: false
|