autometal-geoip 0.2.2 → 0.3.3
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.rdoc +18 -3
- data/Rakefile +0 -1
- data/autometal-geoip.gemspec +2 -5
- data/lib/geoip.rb +24 -3
- data/lib/geoip/installer.rb +4 -3
- data/test/test_geoip.rb +7 -0
- metadata +9 -23
data/README.rdoc
CHANGED
@@ -34,7 +34,13 @@ You can also pass it a domain instead of an IP address
|
|
34
34
|
@geo = Autometal::Geoip.new("www.google.com")
|
35
35
|
@geo.country
|
36
36
|
=> US
|
37
|
-
|
37
|
+
|
38
|
+
If you have purchased the Organization edition of the GeoIP database, you can also do this:
|
39
|
+
@geo.organization
|
40
|
+
=> Google
|
41
|
+
Currently, the gem does not support installing the file itself, you will need to make sure that GeoIPOrg.dat is located in /usr/local/shared/
|
42
|
+
|
43
|
+
|
38
44
|
You can make any object Geo-location aware, as long as it has an IP or a domain attribute:
|
39
45
|
require "rubygems"
|
40
46
|
require "geoip"
|
@@ -44,6 +50,7 @@ You can make any object Geo-location aware, as long as it has an IP or a domain
|
|
44
50
|
Site.new(:domain => "google.com")
|
45
51
|
site.country
|
46
52
|
=> "US"
|
53
|
+
site.organization # if GeoIPOrg.dat is not installed, this will return nil
|
47
54
|
|
48
55
|
The above will work if your class has a +domain+ attribute.
|
49
56
|
You can override the attribute used to geolocate by overriding +geo_attr+
|
@@ -61,14 +68,22 @@ You can override the attribute used to geolocate by overriding +geo_attr+
|
|
61
68
|
== REQUIREMENTS:
|
62
69
|
|
63
70
|
* GeoIP C bindings (installed along with the Gem)
|
64
|
-
* Active Support
|
65
|
-
This isn't really needed, I just like using the 1.day.ago stuff too much...
|
66
71
|
|
67
72
|
== INSTALL:
|
68
73
|
|
69
74
|
sudo gem install autometal-geoip
|
70
75
|
sudo install_geoip (unless already installed)
|
71
76
|
|
77
|
+
== CHANGELOG
|
78
|
+
* 0.3.3
|
79
|
+
Removed active_support dependency
|
80
|
+
* 0.2.2
|
81
|
+
Reworked class hierarchy, added support for GeoIP's Organization database
|
82
|
+
* 0.1.3
|
83
|
+
Installer bugfix, fixes datafile install crash
|
84
|
+
* 0.1.1
|
85
|
+
Initial release
|
86
|
+
|
72
87
|
== LICENSE:
|
73
88
|
|
74
89
|
Copyright (c) 2010 Achillefs Charmpilas, Humbucker Ltd
|
data/Rakefile
CHANGED
@@ -9,7 +9,6 @@ $hoe = Hoe.spec 'autometal-geoip' do
|
|
9
9
|
self.developer 'Achillefs Charmpilas', 'ac@humbuckercode.co.uk'
|
10
10
|
self.post_install_message = File.read('PostInstall.txt')
|
11
11
|
self.rubyforge_name = self.name
|
12
|
-
self.extra_deps = [['activesupport','>= 0']]
|
13
12
|
end
|
14
13
|
|
15
14
|
require 'newgem/tasks'
|
data/autometal-geoip.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{autometal-geoip}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Achillefs Charmpilas"]
|
9
|
-
s.date = %q{2010-12-
|
9
|
+
s.date = %q{2010-12-08}
|
10
10
|
s.default_executable = %q{install_geoip}
|
11
11
|
s.description = %q{A wrapper to MaxMind's GeoIP services, that can work with both free and paid versions.
|
12
12
|
Also provides geo-location methods to Active Record and Sequel Models.
|
@@ -37,16 +37,13 @@ For more information on autometal-geoip, see http://humbuckercode.co.uk/licks/ge
|
|
37
37
|
s.specification_version = 3
|
38
38
|
|
39
39
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
41
40
|
s.add_development_dependency(%q<rubyforge>, [">= 2.0.4"])
|
42
41
|
s.add_development_dependency(%q<hoe>, [">= 2.6.2"])
|
43
42
|
else
|
44
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
45
43
|
s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
|
46
44
|
s.add_dependency(%q<hoe>, [">= 2.6.2"])
|
47
45
|
end
|
48
46
|
else
|
49
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
50
47
|
s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
|
51
48
|
s.add_dependency(%q<hoe>, [">= 2.6.2"])
|
52
49
|
end
|
data/lib/geoip.rb
CHANGED
@@ -3,14 +3,28 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
3
3
|
|
4
4
|
module Autometal
|
5
5
|
class Geoip
|
6
|
-
VERSION = '0.
|
6
|
+
VERSION = '0.3.3'
|
7
7
|
DATA_FILE_PATH = "/usr/local/share/GeoIP/"
|
8
8
|
BIN = "geoiplookup"
|
9
|
+
def initialize ip_or_domain
|
10
|
+
@org = Organization.new(ip_or_domain) if Organization.installed?
|
11
|
+
@geo = City.new(ip_or_domain) if City.installed?
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(m, *args, &block)
|
15
|
+
return @org.send(m, *args, &block) if @org and @org.respond_to?(m)
|
16
|
+
return @geo.send(m, *args, &block) if @geo and @geo.respond_to?(m)
|
17
|
+
end
|
9
18
|
|
10
19
|
def self.bin_installed?
|
11
20
|
%x{ #{self::BIN} --version } == "" ? false : true
|
12
21
|
end
|
13
|
-
|
22
|
+
=begin rdoc
|
23
|
+
Extensible class that uses the Geoip binaries and data files to geolocate IPs and Hostnames.
|
24
|
+
To extend it to use a database, you will need to subclass Geoip::Package, define process_response, and self.data_file
|
25
|
+
|
26
|
+
See geoip/city.rb and geoip/organization.rb for extension examples
|
27
|
+
=end
|
14
28
|
class Package
|
15
29
|
attr_accessor :version
|
16
30
|
def initialize ip_or_domain
|
@@ -19,6 +33,14 @@ module Autometal
|
|
19
33
|
process_response
|
20
34
|
end
|
21
35
|
|
36
|
+
def process_response
|
37
|
+
# deine this in the extension models
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.data_file
|
41
|
+
|
42
|
+
end
|
43
|
+
|
22
44
|
def self.installed?
|
23
45
|
return false unless Geoip.bin_installed?
|
24
46
|
return false unless File.exists? data_file
|
@@ -26,7 +48,6 @@ module Autometal
|
|
26
48
|
end
|
27
49
|
|
28
50
|
def lookup ip_or_domain
|
29
|
-
puts "#{Geoip::BIN} -f #{self.class.data_file} #{ip_or_domain}"
|
30
51
|
%x{ #{Geoip::BIN} -f #{self.class.data_file} #{ip_or_domain} }
|
31
52
|
end
|
32
53
|
end
|
data/lib/geoip/installer.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require "active_support"
|
2
1
|
require "fileutils"
|
3
|
-
|
4
2
|
module Autometal
|
5
3
|
class Geoip
|
4
|
+
=begin rdoc
|
5
|
+
Installer class that handles downloading and installing databases and binaries
|
6
|
+
=end
|
6
7
|
class Installer
|
7
8
|
BASE_DB_URL = "http://geolite.maxmind.com/download/geoip/database/*.dat.gz"
|
8
9
|
PACKAGE_URL = "http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz"
|
@@ -25,7 +26,7 @@ module Autometal
|
|
25
26
|
|
26
27
|
def install_database
|
27
28
|
target = File.join(Autometal::Geoip::DATA_FILE_PATH,"#{@package_name}.dat")
|
28
|
-
if File.exists?(target) and File::ctime(target) >
|
29
|
+
if File.exists?(target) and File::ctime(target) > Time.now - (30*24*60*60)
|
29
30
|
puts "Datafile is up to date, skipping"
|
30
31
|
else
|
31
32
|
`cd #{File.dirname(__FILE__)}/../../shellscripts/ && ./install_db #{@db_url}`
|
data/test/test_geoip.rb
CHANGED
@@ -15,6 +15,13 @@ class TestGeoip < Test::Unit::TestCase
|
|
15
15
|
assert_not_nil @dummy.organization if Autometal::Geoip::Organization.installed?
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_geopi_proxy_class_works
|
19
|
+
assert_not_nil Autometal::Geoip.new(@dummy.ip).city, "City Package Delegation should work"
|
20
|
+
if Autometal::Geoip::Organization.installed?
|
21
|
+
assert_not_nil Autometal::Geoip.new(@dummy.ip).organization, "Organization Package Delegation should work"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
18
25
|
def test_gem_can_install_binaries
|
19
26
|
assert_nothing_raised do
|
20
27
|
Autometal::Geoip::Installer.new("GeoLiteCity")
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autometal-geoip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 3
|
10
|
+
version: 0.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Achillefs Charmpilas
|
@@ -15,27 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-08 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
name: activesupport
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
33
|
-
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
21
|
- !ruby/object:Gem::Dependency
|
36
22
|
name: rubyforge
|
37
23
|
prerelease: false
|
38
|
-
requirement: &
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
39
25
|
none: false
|
40
26
|
requirements:
|
41
27
|
- - ">="
|
@@ -47,11 +33,11 @@ dependencies:
|
|
47
33
|
- 4
|
48
34
|
version: 2.0.4
|
49
35
|
type: :development
|
50
|
-
version_requirements: *
|
36
|
+
version_requirements: *id001
|
51
37
|
- !ruby/object:Gem::Dependency
|
52
38
|
name: hoe
|
53
39
|
prerelease: false
|
54
|
-
requirement: &
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
55
41
|
none: false
|
56
42
|
requirements:
|
57
43
|
- - ">="
|
@@ -63,7 +49,7 @@ dependencies:
|
|
63
49
|
- 2
|
64
50
|
version: 2.6.2
|
65
51
|
type: :development
|
66
|
-
version_requirements: *
|
52
|
+
version_requirements: *id002
|
67
53
|
description: |-
|
68
54
|
A wrapper to MaxMind's GeoIP services, that can work with both free and paid versions.
|
69
55
|
Also provides geo-location methods to Active Record and Sequel Models.
|