minion_server 0.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.
Files changed (2) hide show
  1. data/lib/minion_server.rb +52 -0
  2. metadata +93 -0
@@ -0,0 +1,52 @@
1
+ require "socket"
2
+ require "rack"
3
+
4
+ class MinionServer
5
+ VERSION = "0.0.1"
6
+
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def start(host = "localhost", port = 4000)
12
+ #puts "== Starting #{@app.inspect}"
13
+ @pid_server = fork do
14
+ Rack::Server.start(:app => @app, :server => 'webrick', :environment => :none, :daemonize => false, :Host => host, :Port => port)
15
+ end
16
+ wait_for_service(host, port)
17
+ self
18
+ end
19
+
20
+ def shutdown
21
+ #puts "== Stopping #{@app.inspect}\n\n"
22
+ Process.kill(:INT, @pid_server) # send ctrl+c to webrick
23
+ Process.waitpid(@pid_server) # waiting his life go to void ...
24
+ end
25
+
26
+ protected
27
+
28
+ def listening?(host, port)
29
+ begin
30
+ socket = ::TCPSocket.new(host, port)
31
+ socket.close unless socket.nil?
32
+ true
33
+ rescue Errno::ECONNREFUSED,
34
+ Errno::EBADF, # Windows
35
+ Errno::EADDRNOTAVAIL # Windows
36
+ false
37
+ end
38
+ end
39
+
40
+ def wait_for_service(host, port, timeout = 5)
41
+ start_time = Time.now
42
+
43
+ until listening?(host, port)
44
+ if timeout && (Time.now > (start_time + timeout))
45
+ raise SocketError.new("Socket did not open within #{timeout} seconds")
46
+ end
47
+ end
48
+
49
+ true
50
+ end
51
+
52
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minion_server
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Roger Leite
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-11-21 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ description: Tiny local server. Useful to mock servers in integration tests.
49
+ email:
50
+ - roger.barreto@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - lib/minion_server.rb
59
+ homepage: https://github.com/rogerleite/minion_server
60
+ licenses: []
61
+
62
+ post_install_message:
63
+ rdoc_options: []
64
+
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.8.15
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Tiny local server. Useful to mock servers in integration tests.
92
+ test_files: []
93
+