guillotine 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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.3'
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
- def initialize(bucket)
8
- @bucket = bucket
9
- @client = bucket.client
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 = @bucket.get_or_new sha, :r => 1
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 = @bucket.get_or_new code
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 = @bucket.get(code, :r => 1)
48
+ if obj = @code_bucket.get(code, :r => 1)
44
49
  obj.data
45
50
  end
46
51
  end
data/lib/guillotine.rb CHANGED
@@ -2,7 +2,7 @@ require 'base64'
2
2
  require 'digest/md5'
3
3
 
4
4
  module Guillotine
5
- VERSION = "0.0.3"
5
+ VERSION = "0.0.4"
6
6
 
7
7
  dir = File.expand_path '../guillotine', __FILE__
8
8
  autoload :App, "#{dir}/app"
@@ -11,8 +11,10 @@ begin
11
11
  #
12
12
  # http://localhost:8091/riak/guillotine-test
13
13
  class RiakAdapterTest < Guillotine::TestCase
14
- BUCKET = Riak::Client.new(:http_port => 8091)['guillotine-test']
15
- ADAPTER = Guillotine::Adapters::RiakAdapter.new BUCKET
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
- BUCKET.delete Digest::SHA1.hexdigest('abc')
26
- BUCKET.delete code
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
- BUCKET.delete Digest::SHA1.hexdigest('abc')
34
- BUCKET.delete code
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
- BUCKET.delete Digest::SHA1.hexdigest('def')
42
- BUCKET.delete 'code'
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
- BUCKET.delete Digest::SHA1.hexdigest('abc')
52
- BUCKET.delete Digest::SHA1.hexdigest('def')
53
- BUCKET.delete code
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.3
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: &70155812898660 !ruby/object:Gem::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: *70155812898660
24
+ version_requirements: *70097847293620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack-test
27
- requirement: &70155812898280 !ruby/object:Gem::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: *70155812898280
35
+ version_requirements: *70097847293240
36
36
  description: Adaptable private URL shortener
37
37
  email: technoweenie@gmail.com
38
38
  executables: []