diff --git a/lib/geocoder/request.rb b/lib/geocoder/request.rb index 3e1dbc823a7d7d769a289f5dbed9adeadb982e07..f02aab4770dea1c1a563fc653778b130aaaa0bb5 100644 --- a/lib/geocoder/request.rb +++ b/lib/geocoder/request.rb @@ -8,7 +8,7 @@ module Geocoder if env.has_key?('HTTP_X_REAL_IP') @location = Geocoder.search(env['HTTP_X_REAL_IP']).first elsif env.has_key?('HTTP_X_FORWARDED_FOR') - @location = Geocoder.search(env['HTTP_X_FORWARDED_FOR']).first + @location = Geocoder.search(env['HTTP_X_FORWARDED_FOR'].split(/\s*,\s*/)[0]).first else @location = Geocoder.search(ip).first end diff --git a/test/request_test.rb b/test/request_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..3acbe2841a0d9bc307eeb0a0ec3e301cfe70e901 --- /dev/null +++ b/test/request_test.rb @@ -0,0 +1,29 @@ +# encoding: utf-8 +require 'test_helper' + +class RequestTest < Test::Unit::TestCase + class MockRequest + include Geocoder::Request + attr_accessor :env, :ip + def initialize(env={}, ip="") + @env = env + @ip = ip + end + end + def test_http_x_real_ip + req = MockRequest.new({"HTTP_X_REAL_IP" => "74.200.247.59"}) + assert req.location.is_a?(Geocoder::Result::Freegeoip) + end + def test_http_x_forwarded_for_without_proxy + req = MockRequest.new({"HTTP_X_FORWARDED_FOR" => "74.200.247.59"}) + assert req.location.is_a?(Geocoder::Result::Freegeoip) + end + def test_http_x_forwarded_for_with_proxy + req = MockRequest.new({"HTTP_X_FORWARDED_FOR" => "74.200.247.59, 74.200.247.59"}) + assert req.location.is_a?(Geocoder::Result::Freegeoip) + end + def test_with_request_ip + req = MockRequest.new({}, "74.200.247.59") + assert req.location.is_a?(Geocoder::Result::Freegeoip) + end +end \ No newline at end of file