trifle 0.0.1 → 0.0.2
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 +5 -1
- data/README.md +6 -0
- data/lib/trifle/finder.rb +3 -3
- data/lib/trifle/initialize_with_redis.rb +4 -2
- data/lib/trifle/loader.rb +3 -5
- data/lib/trifle/version.rb +1 -1
- data/lib/trifle.rb +2 -4
- data/spec/trifle/initialize_with_redis_spec.rb +5 -1
- data/spec/trifle/loader_spec.rb +11 -10
- data/spec/trifle_spec.rb +6 -4
- data/trifle.gemspec +1 -0
- metadata +19 -8
data/Gemfile.lock
CHANGED
@@ -9,11 +9,14 @@ GIT
|
|
9
9
|
PATH
|
10
10
|
remote: .
|
11
11
|
specs:
|
12
|
-
trifle (0.0.
|
12
|
+
trifle (0.0.2)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: http://rubygems.org/
|
16
16
|
specs:
|
17
|
+
active_support (3.0.0)
|
18
|
+
activesupport (= 3.0.0)
|
19
|
+
activesupport (3.0.0)
|
17
20
|
diff-lcs (1.1.3)
|
18
21
|
redis (3.0.1)
|
19
22
|
rspec (2.10.0)
|
@@ -30,6 +33,7 @@ PLATFORMS
|
|
30
33
|
ruby
|
31
34
|
|
32
35
|
DEPENDENCIES
|
36
|
+
active_support
|
33
37
|
fakeredis!
|
34
38
|
rspec
|
35
39
|
rujitsu
|
data/README.md
CHANGED
data/lib/trifle/finder.rb
CHANGED
@@ -29,18 +29,18 @@ class Trifle
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def max
|
32
|
-
redis.llen
|
32
|
+
redis.llen(key)
|
33
33
|
end
|
34
34
|
|
35
35
|
def entry_for index
|
36
|
-
entry = redis.lindex(
|
36
|
+
entry = redis.lindex(key, index).split(":")
|
37
37
|
entry[0] = entry[0].to_i
|
38
38
|
entry[1] = entry[1].to_i
|
39
39
|
entry
|
40
40
|
end
|
41
41
|
|
42
42
|
def in_range range, ip_i
|
43
|
-
|
43
|
+
range[0] <= ip_i && ip_i <= range[1]
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class Trifle
|
2
2
|
module InitializeWithRedis
|
3
3
|
attr_accessor :redis
|
4
|
+
attr_accessor :key
|
4
5
|
|
5
|
-
def initialize redis
|
6
|
-
raise ArgumentError.new("Redis object expected") unless redis
|
6
|
+
def initialize redis, options = {}
|
7
|
+
raise ArgumentError.new("Redis-like object expected") unless redis
|
7
8
|
self.redis = redis
|
9
|
+
self.key = options[:key] || "trifle"
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
data/lib/trifle/loader.rb
CHANGED
@@ -37,7 +37,7 @@ class Trifle
|
|
37
37
|
|
38
38
|
def append row
|
39
39
|
entry = row.values_at(2,3,4,5).join(":")
|
40
|
-
redis.rpush
|
40
|
+
redis.rpush key, entry
|
41
41
|
end
|
42
42
|
|
43
43
|
def sort data
|
@@ -51,9 +51,7 @@ class Trifle
|
|
51
51
|
|
52
52
|
def valid? data
|
53
53
|
if data.is_a?(Array) && data.count > 0
|
54
|
-
return data.
|
55
|
-
is_number(row[2]) && is_number(row[3])
|
56
|
-
end.select{|valid| !valid}.count == 0
|
54
|
+
return data.detect {|row| !is_number(row[2]) || !is_number(row[3])}.nil?
|
57
55
|
end
|
58
56
|
false
|
59
57
|
end
|
@@ -63,7 +61,7 @@ class Trifle
|
|
63
61
|
end
|
64
62
|
|
65
63
|
def clear
|
66
|
-
redis.del
|
64
|
+
redis.del key
|
67
65
|
end
|
68
66
|
end
|
69
67
|
end
|
data/lib/trifle/version.rb
CHANGED
data/lib/trifle.rb
CHANGED
@@ -7,8 +7,6 @@ require "trifle/initialize_with_redis"
|
|
7
7
|
class Trifle
|
8
8
|
include InitializeWithRedis
|
9
9
|
|
10
|
-
KEY = "trifle".freeze
|
11
|
-
|
12
10
|
def load options = {}
|
13
11
|
loader.handle options
|
14
12
|
end
|
@@ -20,10 +18,10 @@ class Trifle
|
|
20
18
|
protected
|
21
19
|
|
22
20
|
def loader
|
23
|
-
@loader = Loader.new(redis)
|
21
|
+
@loader = Loader.new(redis, key: key)
|
24
22
|
end
|
25
23
|
|
26
24
|
def finder
|
27
|
-
@finder = Finder.new(redis)
|
25
|
+
@finder = Finder.new(redis, key: key)
|
28
26
|
end
|
29
27
|
end
|
@@ -15,7 +15,11 @@ describe Trifle::InitializeWithRedis do
|
|
15
15
|
|
16
16
|
it "should fail without a redis instance" do
|
17
17
|
-> { @klass.new(nil) }.should raise_error(ArgumentError)
|
18
|
-
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should accept an optional redis key" do
|
21
|
+
instance = @klass.new(Redis.new, key: "foo")
|
22
|
+
instance.key.should be == "foo"
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
data/spec/trifle/loader_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
|
+
require 'active_support/core_ext/string/strip'
|
2
3
|
|
3
4
|
describe Trifle::Loader do
|
4
5
|
|
@@ -8,10 +9,10 @@ describe Trifle::Loader do
|
|
8
9
|
["223.255.254.0","223.255.254.255","3758095872","3758096127","SG","Singapore"],
|
9
10
|
["223.255.255.0","223.255.255.255","3758096128","3758096383","AU","Australia"]
|
10
11
|
]
|
11
|
-
@csv = <<-
|
12
|
-
"223.255.254.0","223.255.254.255","3758095872","3758096127","SG","Singapore"
|
13
|
-
"223.255.255.0","223.255.255.255","3758096128","3758096383","AU","Australia"
|
14
|
-
|
12
|
+
@csv = <<-CSV.strip_heredoc
|
13
|
+
"223.255.254.0","223.255.254.255","3758095872","3758096127","SG","Singapore"
|
14
|
+
"223.255.255.0","223.255.255.255","3758096128","3758096383","AU","Australia"
|
15
|
+
CSV
|
15
16
|
end
|
16
17
|
|
17
18
|
it "should extend InitializeWithRedis" do
|
@@ -63,7 +64,7 @@ describe Trifle::Loader do
|
|
63
64
|
|
64
65
|
it "should read the files" do
|
65
66
|
@loader.load_files @filenames
|
66
|
-
@loader.redis.llen(
|
67
|
+
@loader.redis.llen(@loader.key).should be == 4
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -96,7 +97,7 @@ describe Trifle::Loader do
|
|
96
97
|
|
97
98
|
it "should load it in redis" do
|
98
99
|
@loader.load_data @valid_data
|
99
|
-
@loader.redis.llen(
|
100
|
+
@loader.redis.llen(@loader.key).should be == 2
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
@@ -124,9 +125,9 @@ describe Trifle::Loader do
|
|
124
125
|
end
|
125
126
|
|
126
127
|
it "should handle ipv6 data" do
|
127
|
-
@ipv6csv = <<-CSV
|
128
|
-
"2c0f:ffe8::", "2c0f:ffe8:ffff:ffff:ffff:ffff:ffff:ffff", "58569106662796955307479896348547874816", "58569106742025117821744233942091825151", "NG", "Nigeria"
|
129
|
-
"2c0f:fff0::", "2c0f:fff0:ffff:ffff:ffff:ffff:ffff:ffff", "58569107296622255421594597096899477504", "58569107375850417935858934690443427839", "NG", "Nigeria"
|
128
|
+
@ipv6csv = <<-CSV.strip_heredoc
|
129
|
+
"2c0f:ffe8::", "2c0f:ffe8:ffff:ffff:ffff:ffff:ffff:ffff", "58569106662796955307479896348547874816", "58569106742025117821744233942091825151", "NG", "Nigeria"
|
130
|
+
"2c0f:fff0::", "2c0f:fff0:ffff:ffff:ffff:ffff:ffff:ffff", "58569107296622255421594597096899477504", "58569107375850417935858934690443427839", "NG", "Nigeria"
|
130
131
|
CSV
|
131
132
|
-> { @loader.parse(@ipv6csv) }.should_not raise_error
|
132
133
|
end
|
@@ -162,7 +163,7 @@ describe Trifle::Loader do
|
|
162
163
|
it "should clear existing data" do
|
163
164
|
@loader.load_data @valid_data
|
164
165
|
@loader.clear
|
165
|
-
@loader.redis.llen(
|
166
|
+
@loader.redis.llen(@loader.key).should be == 0
|
166
167
|
end
|
167
168
|
end
|
168
169
|
|
data/spec/trifle_spec.rb
CHANGED
@@ -8,13 +8,14 @@ describe Trifle do
|
|
8
8
|
|
9
9
|
describe "#load" do
|
10
10
|
before do
|
11
|
-
@
|
11
|
+
@redis = Redis.new
|
12
|
+
@trifle = Trifle.new(@redis)
|
12
13
|
@options = { filenames: "foobar.csv" }
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should pass this to the loader" do
|
16
17
|
loader = mock Trifle::Loader
|
17
|
-
Trifle::Loader.should_receive(:new).and_return(loader)
|
18
|
+
Trifle::Loader.should_receive(:new).with(@redis, key: @trifle.key).and_return(loader)
|
18
19
|
loader.should_receive(:handle).with(@options)
|
19
20
|
@trifle.load @options
|
20
21
|
end
|
@@ -22,13 +23,14 @@ describe Trifle do
|
|
22
23
|
|
23
24
|
describe "#find" do
|
24
25
|
before do
|
25
|
-
@
|
26
|
+
@redis = Redis.new
|
27
|
+
@trifle = Trifle.new(@redis)
|
26
28
|
@ip = "127.0.0.1"
|
27
29
|
end
|
28
30
|
|
29
31
|
it "should pass this to the finder" do
|
30
32
|
finder = mock Trifle::Finder
|
31
|
-
Trifle::Finder.should_receive(:new).and_return(finder)
|
33
|
+
Trifle::Finder.should_receive(:new).with(@redis, key: @trifle.key).and_return(finder)
|
32
34
|
finder.should_receive(:handle).with(@ip)
|
33
35
|
@trifle.find @ip
|
34
36
|
end
|
data/trifle.gemspec
CHANGED
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.2
|
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-06-
|
12
|
+
date: 2012-06-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70340253404740 !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: *
|
24
|
+
version_requirements: *70340253404740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rujitsu
|
27
|
-
requirement: &
|
27
|
+
requirement: &70340253404100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,21 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70340253404100
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: active_support
|
38
|
+
requirement: &70340253403320 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70340253403320
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: fakeredis
|
38
|
-
requirement: &
|
49
|
+
requirement: &70340253402820 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ~>
|
@@ -43,7 +54,7 @@ dependencies:
|
|
43
54
|
version: 0.3.0
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70340253402820
|
47
58
|
description: Stores the GeoIP databases in Redis and gives it a simple way to lookup
|
48
59
|
IPs and map them to countries
|
49
60
|
email:
|