shamrock 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -22,13 +22,13 @@ You can then easily start the stub service either for the spec examples that nee
22
22
  globally in your spec_helper file. You can replace the Proc below with any Rack application.
23
23
  In some cases, we use Sinatra for stub services.
24
24
 
25
- my_rack_app = proc {|env| [200, {"Content-Type" => "text/html"}, ["Hello Rack!"]]}
26
- @service = Shamrock::Service.new(my_rack_app)
27
- @service.start
25
+ my_rack_app = proc {|env| [200, {"Content-Type" => "text/html"}, ["Hello Rack!"]]}
26
+ @service = Shamrock::Service.new(my_rack_app)
27
+ @service.start
28
28
 
29
29
  After you are done with the service:
30
30
 
31
- @service.stop
31
+ @service.stop
32
32
 
33
33
  ## Credits
34
34
 
@@ -3,8 +3,6 @@ module Shamrock
3
3
 
4
4
  attr_reader :port, :url
5
5
 
6
- PORT_RANGE = 9220..9260
7
-
8
6
  DEFAULT_OPTIONS = {
9
7
  handler: Rack::Handler::WEBrick,
10
8
  monitor: Shamrock::Monitor
@@ -13,18 +11,18 @@ module Shamrock
13
11
  def initialize(rack_app, options = {})
14
12
  @rack_app = rack_app
15
13
 
16
- options = DEFAULT_OPTIONS.merge(options)
14
+ @options = DEFAULT_OPTIONS.merge(options)
17
15
 
18
- @handler = options[:handler]
16
+ @handler = @options.delete(:handler)
19
17
 
20
- @port = options[:port] || random_port
18
+ @port = @options.delete(:port) || find_available_port
21
19
  @url = "http://localhost:#{port}"
22
- @monitor = options[:monitor].new(Http.new(url))
20
+ @monitor = @options.delete(:monitor).new(Http.new(url))
23
21
  end
24
22
 
25
23
  def start
26
24
  @thread = Thread.new do
27
- @handler.run(@rack_app, Port: port)
25
+ @handler.run(@rack_app, @options.merge(Port: port))
28
26
  end
29
27
 
30
28
  @monitor.wait_until_ready
@@ -36,12 +34,15 @@ module Shamrock
36
34
 
37
35
  private
38
36
 
39
- def random_port
40
- Random.rand(PORT_RANGE)
37
+ def find_available_port
38
+ server = TCPServer.new('127.0.0.1', 0)
39
+ server.addr[1]
40
+ ensure
41
+ server.close if server
41
42
  end
42
43
 
43
44
  def server_name
44
45
  @rack_app.class.name
45
46
  end
46
47
  end
47
- end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module Shamrock
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -11,7 +11,7 @@ describe Shamrock::Service do
11
11
  service.port.should == 8080
12
12
  end
13
13
 
14
- it "should assign a random port of none is given to initializer" do
14
+ it "should assign an available port if none is given to initializer" do
15
15
  service = Shamrock::Service.new(@rack_app)
16
16
  service.port.should_not be_nil
17
17
  end
@@ -28,6 +28,16 @@ describe Shamrock::Service do
28
28
  service.start
29
29
  end
30
30
 
31
+ it "should start the server with custom handler options" do
32
+ monitor = mock('monitor', wait_until_ready: true)
33
+ monitor_class = mock('monitor class', new: monitor)
34
+
35
+ handler = mock('handler')
36
+ service = Shamrock::Service.new(@rack_app, handler: handler, monitor: monitor_class, foo: 'bar')
37
+ handler.should_receive(:run).with(@rack_app, Port: service.port, foo: 'bar')
38
+ service.start
39
+ end
40
+
31
41
  it "should wait for the server to become available" do
32
42
  monitor = mock('monitor')
33
43
  monitor_class = mock('monitor class', new: monitor)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shamrock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-10 00:00:00.000000000 Z
12
+ date: 2012-06-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70120244957380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ version_requirements: *70120244957380
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70120244956820 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ~>
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: 0.9.2.2
38
33
  type: :development
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.9.2.2
35
+ version_requirements: *70120244956820
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: rspec
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70120244956220 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: 2.10.0
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 2.10.0
46
+ version_requirements: *70120244956220
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: simplecov
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70120244955700 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ~>
@@ -69,12 +54,7 @@ dependencies:
69
54
  version: 0.6.4
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 0.6.4
57
+ version_requirements: *70120244955700
78
58
  description: Shamrock helps you to use stub services in your application by starting
79
59
  a rack service in a Thread
80
60
  email:
@@ -121,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
101
  version: '0'
122
102
  requirements: []
123
103
  rubyforge_project:
124
- rubygems_version: 1.8.21
104
+ rubygems_version: 1.8.17
125
105
  signing_key:
126
106
  specification_version: 3
127
107
  summary: Facilitates setting up stub services in your application