omnistore 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,16 +3,48 @@ module OmniStore
3
3
  module Local
4
4
  extend self
5
5
 
6
- @@mountpoint = nil
6
+ class Mountpoint
7
+ attr_reader :dir
8
+
9
+ def initialize(dir)
10
+ @dir = dir
11
+ end
12
+
13
+ def exist?(path)
14
+ File.exist?(File.expand_path(path, dir))
15
+ end
16
+
17
+ def delete(path)
18
+ FileUtils.rm_f(File.expand_path(path, dir))
19
+ end
20
+ end
7
21
 
8
22
  def mount!
9
- mountpoint = OmniStore::Config.mountpoint.to_s
10
- raise OmniStore::Errors::InvalidMountpoint unless File.exist?(mountpoint) && File.directory?(mountpoint)
11
- @@mountpoint = mountpoint
23
+ @@mountpoint = {}
24
+ case mountpoint = OmniStore::Config.mountpoint
25
+ when Array then mountpoint.each {|m| validate(m); @@mountpoint[m] = Mountpoint.new(m) }
26
+ when Hash then mountpoint.each {|k,v| validate(v); @@mountpoint[k] = Mountpoint.new(v) }
27
+ else m = mountpoint.to_s; validate(m); @@mountpoint[m] = Mountpoint.new(m)
28
+ end
29
+ end
30
+
31
+ def mountpoint(key)
32
+ @@mountpoint[key]
12
33
  end
13
34
 
14
35
  def exist?(path)
15
- File.exist?(File.join(@@mountpoint, path))
36
+ @@mountpoint.values.find {|m| m.exist?(path) }
37
+ end
38
+ alias :find :exist?
39
+
40
+ def delete(path)
41
+ @@mountpoint.values.each {|m| m.delete(path) }
42
+ end
43
+
44
+ private
45
+
46
+ def validate(mountpoint)
47
+ raise OmniStore::Errors::InvalidMountpoint unless File.exist?(mountpoint) && File.directory?(mountpoint)
16
48
  end
17
49
  end
18
50
  end
@@ -5,24 +5,60 @@ module OmniStore
5
5
  module S3
6
6
  extend self
7
7
 
8
- @@bucket = nil
8
+ class Mountpoint
9
+ attr_reader :bucket
10
+
11
+ def initialize(bucket)
12
+ @bucket = bucket
13
+ end
14
+
15
+ def exist?(key)
16
+ bucket.objects[key].exists?
17
+ end
18
+
19
+ def delete(key, options = {})
20
+ bucket.objects[key].delete(options)
21
+ end
22
+
23
+ def write(key, options_or_data = nil, options = nil)
24
+ bucket.objects[key].write(options_or_data, options)
25
+ end
26
+ end
9
27
 
10
28
  def mount!
11
- bucket = AWS::S3.new(options).buckets[OmniStore::Config.mountpoint]
12
- raise OmniStore::Errors::InvalidMountpoint unless bucket.exists?
13
- @@bucket = bucket
29
+ @@buckets = {}
30
+ case mountpoint = OmniStore::Config.mountpoint
31
+ when Array then mountpoint.each {|m| b = validate(m); @@buckets[m] = Mountpoint.new(b) }
32
+ when Hash then mountpoint.each {|k,v| b = validate(v); @@buckets[k] = Mountpoint.new(b) }
33
+ else m = mountpoint.to_s; b = validate(m); @@buckets[m] = Mountpoint.new(b)
34
+ end
35
+ end
36
+
37
+ def mountpoint(key)
38
+ @@buckets[key]
14
39
  end
15
40
 
16
41
  def exist?(path)
17
- @@bucket.objects[path].exists?
42
+ @@buckets.values.find {|b| b.exist?(path) }
43
+ end
44
+ alias :find :exist?
45
+
46
+ def delete(path, options = {})
47
+ @@buckets.values.each {|b| b.delete(path, options) }
18
48
  end
19
49
 
20
50
  def write(path, options_or_data = nil, options = nil)
21
- @@bucket.objects[path].write(options_or_data, options)
51
+ @@buckets.values.each {|b| b.write(path, options_or_data, options) }
22
52
  end
23
53
 
24
54
  private
25
55
 
56
+ def validate(name)
57
+ bucket = AWS::S3.new(options).buckets[name]
58
+ raise OmniStore::Errors::InvalidMountpoint unless bucket.exists?
59
+ bucket
60
+ end
61
+
26
62
  def options
27
63
  opts = {}
28
64
  opts[:access_key_id] = OmniStore::Config.access_key if OmniStore::Config.access_key
@@ -1,3 +1,3 @@
1
1
  module OmniStore
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -3,6 +3,12 @@ require 'fileutils'
3
3
 
4
4
  describe OmniStore::Storage::Local do
5
5
 
6
+ before(:each) do
7
+ OmniStore::Config.storage = 'local'
8
+ OmniStore::Config.mountpoint = MOUNTPOINT
9
+ OmniStore::Storage.remount!
10
+ end
11
+
6
12
  it 'should mount' do
7
13
  OmniStore::Storage::Local.mount!.should_not be_nil
8
14
  end
@@ -14,9 +20,14 @@ describe OmniStore::Storage::Local do
14
20
 
15
21
  it 'should exist' do
16
22
  path = 'test.txt'
17
- FileUtils.touch(File.join(OmniStore::Config.mountpoint, path))
18
- OmniStore::Storage::Local.exist?(path).should be_true
19
- OmniStore::Storage::Local.exist?(path+'.bk').should be_false
23
+ expand_path = File.expand_path(path, OmniStore::Config.mountpoint)
24
+ FileUtils.touch(expand_path)
25
+ begin
26
+ OmniStore::Storage::Local.exist?(path).should be_true
27
+ OmniStore::Storage::Local.exist?(path+'.bk').should be_false
28
+ ensure
29
+ OmniStore::Storage::Local.delete(path)
30
+ end
20
31
  end
21
32
 
22
33
  end
@@ -5,7 +5,7 @@ describe "OmniStore::Storage::S3" do
5
5
 
6
6
  before(:each) do
7
7
  OmniStore::Config.storage = 's3'
8
- OmniStore::Config.mountpoint = ENV['AWS_BUCKET']
8
+ OmniStore::Config.mountpoint = AWS_BUCKET
9
9
  OmniStore::Storage.remount!
10
10
  end
11
11
 
@@ -19,10 +19,14 @@ describe "OmniStore::Storage::S3" do
19
19
  end
20
20
 
21
21
  it 'should exist' do
22
- path = 'test.txt'
23
- OmniStore::Storage::S3.write(path, '')
24
- OmniStore::Storage::S3.exist?(path).should be_true
25
- OmniStore::Storage::S3.exist?(path+'.bk').should be_false
22
+ key = 'test.txt'
23
+ OmniStore::Storage::S3.write(key, '')
24
+ begin
25
+ OmniStore::Storage::S3.exist?(key).should be_true
26
+ OmniStore::Storage::S3.exist?(key+'.bk').should be_false
27
+ ensure
28
+ OmniStore::Storage::S3.delete(key)
29
+ end
26
30
  end
27
31
 
28
32
  end
@@ -7,6 +7,8 @@ require 'aws-sdk'
7
7
  require 'omnistore'
8
8
 
9
9
  MOUNTPOINT = File.join(File.dirname(__FILE__), '/../data')
10
+ AWS_BUCKET = ENV['AWS_BUCKET']
11
+
10
12
  OmniStore.configure do |config|
11
13
  config.storage = 'local'
12
14
  config.mountpoint = MOUNTPOINT
@@ -26,6 +28,5 @@ RSpec.configure do |config|
26
28
  OmniStore::Config.reset_endpoint
27
29
  OmniStore::Config.reset_proxy_uri
28
30
  OmniStore.logger.level = Logger::FATAL
29
- FileUtils.rm_rf(Dir.glob(File.join(MOUNTPOINT, '*')))
30
31
  end
31
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnistore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-07 00:00:00.000000000 Z
12
+ date: 2012-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -118,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
118
  version: '0'
119
119
  segments:
120
120
  - 0
121
- hash: 671942063
121
+ hash: -480897425
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  none: false
124
124
  requirements:
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  segments:
129
129
  - 0
130
- hash: 671942063
130
+ hash: -480897425
131
131
  requirements: []
132
132
  rubyforge_project:
133
133
  rubygems_version: 1.8.24