rack-geo-locale 0.0.8 → 0.0.10

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-geo-locale (0.0.8)
4
+ rack-geo-locale (0.0.10)
5
5
  geoip
6
6
  rack
7
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.10
Binary file
@@ -6,7 +6,7 @@ module Rack
6
6
  DATABASE = "tmp/geoip_database.dat"
7
7
 
8
8
  def initialize(app)
9
- fetch_database
9
+ @geoip = fetch_database
10
10
 
11
11
  @app = app
12
12
  end
@@ -30,24 +30,27 @@ module Rack
30
30
  private
31
31
  def parse_country(env)
32
32
  if database?
33
- if remote_addr = env["REMOTE_ADDR"]
34
- remote_addr = env["HTTP_X_FORWARDED_FOR"] if env["HTTP_X_FORWARDED_FOR"]
33
+ if addr = env["REMOTE_ADDR"]
34
+ addr = env["HTTP_X_FORWARDED_FOR"] if env["HTTP_X_FORWARDED_FOR"]
35
+ addr = addr.split(",").first.strip
35
36
 
36
- begin
37
- result = geoip.country(remote_addr).country_code2
38
- rescue Exception => e
39
- puts "WARNING: .country raised an exception #{e}"
40
- end
37
+ puts "INFO: Trying to lookup #{addr}"
38
+
39
+ result = @geoip.country(addr).country_code2
40
+
41
+ if result != "--"
42
+ puts "INFO: Found country for #{addr} #{result}"
41
43
 
42
- return result if result != "--"
44
+ result
45
+ else
46
+ puts "INFO: Didn't find country for #{addr}"
47
+ end
43
48
  else
44
49
  puts "WARNING: Didn't find env['REMOTE_ADDR']"
45
50
  end
46
51
  else
47
52
  puts "WARNING: Didn't find geoip database."
48
53
  end
49
-
50
- nil
51
54
  end
52
55
 
53
56
  def parse_locale(env)
@@ -65,7 +68,7 @@ module Rack
65
68
  end
66
69
 
67
70
  def database?
68
- ::File.exist? DATABASE
71
+ @geoip != nil
69
72
  end
70
73
 
71
74
  def fetch_database
@@ -73,16 +76,12 @@ module Rack
73
76
  puts "-> Fetching #{ENV["GEOIP_DATABASE_URI"]}"
74
77
 
75
78
  `curl --silent -o #{DATABASE}.gz #{ENV["GEOIP_DATABASE_URI"]}`
76
- `gunzip #{DATABASE}.gz`
77
- else
78
- puts "WARNING: Set the ENV['GEOIP_DATABASE_URI'] to the location of your .gz database file."
79
- end
80
- end
79
+ `gunzip -f #{DATABASE}.gz`
81
80
 
82
- def geoip
83
- if database?
84
81
  GeoIP.new(DATABASE)
85
82
  else
83
+ puts "WARNING: Set the ENV['GEOIP_DATABASE_URI'] to the location of your .gz database file."
84
+
86
85
  nil
87
86
  end
88
87
  end
@@ -1,6 +1,6 @@
1
1
  require 'rack/test'
2
- require 'rack/geo_locale'
3
2
  require 'geoip'
3
+ require 'rack/geo_locale'
4
4
 
5
5
  include Rack::Test::Methods
6
6
 
@@ -24,11 +24,21 @@ describe Rack::GeoLocale do
24
24
  last_request.env["locale.country"].should == nil
25
25
  end
26
26
 
27
+ it "should handle only passing a HTTP_X_FORWARDED_FOR field" do
28
+ get '/', {}, {"HTTP_X_FORWARDED_FOR" => "10.0.0.1"}
29
+ last_request.env["locale.country"].should == "SE"
30
+ end
31
+
27
32
  it "should take HTTP_X_FORWARDED_FOR before REMOTE_ADDR field" do
28
33
  get '/', {}, {"REMOTE_ADDR" => "10.0.0.1", "HTTP_X_FORWARDED_FOR" => "10.0.0.2"}
29
34
  last_request.env["locale.country"].should == "US"
30
35
  end
31
36
 
37
+ it "should handle several IP adresses in the REMOTE_ADDR field" do
38
+ get '/', {}, {"REMOTE_ADDR" => "10.0.0.1, 127.0.0.1"}
39
+ last_request.env["locale.country"].should == "SE"
40
+ end
41
+
32
42
  it "should resolve 10.0.0.1 to SE" do
33
43
  get '/', {}, {"REMOTE_ADDR" => "10.0.0.1"}
34
44
  last_request.env["locale.country"].should == "SE"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-geo-locale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.10
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-04-05 00:00:00.000000000 Z
12
+ date: 2012-04-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70227635909720 !ruby/object:Gem::Requirement
16
+ requirement: &70196899531500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70227635909720
24
+ version_requirements: *70196899531500
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack-test
27
- requirement: &70227635909260 !ruby/object:Gem::Requirement
27
+ requirement: &70196899502360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70227635909260
35
+ version_requirements: *70196899502360
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &70227635908820 !ruby/object:Gem::Requirement
38
+ requirement: &70196899479180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70227635908820
46
+ version_requirements: *70196899479180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack
49
- requirement: &70227635908320 !ruby/object:Gem::Requirement
49
+ requirement: &70196899415180 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70227635908320
57
+ version_requirements: *70196899415180
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: geoip
60
- requirement: &70227635907640 !ruby/object:Gem::Requirement
60
+ requirement: &70196899414340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70227635907640
68
+ version_requirements: *70196899414340
69
69
  description: Simple Rack middleware for setting the locale.country via GeoIP using
70
70
  the MaxMind GeoIP database, and setting the locale.languages based on the HTTP_ACCEPT_LANGUAGE
71
71
  header.
@@ -81,6 +81,7 @@ files:
81
81
  - LICENSE
82
82
  - Readme.md
83
83
  - VERSION
84
+ - fixtures/GeoIP.dat.gz
84
85
  - lib/rack/geo_locale.rb
85
86
  - rack-geo-locale.gemspec
86
87
  - spec/lib/rack/geo_locale_spec.rb