guillotine 0.0.3 → 0.0.4
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/guillotine.gemspec +1 -1
- data/lib/guillotine/adapters/riak_adapter.rb +11 -6
- data/lib/guillotine.rb +1 -1
- data/test/riak_adapter_test.rb +13 -11
- metadata +5 -5
data/guillotine.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'guillotine'
|
16
|
-
s.version = '0.0.
|
16
|
+
s.version = '0.0.4'
|
17
17
|
s.date = '2011-08-17'
|
18
18
|
s.rubyforge_project = 'guillotine'
|
19
19
|
|
@@ -4,9 +4,14 @@ module Guillotine
|
|
4
4
|
module Adapters
|
5
5
|
# Stores shortened URLs in Riak. Totally scales.
|
6
6
|
class RiakAdapter < Adapter
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# Initializes the adapter.
|
8
|
+
#
|
9
|
+
# code_bucket - The Riak::Bucket for all code keys.
|
10
|
+
# url_bucket - The Riak::Bucket for all url keys. If this is not
|
11
|
+
# given, the code bucket is used for all keys.
|
12
|
+
def initialize(code_bucket, url_bucket = nil)
|
13
|
+
@code_bucket = code_bucket
|
14
|
+
@url_bucket = url_bucket || @code_bucket
|
10
15
|
end
|
11
16
|
|
12
17
|
# Public: Stores the shortened version of a URL.
|
@@ -18,10 +23,10 @@ module Guillotine
|
|
18
23
|
# multiple times, this should return the same code.
|
19
24
|
def add(url, code = nil)
|
20
25
|
sha = Digest::SHA1.hexdigest url
|
21
|
-
url_obj = @
|
26
|
+
url_obj = @url_bucket.get_or_new sha, :r => 1
|
22
27
|
url_obj.data || begin
|
23
28
|
code ||= shorten url
|
24
|
-
code_obj = @
|
29
|
+
code_obj = @code_bucket.get_or_new code
|
25
30
|
if existing_url = code_obj.data # key exists
|
26
31
|
raise DuplicateCodeError.new(existing_url, url, code) if existing_url != url
|
27
32
|
end
|
@@ -40,7 +45,7 @@ module Guillotine
|
|
40
45
|
#
|
41
46
|
# Returns the String URL.
|
42
47
|
def find(code)
|
43
|
-
if obj = @
|
48
|
+
if obj = @code_bucket.get(code, :r => 1)
|
44
49
|
obj.data
|
45
50
|
end
|
46
51
|
end
|
data/lib/guillotine.rb
CHANGED
data/test/riak_adapter_test.rb
CHANGED
@@ -11,8 +11,10 @@ begin
|
|
11
11
|
#
|
12
12
|
# http://localhost:8091/riak/guillotine-test
|
13
13
|
class RiakAdapterTest < Guillotine::TestCase
|
14
|
-
|
15
|
-
|
14
|
+
client = Riak::Client.new(:http_port => 8091)
|
15
|
+
CODE_BUCKET = client['guillotine-code-test']
|
16
|
+
URL_BUCKET = client['guillotine-url-test']
|
17
|
+
ADAPTER = Guillotine::Adapters::RiakAdapter.new CODE_BUCKET, URL_BUCKET
|
16
18
|
|
17
19
|
def setup
|
18
20
|
@db = ADAPTER
|
@@ -22,24 +24,24 @@ begin
|
|
22
24
|
code = @db.add 'abc'
|
23
25
|
assert_equal 'abc', @db.find(code)
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
+
URL_BUCKET.delete Digest::SHA1.hexdigest('abc')
|
28
|
+
CODE_BUCKET.delete code
|
27
29
|
end
|
28
30
|
|
29
31
|
def test_adding_duplicate_link_returns_same_code
|
30
32
|
code = @db.add 'abc'
|
31
33
|
assert_equal code, @db.add('abc')
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
+
URL_BUCKET.delete Digest::SHA1.hexdigest('abc')
|
36
|
+
CODE_BUCKET.delete code
|
35
37
|
end
|
36
38
|
|
37
39
|
def test_adds_url_with_custom_code
|
38
40
|
assert_equal 'code', @db.add('def', 'code')
|
39
41
|
assert_equal 'def', @db.find('code')
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
+
URL_BUCKET.delete Digest::SHA1.hexdigest('def')
|
44
|
+
CODE_BUCKET.delete 'code'
|
43
45
|
end
|
44
46
|
|
45
47
|
def test_clashing_urls_raises_error
|
@@ -48,9 +50,9 @@ begin
|
|
48
50
|
@db.add 'def', code
|
49
51
|
end
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
URL_BUCKET.delete Digest::SHA1.hexdigest('abc')
|
54
|
+
URL_BUCKET.delete Digest::SHA1.hexdigest('def')
|
55
|
+
CODE_BUCKET.delete code
|
54
56
|
end
|
55
57
|
end
|
56
58
|
rescue LoadError
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guillotine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-08-17 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70097847293620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.2.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70097847293620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack-test
|
27
|
-
requirement: &
|
27
|
+
requirement: &70097847293240 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70097847293240
|
36
36
|
description: Adaptable private URL shortener
|
37
37
|
email: technoweenie@gmail.com
|
38
38
|
executables: []
|