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 CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 geemus (Wesley Beary)
1
+ Copyright (c) 2012 Engine Yard
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,9 +1,10 @@
1
- require 'rack'
2
- require 'stringio'
3
- require 'logger'
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'
@@ -1,3 +1,5 @@
1
+ require 'realweb/server'
2
+
1
3
  module RealWeb
2
4
  class ForkingServer < Server
3
5
 
@@ -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
- 20.times do
123
+ Timeout.timeout(@timeout) do
89
124
  begin
90
125
  sleep 0.1
91
- open(base_uri)
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
- abort "Unable to reach RealWeb server: Problem booting #{@config_ru}"
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
@@ -1,3 +1,5 @@
1
+ require 'realweb/server'
2
+
1
3
  module RealWeb
2
4
  class ThreadServer < Server
3
5
 
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.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-11-10 00:00:00.000000000 Z
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