Skip to content

Commit

Permalink
Merge pull request #1161 from route/fix_server_host
Browse files Browse the repository at this point in the history
Make `Capybara.server_host` working properly
  • Loading branch information
jnicklas committed Sep 16, 2013
2 parents 5e1d159 + 74d1539 commit d76c013
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 15 deletions.
14 changes: 11 additions & 3 deletions lib/capybara.rb
Expand Up @@ -16,10 +16,10 @@ class InfiniteRedirectError < CapybaraError; end

class << self
attr_accessor :asset_host, :app_host, :run_server, :default_host, :always_include_port
attr_accessor :server_host, :server_port, :exact, :match, :exact_options, :visible_text_only
attr_accessor :server_port, :exact, :match, :exact_options, :visible_text_only
attr_accessor :default_selector, :default_wait_time, :ignore_hidden_elements
attr_accessor :save_and_open_page_path, :automatic_reload, :raise_server_errors
attr_writer :default_driver, :current_driver, :javascript_driver, :session_name
attr_writer :default_driver, :current_driver, :javascript_driver, :session_name, :server_host
attr_accessor :app

##
Expand Down Expand Up @@ -166,7 +166,7 @@ def string(html)
#
def run_default_server(app, port)
require 'rack/handler/webrick'
Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
Rack::Handler::WEBrick.run(app, :Host => server_host, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
end

##
Expand Down Expand Up @@ -214,6 +214,14 @@ def using_driver(driver)
@current_driver = previous_driver
end

##
#
# @return [String] The IP address bound by default server
#
def server_host
@server_host || '127.0.0.1'
end

##
#
# Yield a block using a specific wait time
Expand Down
10 changes: 3 additions & 7 deletions lib/capybara/server.rb
Expand Up @@ -31,13 +31,13 @@ def ports
end
end

attr_reader :app, :port
attr_reader :app, :port, :host

def initialize(app, port=Capybara.server_port)
def initialize(app, port=Capybara.server_port, host=Capybara.server_host)
@app = app
@middleware = Middleware.new(@app)
@server_thread = nil # supress warnings
@port = port
@host, @port = host, port
@port ||= Capybara::Server.ports[@app.object_id]
@port ||= find_available_port
end
Expand All @@ -50,10 +50,6 @@ def error
@middleware.error
end

def host
Capybara.server_host || "127.0.0.1"
end

def responsive?
return false if @server_thread && @server_thread.join(0)

Expand Down
18 changes: 13 additions & 5 deletions spec/server_spec.rb
Expand Up @@ -18,13 +18,21 @@
end

it "should bind to the specified host" do
Capybara.server_host = '0.0.0.0'
begin
app = proc { |env| [200, {}, ['Hello Server!']] }

app = proc { |env| [200, {}, ["Hello Server!"]]}
server = Capybara::Server.new(app).boot
server.host.should == '0.0.0.0'
Capybara.server_host = '127.0.0.1'
server = Capybara::Server.new(app).boot
res = Net::HTTP.get(URI("http://127.0.0.1:#{server.port}"))
expect(res).to eq('Hello Server!')

Capybara.server_host = nil
Capybara.server_host = '0.0.0.0'
server = Capybara::Server.new(app).boot
res = Net::HTTP.get(URI("http://127.0.0.1:#{server.port}"))
expect(res).to eq('Hello Server!')
ensure
Capybara.server_host = nil
end
end

it "should use specified port" do
Expand Down

0 comments on commit d76c013

Please sign in to comment.