shamrock 0.0.5 → 0.0.6

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/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