mtodd-geoip 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/geoip.c +11 -0
- data/test.rb +33 -8
- metadata +1 -1
data/Rakefile
CHANGED
data/geoip.c
CHANGED
@@ -181,6 +181,16 @@ VALUE rb_geoip_addr_to_num(VALUE self, VALUE addr) {
|
|
181
181
|
return UINT2NUM((unsigned long)_GeoIP_addr_to_num(STR2CSTR(addr)));
|
182
182
|
}
|
183
183
|
|
184
|
+
VALUE rb_geoip_num_to_addr(VALUE self, VALUE num) {
|
185
|
+
VALUE num_type = TYPE(num);
|
186
|
+
switch(num_type) {
|
187
|
+
case T_FIXNUM: break;
|
188
|
+
case T_BIGNUM: break;
|
189
|
+
default: rb_raise(rb_eTypeError, "wrong argument type %s (expected Fixnum or Bignum)", rb_obj_classname(num));
|
190
|
+
}
|
191
|
+
return rb_str_new2((char*)_GeoIP_num_to_addr(NULL, (unsigned long)NUM2UINT(num)));
|
192
|
+
}
|
193
|
+
|
184
194
|
void Init_geoip()
|
185
195
|
{
|
186
196
|
mGeoIP = rb_define_module("GeoIP");
|
@@ -198,4 +208,5 @@ void Init_geoip()
|
|
198
208
|
rb_define_method( mGeoIP_Organization, "look_up", rb_geoip_org_look_up, 1);
|
199
209
|
|
200
210
|
rb_define_singleton_method(mGeoIP, "addr_to_num", rb_geoip_addr_to_num, 1);
|
211
|
+
rb_define_singleton_method(mGeoIP, "num_to_addr", rb_geoip_num_to_addr, 1);
|
201
212
|
}
|
data/test.rb
CHANGED
@@ -16,16 +16,22 @@ end
|
|
16
16
|
|
17
17
|
class GeoIPTest < Test::Unit::TestCase
|
18
18
|
|
19
|
+
def setup
|
20
|
+
@ip = "24.24.24.24"
|
21
|
+
@ipnum = 16777216*24 + 65536*24 + 256*24 + 24
|
22
|
+
|
23
|
+
@large_ip = "245.245.245.245"
|
24
|
+
@large_ipnum = 16777216*245 + 65536*245 + 256*245 + 245
|
25
|
+
end
|
26
|
+
|
27
|
+
# addr_to_num
|
28
|
+
|
19
29
|
def test_addr_to_num_converts_an_ip_to_an_ipnum
|
20
|
-
|
21
|
-
ipnum = 16777216*24 + 65536*24 + 256*24 + 24
|
22
|
-
assert_equal ipnum, GeoIP.addr_to_num(ip)
|
30
|
+
assert_equal @ipnum, GeoIP.addr_to_num(@ip)
|
23
31
|
end
|
24
32
|
|
25
33
|
def test_addr_to_num_converts_large_ips_to_an_ipnum_correctly
|
26
|
-
|
27
|
-
ipnum = 16777216*245 + 65536*245 + 256*245 + 245
|
28
|
-
assert_equal ipnum, GeoIP.addr_to_num(ip)
|
34
|
+
assert_equal @large_ipnum, GeoIP.addr_to_num(@large_ip)
|
29
35
|
end
|
30
36
|
|
31
37
|
def test_addr_to_num_expects_an_ip_string
|
@@ -38,13 +44,32 @@ class GeoIPTest < Test::Unit::TestCase
|
|
38
44
|
assert_equal 0, GeoIP.addr_to_num("foo.bar")
|
39
45
|
end
|
40
46
|
|
47
|
+
# num_to_addr
|
48
|
+
|
49
|
+
def test_num_to_addr_converts_an_ipnum_to_an_ip
|
50
|
+
assert_equal @ip, GeoIP.num_to_addr(@ipnum)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_num_to_addr_converts_large_ipnums_to_an_ip_correctly
|
54
|
+
assert_equal @large_ip, GeoIP.num_to_addr(@large_ipnum)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_num_to_addr_expects_a_numeric_ip
|
58
|
+
assert_raises TypeError do
|
59
|
+
GeoIP.num_to_addr(nil)
|
60
|
+
end
|
61
|
+
assert_raises TypeError do
|
62
|
+
GeoIP.num_to_addr("foo.bar")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
41
66
|
end
|
42
67
|
|
43
68
|
class GeoIPCityTest < Test::Unit::TestCase
|
44
69
|
|
45
70
|
def setup
|
46
71
|
## Change me!
|
47
|
-
@dbfile = '/
|
72
|
+
@dbfile = '/usr/local/GeoIP/share/GeoIP/GeoLiteCity.dat'
|
48
73
|
end
|
49
74
|
|
50
75
|
def test_construction_default
|
@@ -93,7 +118,7 @@ class GeoIPOrgTest < Test::Unit::TestCase
|
|
93
118
|
|
94
119
|
def setup
|
95
120
|
## Change me!
|
96
|
-
@dbfile = '/
|
121
|
+
@dbfile = '/usr/local/GeoIP/share/GeoIP/GeoIPOrg.dat'
|
97
122
|
end
|
98
123
|
|
99
124
|
def test_construction_default
|