geoipdb 0.4.2 → 0.4.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/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ .bundle
2
+ .yardoc
3
+ Gemfile.lock
4
+ coverage
5
+ doc
6
+ ext/Makefile
7
+ ext/geoipdb/Makefile
8
+ ext/geoipdb/geoipdb.bundle
9
+ ext/geoipdb/geoipdb.o
10
+ ext/geoipdb/ipdb.o
11
+ pkg
12
+ rdoc
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create ruby-1.9.3-p286@geoipdb
data/Gemfile CHANGED
@@ -1,13 +1,10 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
1
+ source :rubygems
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
3
  group :development do
9
- gem "rspec", "~> 2.1.0"
10
- gem "bundler", "~> 1.0.0"
11
- gem "jeweler", "~> 1.5.1"
12
- gem "rcov", ">= 0"
4
+ gem 'bundler'
5
+ gem 'rake'
6
+ gem 'redcarpet'
7
+ gem 'rspec'
8
+ gem 'simplecov'
9
+ gem 'yard'
13
10
  end
data/Rakefile CHANGED
@@ -1,49 +1,8 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'rake'
1
+ #!/usr/bin/env rake
11
2
 
12
- require 'jeweler'
13
- Jeweler::Tasks.new do |gem|
14
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
- gem.name = "geoipdb"
16
- gem.homepage = "http://github.com/madvertise/geoipdb"
17
- gem.license = "MIT"
18
- gem.summary = %Q{Fast (>3 Mio queries/sec!!!) GeoIpDb implementation for Ruby using C-Extensions.}
19
- gem.description = %Q{Returns a GeoLocation and additional information for given IP. Reads Data from CSV-Files and uses internal binary caching.}
20
- gem.email = "eugeniusmartinus@googlemail.com"
21
- gem.authors = ["Eugen Martin", "Martin Karlsch"]
22
- gem.extensions = ['ext/geoipdb/extconf.rb']
23
- gem.require_paths = ["lib","ext"]
24
-
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
3
+ require "bundler/setup"
4
+ require "bundler/gem_tasks"
27
5
 
28
- require 'rspec/core'
29
- require 'rspec/core/rake_task'
30
- RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = FileList['spec/**/*_spec.rb']
32
- end
6
+ Dir['tasks/**/*.rake'].each { |t| load t }
33
7
 
34
- RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
37
- end
38
-
39
- task :default => :spec
40
-
41
- require 'rake/rdoctask'
42
- Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
-
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "geoipdb #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
49
- end
8
+ task :default => [:spec]
data/ext/geoipdb/ipdb.c CHANGED
@@ -7,59 +7,59 @@
7
7
  #include <sys/time.h>
8
8
 
9
9
  const char country_iso2_codes[253][3] = { "--","ap","eu","ad","ae","af","ag","ai","al","am","an",
10
- "ao","aq","ar","as","at","au","aw","az","ba","bb",
11
- "bd","be","bf","bg","bh","bi","bj","bm","bn","bo",
12
- "br","bs","bt","bv","bw","by","bz","ca","cc","cd",
13
- "cf","cg","ch","ci","ck","cl","cm","cn","co","cr",
14
- "cu","cv","cx","cy","cz","de","dj","dk","dm","do",
15
- "dz","ec","ee","eg","eh","er","es","et","fi","fj",
16
- "fk","fm","fo","fr","fx","ga","gb","gd","ge","gf",
17
- "gh","gi","gl","gm","gn","gp","gq","gr","gs","gt",
18
- "gu","gw","gy","hk","hm","hn","hr","ht","hu","id",
19
- "ie","il","in","io","iq","ir","is","it","jm","jo",
20
- "jp","ke","kg","kh","ki","km","kn","kp","kr","kw",
21
- "ky","kz","la","lb","lc","li","lk","lr","ls","lt",
22
- "lu","lv","ly","ma","mc","md","mg","mh","mk","ml",
23
- "mm","mn","mo","mp","mq","mr","ms","mt","mu","mv",
24
- "mw","mx","my","mz","na","nc","ne","nf","ng","ni",
25
- "nl","no","np","nr","nu","nz","om","pa","pe","pf",
26
- "pg","ph","pk","pl","pm","pn","pr","ps","pt","pw",
27
- "py","qa","re","ro","ru","rw","sa","sb","sc","sd",
28
- "se","sg","sh","si","sj","sk","sl","sm","sn","so",
29
- "sr","st","sv","sy","sz","tc","td","tf","tg","th",
30
- "tj","tk","tm","tn","to","tl","tr","tt","tv","tw",
31
- "tz","ua","ug","um","us","uy","uz","va","vc","ve",
32
- "vg","vi","vn","vu","wf","ws","ye","yt","rs","za",
33
- "zm","me","zw","a1","a2","o1","ax","gg","im","je",
10
+ "ao","aq","ar","as","at","au","aw","az","ba","bb",
11
+ "bd","be","bf","bg","bh","bi","bj","bm","bn","bo",
12
+ "br","bs","bt","bv","bw","by","bz","ca","cc","cd",
13
+ "cf","cg","ch","ci","ck","cl","cm","cn","co","cr",
14
+ "cu","cv","cx","cy","cz","de","dj","dk","dm","do",
15
+ "dz","ec","ee","eg","eh","er","es","et","fi","fj",
16
+ "fk","fm","fo","fr","fx","ga","gb","gd","ge","gf",
17
+ "gh","gi","gl","gm","gn","gp","gq","gr","gs","gt",
18
+ "gu","gw","gy","hk","hm","hn","hr","ht","hu","id",
19
+ "ie","il","in","io","iq","ir","is","it","jm","jo",
20
+ "jp","ke","kg","kh","ki","km","kn","kp","kr","kw",
21
+ "ky","kz","la","lb","lc","li","lk","lr","ls","lt",
22
+ "lu","lv","ly","ma","mc","md","mg","mh","mk","ml",
23
+ "mm","mn","mo","mp","mq","mr","ms","mt","mu","mv",
24
+ "mw","mx","my","mz","na","nc","ne","nf","ng","ni",
25
+ "nl","no","np","nr","nu","nz","om","pa","pe","pf",
26
+ "pg","ph","pk","pl","pm","pn","pr","ps","pt","pw",
27
+ "py","qa","re","ro","ru","rw","sa","sb","sc","sd",
28
+ "se","sg","sh","si","sj","sk","sl","sm","sn","so",
29
+ "sr","st","sv","sy","sz","tc","td","tf","tg","th",
30
+ "tj","tk","tm","tn","to","tl","tr","tt","tv","tw",
31
+ "tz","ua","ug","um","us","uy","uz","va","vc","ve",
32
+ "vg","vi","vn","vu","wf","ws","ye","yt","rs","za",
33
+ "zm","me","zw","a1","a2","o1","ax","gg","im","je",
34
34
  "bl","mf"};
35
35
 
36
36
  static const unsigned num_countries = (unsigned)(sizeof(country_iso2_codes)/sizeof(country_iso2_codes[0]));
37
37
 
38
38
  const char country_iso3_codes[253][4] = { "--","ap","eu","and","are","afg","atg","aia","alb","arm","ant",
39
- "ago","aq","arg","asm","aut","aus","abw","aze","bih","brb",
40
- "bgd","bel","bfa","bgr","bhr","bdi","ben","bmu","brn","bol",
41
- "bra","bhs","btn","bv","bwa","blr","blz","can","cc","cod",
42
- "caf","cog","che","civ","cok","chl","cmr","chn","col","cri",
43
- "cub","cpv","cx","cyp","cze","deu","dji","dnk","dma","dom",
44
- "dza","ecu","est","egy","esh","eri","esp","eth","fin","fji",
45
- "flk","fsm","fro","fra","fx","gab","gbr","grd","geo","guf",
46
- "gha","gib","grl","gmb","gin","glp","gnq","grc","gs","gtm",
47
- "gum","gnb","guy","hkg","hm","hnd","hrv","hti","hun","idn",
48
- "irl","isr","ind","io","irq","irn","isl","ita","jam","jor",
49
- "jpn","ken","kgz","khm","kir","com","kna","prk","kor","kwt",
50
- "cym","kaz","lao","lbn","lca","lie","lka","lbr","lso","ltu",
51
- "lux","lva","lby","mar","mco","mda","mdg","mhl","mkd","mli",
52
- "mmr","mng","mac","mnp","mtq","mrt","msr","mlt","mus","mdv",
53
- "mwi","mex","mys","moz","nam","ncl","ner","nfk","nga","nic",
54
- "nld","nor","npl","nru","niu","nzl","omn","pan","per","pyf",
55
- "png","phl","pak","pol","spm","pcn","pri","pse","prt","plw",
56
- "pry","qat","reu","rou","rus","rwa","sau","slb","syc","sdn",
57
- "swe","sgp","shn","svn","sjm","svk","sle","smr","sen","som",
58
- "sur","stp","slv","syr","swz","tca","tcd","tf","tgo","tha",
59
- "tjk","tkl","tkm","tun","ton","tls","tur","tto","tuv","twn",
60
- "tza","ukr","uga","um","usa","ury","uzb","vat","vct","ven",
61
- "vgb","vir","vnm","vut","wlf","wsm","yem","yt","srb","zaf",
62
- "zmb","mne","zwe","a1","a2","o1","ala","ggy","imn","jey",
39
+ "ago","aq","arg","asm","aut","aus","abw","aze","bih","brb",
40
+ "bgd","bel","bfa","bgr","bhr","bdi","ben","bmu","brn","bol",
41
+ "bra","bhs","btn","bv","bwa","blr","blz","can","cc","cod",
42
+ "caf","cog","che","civ","cok","chl","cmr","chn","col","cri",
43
+ "cub","cpv","cx","cyp","cze","deu","dji","dnk","dma","dom",
44
+ "dza","ecu","est","egy","esh","eri","esp","eth","fin","fji",
45
+ "flk","fsm","fro","fra","fx","gab","gbr","grd","geo","guf",
46
+ "gha","gib","grl","gmb","gin","glp","gnq","grc","gs","gtm",
47
+ "gum","gnb","guy","hkg","hm","hnd","hrv","hti","hun","idn",
48
+ "irl","isr","ind","io","irq","irn","isl","ita","jam","jor",
49
+ "jpn","ken","kgz","khm","kir","com","kna","prk","kor","kwt",
50
+ "cym","kaz","lao","lbn","lca","lie","lka","lbr","lso","ltu",
51
+ "lux","lva","lby","mar","mco","mda","mdg","mhl","mkd","mli",
52
+ "mmr","mng","mac","mnp","mtq","mrt","msr","mlt","mus","mdv",
53
+ "mwi","mex","mys","moz","nam","ncl","ner","nfk","nga","nic",
54
+ "nld","nor","npl","nru","niu","nzl","omn","pan","per","pyf",
55
+ "png","phl","pak","pol","spm","pcn","pri","pse","prt","plw",
56
+ "pry","qat","reu","rou","rus","rwa","sau","slb","syc","sdn",
57
+ "swe","sgp","shn","svn","sjm","svk","sle","smr","sen","som",
58
+ "sur","stp","slv","syr","swz","tca","tcd","tf","tgo","tha",
59
+ "tjk","tkl","tkm","tun","ton","tls","tur","tto","tuv","twn",
60
+ "tza","ukr","uga","um","usa","ury","uzb","vat","vct","ven",
61
+ "vgb","vir","vnm","vut","wlf","wsm","yem","yt","srb","zaf",
62
+ "zmb","mne","zwe","a1","a2","o1","ala","ggy","imn","jey",
63
63
  "blm","maf"};
64
64
 
65
65
 
@@ -110,34 +110,34 @@ get_time(struct timeval *tim){
110
110
 
111
111
  unsigned long
112
112
  ip_to_int(const char *addr){
113
- unsigned int c, octet, t;
114
- unsigned long ipnum;
115
- int i = 3;
116
-
117
- octet = ipnum = 0;
118
- while ((c = *addr++)) {
119
- if (c == '.') {
120
- if (octet > 255)
121
- return 0;
122
- ipnum <<= 8;
123
- ipnum += octet;
124
- i--;
125
- octet = 0;
126
- } else {
127
- t = octet;
128
- octet <<= 3;
129
- octet += t;
130
- octet += t;
131
- c -= '0';
132
- if (c > 9)
133
- return 0;
134
- octet += c;
135
- }
136
- }
137
- if ((octet > 255) || (i != 0))
138
- return 0;
139
- ipnum <<= 8;
140
- return ipnum + octet;
113
+ unsigned int c, octet, t;
114
+ unsigned long ipnum;
115
+ int i = 3;
116
+
117
+ octet = ipnum = 0;
118
+ while ((c = *addr++)) {
119
+ if (c == '.') {
120
+ if (octet > 255)
121
+ return 0;
122
+ ipnum <<= 8;
123
+ ipnum += octet;
124
+ i--;
125
+ octet = 0;
126
+ } else {
127
+ t = octet;
128
+ octet <<= 3;
129
+ octet += t;
130
+ octet += t;
131
+ c -= '0';
132
+ if (c > 9)
133
+ return 0;
134
+ octet += c;
135
+ }
136
+ }
137
+ if ((octet > 255) || (i != 0))
138
+ return 0;
139
+ ipnum <<= 8;
140
+ return ipnum + octet;
141
141
  }
142
142
 
143
143
 
@@ -166,12 +166,12 @@ unsigned char con_type_to_int(char* con_type) {
166
166
  int compare_ranges(const void *fa, const void *fb) {
167
167
  if(fa == NULL)
168
168
  {
169
- printf("FA IS NULL!!!\n");
169
+ if(DEBUG){printf("FA IS NULL!!!\n");}
170
170
  return 0;
171
171
  }
172
172
  if(fb == NULL)
173
173
  {
174
- printf("FB IS NULL!!!\n");
174
+ if(DEBUG){printf("FB IS NULL!!!\n");}
175
175
  return 0;
176
176
  }
177
177
 
@@ -262,13 +262,13 @@ IpRange* find_range_for_ip(IPDB *db, char *ip) {
262
262
 
263
263
  if(db == NULL)
264
264
  {
265
- printf("ERROR: DB ist NULL! ");
265
+ if(DEBUG){printf("ERROR: DB ist NULL! \n");}
266
266
  return NULL;
267
267
  }
268
268
 
269
269
  if(db->ranges_count == 0)
270
270
  {
271
- printf("ERROR: DB has no Ranges Data. Can not search!\n");
271
+ if(DEBUG){printf("ERROR: DB has no Ranges Data. Can not search!\n");}
272
272
  return NULL;
273
273
  }
274
274
 
@@ -319,7 +319,7 @@ City * find_city_for_ip_range(IPDB * db, IpRange* range)
319
319
  char* find_isp_for_ip_range(IPDB * db, IpRange* range)
320
320
  {
321
321
  if( range == NULL || range->isp_index < 0){
322
- printf("Could not find isp for isp_index=%i", range->isp_index);
322
+ if(DEBUG){printf("Could not find isp for isp_index=%i\n", range->isp_index);}
323
323
  return NULL;
324
324
  }
325
325
  return db->isps[range->isp_index];
@@ -346,7 +346,7 @@ isp_index_by_name(IPDB * db, char* isp_name){
346
346
  db->isps_count++;
347
347
  return new_index;
348
348
  }else{
349
- printf("ERROR: MAX_ISPS_COUNT = %i limit reached - this should not happen!", MAX_ISPS_COUNT);
349
+ if(DEBUG){printf("ERROR: MAX_ISPS_COUNT = %i limit reached - this should not happen!\n", MAX_ISPS_COUNT);}
350
350
  return -1;
351
351
  }
352
352
  }
@@ -368,7 +368,7 @@ read_ranges_csv(IPDB * db){
368
368
  if(f == NULL)
369
369
  {
370
370
  if(DEBUG)
371
- printf("Could not open the CSV-file: %s", db->ranges_csv_file);
371
+ printf("Could not open the CSV-file: %s\n", db->ranges_csv_file);
372
372
  return;
373
373
  }
374
374
  char line[256];
@@ -378,7 +378,7 @@ read_ranges_csv(IPDB * db){
378
378
  int city_index;
379
379
 
380
380
  char* con_type;
381
- char* isp_name;
381
+ char* isp_name;
382
382
  uint16 isp_index;
383
383
 
384
384
  int invalid_cities_count = 0;
@@ -392,7 +392,7 @@ read_ranges_csv(IPDB * db){
392
392
  city_index = 0;
393
393
 
394
394
  con_type = NULL;
395
- isp_name = NULL;
395
+ isp_name = NULL;
396
396
  int16 isp_index = -1;
397
397
 
398
398
  if(DEBUG && db->ranges_count % 1000000 == 0)
@@ -410,7 +410,7 @@ read_ranges_csv(IPDB * db){
410
410
  if(city_index < 0)
411
411
  {
412
412
  if(DEBUG)
413
- printf("Could not find city for code: %i", atoi(city_code));
413
+ printf("Could not find city for code: %i\n", atoi(city_code));
414
414
  invalid_cities_count ++;
415
415
  continue;
416
416
  }else{
@@ -424,11 +424,11 @@ read_ranges_csv(IPDB * db){
424
424
  db->ranges_count++;
425
425
  }
426
426
  }
427
- if(invalid_cities_count)
427
+ if(DEBUG)
428
428
  {
429
- printf("Found invalid cities: %i", invalid_cities_count);
429
+ if(invalid_cities_count ){printf("Found invalid cities: %i\n", invalid_cities_count);}
430
+ printf("\n Parsing of %i records needed %.6lf seconds\n", db->ranges_count, get_time(&tim)-t1);
430
431
  }
431
- printf("\n Parsing of %i records needed %.6lf seconds\n", db->ranges_count, get_time(&tim)-t1);
432
432
  }
433
433
 
434
434
 
@@ -463,7 +463,7 @@ read_cities_csv(IPDB * db){
463
463
  if(f == NULL)
464
464
  {
465
465
  if(DEBUG)
466
- printf("Could not open the Cities-CSV-file: %s", db->cities_csv_file);
466
+ printf("Could not open the Cities-CSV-file: %s\n", db->cities_csv_file);
467
467
  return;
468
468
  }
469
469
  char line[256];
@@ -480,7 +480,7 @@ read_cities_csv(IPDB * db){
480
480
  {
481
481
  printf("Worked lines: %i\n", i);
482
482
  }
483
- // COUNTRY,REGION,CITY-NAME,METRO-CODE,CITY-CODE,LATITUDE,LONGITUDE
483
+ // COUNTRY,REGION,CITY-NAME,METRO-CODE,CITY-CODE,LATITUDE,LONGITUDE
484
484
  country = strtok(line, CITIES_DELIM);
485
485
  region = strtok(NULL, CITIES_DELIM);
486
486
  name = strtok(NULL, CITIES_DELIM);
@@ -506,14 +506,14 @@ read_cities_csv(IPDB * db){
506
506
  }
507
507
 
508
508
  /**
509
- cache-file is an exact binary copy of the ranges+cities-arrays from memory,
510
- the layout goes like this:
509
+ cache-file is an exact binary copy of the ranges+cities-arrays from memory,
510
+ the layout goes like this:
511
511
  db->cities_count [4 Bytes]
512
512
  db->ranges_count [4 Bytes]
513
513
 
514
514
  db->cities [sizeof(City)=24 x db->ranges_count Bytes]
515
515
  db->ranges [sizeof(IpRange)=24 x db->ranges_count Bytes]
516
- */
516
+ */
517
517
  void
518
518
  write_cache_file(IPDB * db){
519
519
  struct timeval tim;
@@ -524,7 +524,7 @@ write_cache_file(IPDB * db){
524
524
  f = fopen(db->cache_file_name, "w");
525
525
  if(f==NULL){
526
526
  if(DEBUG)
527
- printf("Could not open Cache-File: %s", db->cache_file_name);
527
+ printf("Could not open Cache-File: %s\n", db->cache_file_name);
528
528
  return;
529
529
  }
530
530
  if(DEBUG){
@@ -570,7 +570,7 @@ read_cache_file(IPDB * db){
570
570
  f = fopen(db->cache_file_name, "r");
571
571
  if(f==NULL){
572
572
  if(DEBUG)
573
- printf("Could not open Cache-File: %s", db->cache_file_name);
573
+ printf("Could not open Cache-File: %s\n", db->cache_file_name);
574
574
  return 0;
575
575
  }
576
576
  int cities_header_read = fread(&(db->cities_count), sizeof(db->cities_count),1,f);
@@ -580,7 +580,7 @@ read_cache_file(IPDB * db){
580
580
 
581
581
  if(cities_header_read == 0 || isps_header_read == 0 || ranges_header_read == 0 || db->cities_count == 0 || db->isps_count ==0 || db->ranges_count ==0)
582
582
  {
583
- printf("Could not read Cities-Header from Cache-File: %s", db->cache_file_name);
583
+ if(DEBUG){printf("Could not read Cities-Header from Cache-File: %s\n", db->cache_file_name);}
584
584
  return 0;
585
585
  }
586
586
  if(DEBUG)
@@ -593,7 +593,7 @@ read_cache_file(IPDB * db){
593
593
  objects_read += fread(db->cities, sizeof(City),db->cities_count,f);
594
594
 
595
595
  if(DEBUG)
596
- printf("Reading in the isps into preallocated buffer of size: ", sizeof(db->isps));
596
+ printf("Reading in the isps into preallocated buffer of size: %lu\n", sizeof(db->isps));
597
597
  objects_read += fread(db->isps, MAX_ISP_NAME_LENGTH, db->isps_count,f);
598
598
 
599
599
  if(DEBUG)
@@ -627,7 +627,7 @@ benchmark_search(IPDB * db,int count){
627
627
 
628
628
  IPDB * init_db(char * cities_csv_file, char * ranges_csv_file, char * cache_file_name){
629
629
  if(DEBUG)
630
- printf("Initializing db");
630
+ printf("Initializing db\n");
631
631
  IPDB *db;
632
632
  db = (IPDB*)malloc(sizeof(IPDB));
633
633
  if (db == NULL) //no memory left
data/geoipdb.gemspec CHANGED
@@ -1,75 +1,21 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
5
2
 
6
- Gem::Specification.new do |s|
7
- s.name = "geoipdb"
8
- s.version = "0.4.2"
3
+ Gem::Specification.new do |gem|
4
+ gem.name = "geoipdb"
5
+ gem.version = "0.4.3"
6
+ gem.licenses = ["MIT"]
9
7
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Eugen Martin", "Martin Karlsch"]
12
- s.date = "2012-05-11"
13
- s.description = "Returns a GeoLocation and additional information for given IP. Reads Data from CSV-Files and uses internal binary caching."
14
- s.email = "eugeniusmartinus@googlemail.com"
15
- s.extensions = ["ext/geoipdb/extconf.rb"]
16
- s.extra_rdoc_files = [
17
- "LICENSE.txt",
18
- "README.markdown"
19
- ]
20
- s.files = [
21
- ".document",
22
- ".rspec",
23
- "Gemfile",
24
- "LICENSE.txt",
25
- "README.markdown",
26
- "Rakefile",
27
- "VERSION",
28
- "ext/geoipdb/Makefile",
29
- "ext/geoipdb/build.sh",
30
- "ext/geoipdb/extconf.rb",
31
- "ext/geoipdb/geoipdb.c",
32
- "ext/geoipdb/ipdb.c",
33
- "ext/geoipdb/ipdb.h",
34
- "geoipdb.gemspec",
35
- "lib/geoipdb.rb",
36
- "sample_data/cities.csv",
37
- "sample_data/citiess_corrupt.csv",
38
- "sample_data/ip_ranges.csv",
39
- "sample_data/ip_ranges_corrupt.csv",
40
- "spec/geoipdb_spec.rb",
41
- "spec/spec_helper.rb",
42
- "test.rb"
43
- ]
44
- s.homepage = "http://github.com/madvertise/geoipdb"
45
- s.licenses = ["MIT"]
46
- s.require_paths = ["lib", "ext"]
47
- s.rubygems_version = "1.8.10"
48
- s.summary = "Fast (>3 Mio queries/sec!!!) GeoIpDb implementation for Ruby using C-Extensions."
49
- s.test_files = [
50
- "spec/geoipdb_spec.rb",
51
- "spec/spec_helper.rb"
52
- ]
8
+ gem.authors = ["Eugen Martin", "Martin Karlsch"]
9
+ gem.email = ["eugeniusmartinus@googlemail.com", "martin.karlsch@madvertise.com"]
53
10
 
54
- if s.respond_to? :specification_version then
55
- s.specification_version = 3
11
+ gem.description = "Returns a GeoLocation and additional information for given IP. Reads Data from CSV-Files and uses internal binary caching."
12
+ gem.summary = "Fast (>3 Mio queries/sec!!!) GeoIpDb implementation for Ruby using C-Extensions."
13
+ gem.homepage = "http://github.com/madvertise/geoipdb"
56
14
 
57
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
- s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
59
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
60
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
61
- s.add_development_dependency(%q<rcov>, [">= 0"])
62
- else
63
- s.add_dependency(%q<rspec>, ["~> 2.1.0"])
64
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
- s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
66
- s.add_dependency(%q<rcov>, [">= 0"])
67
- end
68
- else
69
- s.add_dependency(%q<rspec>, ["~> 2.1.0"])
70
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
71
- s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
72
- s.add_dependency(%q<rcov>, [">= 0"])
73
- end
74
- end
15
+ gem.extensions = ["ext/geoipdb/extconf.rb"]
75
16
 
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ gem.files = `git ls-files`.split("\n")
19
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ gem.require_paths = ["lib", "ext"]
21
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,12 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'ext'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
-
1
+ require 'rubygems'
4
2
  require 'rspec'
5
- require 'lib/geoipdb'
6
3
 
7
- # Requires supporting files with custom matchers and macros, etc,
8
- # in ./support/ and its subdirectories.
9
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+
7
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
8
+ $:.unshift(File.dirname(__FILE__) + '/../ext')
9
+ require 'geoipdb'
10
10
 
11
11
  RSpec.configure do |config|
12
-
13
12
  end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc "Run the specs"
5
+ RSpec::Core::RakeTask.new do |t|
6
+ t.verbose = false
7
+ end
data/tasks/yard.rake ADDED
@@ -0,0 +1,5 @@
1
+ require 'yard'
2
+
3
+ YARD::Rake::YardocTask.new do |t|
4
+ t.files = ['lib/**/*.rb', 'README.rdoc']
5
+ end
metadata CHANGED
@@ -1,104 +1,36 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: geoipdb
3
- version: !ruby/object:Gem::Version
4
- hash: 11
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 2
10
- version: 0.4.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Eugen Martin
14
9
  - Martin Karlsch
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-05-11 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 11
28
- segments:
29
- - 2
30
- - 1
31
- - 0
32
- version: 2.1.0
33
- requirement: *id001
34
- prerelease: false
35
- name: rspec
36
- type: :development
37
- - !ruby/object:Gem::Dependency
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 23
44
- segments:
45
- - 1
46
- - 0
47
- - 0
48
- version: 1.0.0
49
- requirement: *id002
50
- prerelease: false
51
- name: bundler
52
- type: :development
53
- - !ruby/object:Gem::Dependency
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 1
60
- segments:
61
- - 1
62
- - 5
63
- - 1
64
- version: 1.5.1
65
- requirement: *id003
66
- prerelease: false
67
- name: jeweler
68
- type: :development
69
- - !ruby/object:Gem::Dependency
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 3
76
- segments:
77
- - 0
78
- version: "0"
79
- requirement: *id004
80
- prerelease: false
81
- name: rcov
82
- type: :development
83
- description: Returns a GeoLocation and additional information for given IP. Reads Data from CSV-Files and uses internal binary caching.
84
- email: eugeniusmartinus@googlemail.com
13
+ date: 2012-11-14 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: Returns a GeoLocation and additional information for given IP. Reads
16
+ Data from CSV-Files and uses internal binary caching.
17
+ email:
18
+ - eugeniusmartinus@googlemail.com
19
+ - martin.karlsch@madvertise.com
85
20
  executables: []
86
-
87
- extensions:
21
+ extensions:
88
22
  - ext/geoipdb/extconf.rb
89
- extra_rdoc_files:
90
- - LICENSE.txt
91
- - README.markdown
92
- files:
23
+ extra_rdoc_files: []
24
+ files:
93
25
  - .document
26
+ - .gitignore
94
27
  - .rspec
28
+ - .rvmrc
95
29
  - Gemfile
96
30
  - LICENSE.txt
97
31
  - README.markdown
98
32
  - Rakefile
99
33
  - VERSION
100
- - ext/geoipdb/Makefile
101
- - ext/geoipdb/build.sh
102
34
  - ext/geoipdb/extconf.rb
103
35
  - ext/geoipdb/geoipdb.c
104
36
  - ext/geoipdb/ipdb.c
@@ -111,41 +43,38 @@ files:
111
43
  - sample_data/ip_ranges_corrupt.csv
112
44
  - spec/geoipdb_spec.rb
113
45
  - spec/spec_helper.rb
114
- - test.rb
46
+ - tasks/rspec.rake
47
+ - tasks/yard.rake
115
48
  homepage: http://github.com/madvertise/geoipdb
116
- licenses:
49
+ licenses:
117
50
  - MIT
118
51
  post_install_message:
119
52
  rdoc_options: []
120
-
121
- require_paths:
53
+ require_paths:
122
54
  - lib
123
55
  - ext
124
- required_ruby_version: !ruby/object:Gem::Requirement
56
+ required_ruby_version: !ruby/object:Gem::Requirement
125
57
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ segments:
131
63
  - 0
132
- version: "0"
133
- required_rubygems_version: !ruby/object:Gem::Requirement
64
+ hash: 4023628714682434710
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
66
  none: false
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- hash: 3
139
- segments:
140
- - 0
141
- version: "0"
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
142
71
  requirements: []
143
-
144
72
  rubyforge_project:
145
- rubygems_version: 1.8.10
73
+ rubygems_version: 1.8.24
146
74
  signing_key:
147
75
  specification_version: 3
148
76
  summary: Fast (>3 Mio queries/sec!!!) GeoIpDb implementation for Ruby using C-Extensions.
149
- test_files:
77
+ test_files:
150
78
  - spec/geoipdb_spec.rb
151
79
  - spec/spec_helper.rb
80
+ has_rdoc:
data/ext/geoipdb/Makefile DELETED
@@ -1,157 +0,0 @@
1
-
2
- SHELL = /bin/sh
3
-
4
- #### Start of system configuration section. ####
5
-
6
- srcdir = .
7
- topdir = /Users/eugen/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/i686-darwin10.7.0
8
- hdrdir = $(topdir)
9
- VPATH = $(srcdir):$(topdir):$(hdrdir)
10
- exec_prefix = $(prefix)
11
- prefix = $(DESTDIR)/Users/eugen/.rvm/rubies/ree-1.8.7-2011.03
12
- sharedstatedir = $(prefix)/com
13
- mandir = $(datarootdir)/man
14
- psdir = $(docdir)
15
- oldincludedir = $(DESTDIR)/usr/include
16
- localedir = $(datarootdir)/locale
17
- bindir = $(exec_prefix)/bin
18
- libexecdir = $(exec_prefix)/libexec
19
- sitedir = $(libdir)/ruby/site_ruby
20
- htmldir = $(docdir)
21
- vendorarchdir = $(vendorlibdir)/$(sitearch)
22
- includedir = $(prefix)/include
23
- infodir = $(datarootdir)/info
24
- vendorlibdir = $(vendordir)/$(ruby_version)
25
- sysconfdir = $(prefix)/etc
26
- libdir = $(exec_prefix)/lib
27
- sbindir = $(exec_prefix)/sbin
28
- rubylibdir = $(libdir)/ruby/$(ruby_version)
29
- docdir = $(datarootdir)/doc/$(PACKAGE)
30
- dvidir = $(docdir)
31
- vendordir = $(libdir)/ruby/vendor_ruby
32
- datarootdir = $(prefix)/share
33
- pdfdir = $(docdir)
34
- archdir = $(rubylibdir)/$(arch)
35
- sitearchdir = $(sitelibdir)/$(sitearch)
36
- datadir = $(datarootdir)
37
- localstatedir = $(prefix)/var
38
- sitelibdir = $(sitedir)/$(ruby_version)
39
-
40
- CC = gcc
41
- LIBRUBY = $(LIBRUBY_A)
42
- LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
43
- LIBRUBYARG_SHARED =
44
- LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
45
-
46
- RUBY_EXTCONF_H =
47
- CFLAGS = -fno-common -g -O2 -pipe -fno-common $(cflags)
48
- INCFLAGS = $(PREINCFLAGS) -I. -I/opt/local/include -I$(topdir) -I$(hdrdir) -I$(srcdir)
49
- DEFS =
50
- CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags)
51
- CXXFLAGS = $(CFLAGS)
52
- ldflags = -L.
53
- dldflags =
54
- archflag =
55
- DLDFLAGS = $(ldflags) $(dldflags) $(archflag)
56
- LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
57
- AR = ar
58
- EXEEXT =
59
-
60
- RUBY_INSTALL_NAME = ruby
61
- RUBY_SO_NAME = ruby
62
- arch = i686-darwin10.7.0
63
- sitearch = i686-darwin10.7.0
64
- ruby_version = 1.8
65
- ruby = /Users/eugen/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
66
- RUBY = $(ruby)
67
- RM = rm -f
68
- MAKEDIRS = mkdir -p
69
- INSTALL = /usr/bin/install -c
70
- INSTALL_PROG = $(INSTALL) -m 0755
71
- INSTALL_DATA = $(INSTALL) -m 644
72
- COPY = cp
73
-
74
- #### End of system configuration section. ####
75
-
76
- preload =
77
-
78
- libpath = . $(libdir)
79
- LIBPATH = -L. -L$(libdir)
80
- DEFFILE =
81
-
82
- CLEANFILES = mkmf.log
83
- DISTCLEANFILES =
84
-
85
- extout =
86
- extout_prefix =
87
- target_prefix = /geoipdb
88
- LOCAL_LIBS =
89
- LIBS = -L/opt/local/lib -ldl -lobjc
90
- SRCS = geoipdb.c ipdb.c
91
- OBJS = geoipdb.o ipdb.o
92
- TARGET = geoipdb
93
- DLLIB = $(TARGET).bundle
94
- EXTSTATIC =
95
- STATIC_LIB =
96
-
97
- BINDIR = $(bindir)
98
- RUBYCOMMONDIR = $(sitedir)$(target_prefix)
99
- RUBYLIBDIR = $(sitelibdir)$(target_prefix)
100
- RUBYARCHDIR = $(sitearchdir)$(target_prefix)
101
-
102
- TARGET_SO = $(DLLIB)
103
- CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
104
- CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
105
-
106
- all: $(DLLIB)
107
- static: $(STATIC_LIB)
108
-
109
- clean:
110
- @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
111
-
112
- distclean: clean
113
- @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
114
- @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
115
-
116
- realclean: distclean
117
- install: install-so install-rb
118
-
119
- install-so: $(RUBYARCHDIR)
120
- install-so: $(RUBYARCHDIR)/$(DLLIB)
121
- $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
122
- $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
123
- install-rb: pre-install-rb install-rb-default
124
- install-rb-default: pre-install-rb-default
125
- pre-install-rb: Makefile
126
- pre-install-rb-default: Makefile
127
- $(RUBYARCHDIR):
128
- $(MAKEDIRS) $@
129
-
130
- site-install: site-install-so site-install-rb
131
- site-install-so: install-so
132
- site-install-rb: install-rb
133
-
134
- .SUFFIXES: .c .m .cc .cxx .cpp .C .o
135
-
136
- .cc.o:
137
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
138
-
139
- .cxx.o:
140
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
141
-
142
- .cpp.o:
143
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
144
-
145
- .C.o:
146
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
147
-
148
- .c.o:
149
- $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
150
-
151
- $(DLLIB): $(OBJS) Makefile
152
- @-$(RM) $@
153
- $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
154
-
155
-
156
-
157
- $(OBJS): ruby.h defines.h
data/ext/geoipdb/build.sh DELETED
@@ -1 +0,0 @@
1
- gcc -Wall -o test test.c ipdb.c ipdb.h
data/test.rb DELETED
@@ -1,9 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'ext'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
-
4
- require 'lib/geoipdb'
5
-
6
-
7
- db = GeoIpDb.init 'ext/data/cities.csv', 'ext/data/ip_ranges.csv', 'ext/data/ipdb.cache'
8
-
9
- puts db.information_for_ip("165.193.245.54").inspect