realweb 1.0.0 → 1.0.1
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/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
|