trifle 0.0.7 → 0.0.8
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/.travis.yml +14 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +3 -1
- data/README.md +12 -1
- data/Rakefile +9 -1
- data/lib/trifle/finder.rb +3 -4
- data/lib/trifle/version.rb +1 -1
- data/spec/trifle/finder_spec.rb +12 -1
- data/trifle.gemspec +1 -1
- metadata +39 -12
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,7 +9,7 @@ GIT
|
|
9
9
|
PATH
|
10
10
|
remote: .
|
11
11
|
specs:
|
12
|
-
trifle (0.0.
|
12
|
+
trifle (0.0.8)
|
13
13
|
redis
|
14
14
|
|
15
15
|
GEM
|
@@ -19,6 +19,7 @@ GEM
|
|
19
19
|
activesupport (= 3.0.0)
|
20
20
|
activesupport (3.0.0)
|
21
21
|
diff-lcs (1.1.3)
|
22
|
+
rake (0.9.2.2)
|
22
23
|
redis (3.0.1)
|
23
24
|
rspec (2.10.0)
|
24
25
|
rspec-core (~> 2.10.0)
|
@@ -35,5 +36,6 @@ PLATFORMS
|
|
35
36
|
DEPENDENCIES
|
36
37
|
active_support
|
37
38
|
fakeredis!
|
39
|
+
rake
|
38
40
|
rspec
|
39
41
|
trifle!
|
data/README.md
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# Trifle
|
2
2
|
|
3
|
+

|
4
|
+
|
3
5
|
Stores the GeoIP databases in Redis and gives it a simple way to lookup IPs and map them to countries/country codes.
|
4
6
|
|
5
7
|
Get your GeoIP country CSVs from http://www.maxmind.com/app/geolite.
|
6
8
|
|
7
9
|
Trifle supports both the IPV4 and IPV6 databases.
|
8
10
|
|
11
|
+
## Why?
|
12
|
+
|
13
|
+
Loading the GeoIP databases from disk is slow, and doing that for every request is a pain. Trifle keeps your GeoIP database in memory and makes it easy to query.
|
14
|
+
|
9
15
|
## Installation
|
10
16
|
|
11
17
|
Install the gem
|
@@ -62,9 +68,9 @@ trifle.find "192.168.1.1"
|
|
62
68
|
# => nil
|
63
69
|
```
|
64
70
|
|
65
|
-
|
66
71
|
## Release notes
|
67
72
|
|
73
|
+
* **0.0.8** Fixed a search bug that created conflicts between IPv4 and IPv6 data
|
68
74
|
* **0.0.7** Loading now happens into separate key, making loading possible without downtime
|
69
75
|
* **0.0.6** Added a fix for invalid IPs
|
70
76
|
* **0.0.5** Fixed bug when finding IPs at the edge of the data set
|
@@ -73,6 +79,11 @@ trifle.find "192.168.1.1"
|
|
73
79
|
* **0.0.2** Added support for custom Redis key
|
74
80
|
* **0.0.1** First draft
|
75
81
|
|
82
|
+
## Future releases
|
83
|
+
|
84
|
+
* Allow for loading of more data than just country data
|
85
|
+
* Split country data into separate Redis records
|
86
|
+
|
76
87
|
## License
|
77
88
|
|
78
89
|
See LICENSE
|
data/Rakefile
CHANGED
data/lib/trifle/finder.rb
CHANGED
@@ -15,14 +15,13 @@ class Trifle
|
|
15
15
|
protected
|
16
16
|
|
17
17
|
def find ip_i, lower, upper
|
18
|
-
return nil if lower >= upper
|
19
|
-
|
20
18
|
index = (lower+upper)/2
|
21
|
-
|
22
19
|
current = entry_for(index)
|
23
20
|
|
24
21
|
if in_range(current, ip_i)
|
25
22
|
current.last(2)
|
23
|
+
elsif lower >= upper
|
24
|
+
nil
|
26
25
|
elsif ip_i < current[0]
|
27
26
|
find ip_i, lower, index-1
|
28
27
|
else
|
@@ -31,7 +30,7 @@ class Trifle
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def max
|
34
|
-
redis.llen(key)
|
33
|
+
redis.llen(key)-1
|
35
34
|
end
|
36
35
|
|
37
36
|
def entry_for index
|
data/lib/trifle/version.rb
CHANGED
data/spec/trifle/finder_spec.rb
CHANGED
@@ -14,7 +14,16 @@ describe Trifle::Finder do
|
|
14
14
|
["223.255.248.0","223.255.251.255","3758094336","3758095359","AU","Australia"],
|
15
15
|
["223.255.252.0","223.255.253.255","3758095360","3758095871","CN","China"],
|
16
16
|
["223.255.254.0","223.255.254.255","3758095872","3758096127","SG","Singapore"],
|
17
|
-
["223.255.255.0","223.255.255.255","3758096128","3758096383","AU","Australia"]
|
17
|
+
["223.255.255.0","223.255.255.255","3758096128","3758096383","AU","Australia"],
|
18
|
+
["2407:7800::", "2407:7800:ffff:ffff:ffff:ffff:ffff:ffff", "47890987815419153418387641314551267328", "47890987894647315932651978908095217663", "AU", "Australia"],
|
19
|
+
["2407:8400::", "2407:8400:ffff:ffff:ffff:ffff:ffff:ffff", "47891231204334397238432728681566699520", "47891231283562559752697066275110649855", "AU", "Australia"],
|
20
|
+
["2407:8600::", "2407:8600:ffff:ffff:ffff:ffff:ffff:ffff", "47891271769153604541773576576069271552", "47891271848381767056037914169613221887", "AU", "Australia"],
|
21
|
+
["2407:8800::", "2407:8800:ffff:ffff:ffff:ffff:ffff:ffff", "47891312333972811845114424470571843584", "47891312413200974359378762064115793919", "IN", "India"],
|
22
|
+
["2407:8e00::", "2407:8e00:ffff:ffff:ffff:ffff:ffff:ffff", "47891434028430433755136968154079559680", "47891434107658596269401305747623510015", "AU", "Australia"],
|
23
|
+
["2407:9000::", "2407:9000:ffff:ffff:ffff:ffff:ffff:ffff", "47891474593249641058477816048582131712", "47891474672477803572742153642126082047", "AU", "Australia"],
|
24
|
+
["2407:a200::", "2407:a200:ffff:ffff:ffff:ffff:ffff:ffff", "47891839676622506788545447099105280000", "47891839755850669302809784692649230335", "AU", "Australia"],
|
25
|
+
["2407:aa00::", "2407:aa00:ffff:ffff:ffff:ffff:ffff:ffff", "47892001935899336001908838677115568128", "47892002015127498516173176270659518463", "AU", "Australia"],
|
26
|
+
["2407:ae00::", "2407:ae00:ffff:ffff:ffff:ffff:ffff:ffff", "47892083065537750608590534466120712192", "47892083144765913122854872059664662527", "AU", "Australia"],
|
18
27
|
]
|
19
28
|
@redis = Redis.new
|
20
29
|
@trifle = Trifle.new(@redis)
|
@@ -27,6 +36,8 @@ describe Trifle::Finder do
|
|
27
36
|
@finder.handle("223.255.128.0").should be == ["HK", "Hong Kong"]
|
28
37
|
@finder.handle("223.255.244.10").should be == ["IN", "India"]
|
29
38
|
@finder.handle("223.255.255.255").should be == ["AU","Australia"]
|
39
|
+
@finder.handle("2407:8800:ffff:ffff:ffff:ffff:ffff:ffff").should be == ["IN","India"]
|
40
|
+
@finder.handle("2407:ae00:ffff:ffff:ffff:ffff:ffff:ffff").should be == ["AU","Australia"]
|
30
41
|
end
|
31
42
|
|
32
43
|
it "should return nil if the entry wasn't found" do
|
data/trifle.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Trifle::VERSION
|
8
8
|
s.authors = ["Cristiano Betta"]
|
9
9
|
s.email = ["cristiano@emberads.com"]
|
10
|
-
s.homepage = "http://
|
10
|
+
s.homepage = "http://github.com/EmberAds/trifle"
|
11
11
|
s.summary = "A GeoIP lookup in Redis"
|
12
12
|
s.description = "Stores the GeoIP databases in Redis and gives it a simple way to lookup IPs and map them to countries"
|
13
13
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trifle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
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-
|
12
|
+
date: 2012-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: active_support
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: fakeredis
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 0.3.0
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.0
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: redis
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
description: Stores the GeoIP databases in Redis and gives it a simple way to lookup
|
59
79
|
IPs and map them to countries
|
60
80
|
email:
|
@@ -66,6 +86,7 @@ extra_rdoc_files: []
|
|
66
86
|
files:
|
67
87
|
- .gitignore
|
68
88
|
- .rspec
|
89
|
+
- .travis.yml
|
69
90
|
- Gemfile
|
70
91
|
- Gemfile.lock
|
71
92
|
- LICENSE
|
@@ -83,7 +104,7 @@ files:
|
|
83
104
|
- spec/trifle/loader_spec.rb
|
84
105
|
- spec/trifle_spec.rb
|
85
106
|
- trifle.gemspec
|
86
|
-
homepage: http://
|
107
|
+
homepage: http://github.com/EmberAds/trifle
|
87
108
|
licenses: []
|
88
109
|
post_install_message:
|
89
110
|
rdoc_options: []
|
@@ -95,15 +116,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
116
|
- - ! '>='
|
96
117
|
- !ruby/object:Gem::Version
|
97
118
|
version: '0'
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
hash: -2107613967180143252
|
98
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
123
|
none: false
|
100
124
|
requirements:
|
101
125
|
- - ! '>='
|
102
126
|
- !ruby/object:Gem::Version
|
103
127
|
version: '0'
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
hash: -2107613967180143252
|
104
131
|
requirements: []
|
105
132
|
rubyforge_project: trifle
|
106
|
-
rubygems_version: 1.8.
|
133
|
+
rubygems_version: 1.8.24
|
107
134
|
signing_key:
|
108
135
|
specification_version: 3
|
109
136
|
summary: A GeoIP lookup in Redis
|