Class: Blobsterix::Storage::FileSystem

Inherits:
Storage
  • Object
show all
Includes:
Logable
Defined in:
lib/blobsterix/storage/file_system.rb

Instance Method Summary collapse

Methods included from Logable

#logger, #logger=

Constructor Details

#initialize(path) ⇒ FileSystem

Returns a new instance of FileSystem.



8
9
10
11
12
# File 'lib/blobsterix/storage/file_system.rb', line 8

def initialize(path)
  logger.info "Create FileSystem at #{path}"
  @contents = path
  FileUtils.mkdir_p(@contents) if !Dir.exist?(@contents)
end

Instance Method Details

#bucket_exist(bucket = "root") ⇒ Object



14
15
16
# File 'lib/blobsterix/storage/file_system.rb', line 14

def bucket_exist(bucket="root")
  Dir.entries(contents).include?(bucket) and File.directory?(File.join(contents,bucket))
end

#create(bucket) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/blobsterix/storage/file_system.rb', line 67

def create(bucket)
  logger.info "Storage: create bucket #{contents(bucket)}"
  FileUtils.mkdir_p(contents(bucket)) if not File.exist?(contents(bucket))

  Nokogiri::XML::Builder.new do |xml|
  end.to_s
end

#delete(bucket) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/blobsterix/storage/file_system.rb', line 75

def delete(bucket)
  logger.info "Storage: delete bucket #{contents(bucket)}"

  FileUtils.rm_rf(contents(bucket)) if bucket_exist(bucket) && bucket_files(bucket).empty?

  #Dir.rmdir(contents(bucket)) if bucket_exist(bucket) && bucket_files(bucket).empty?
end

#delete_key(bucket, key) ⇒ Object



83
84
85
86
87
88
# File 'lib/blobsterix/storage/file_system.rb', line 83

def delete_key(bucket, key)
  Blobsterix.storage_delete(BlobAccess.new(:bucket => bucket, :id => key))
  Blobsterix.cache.invalidate(Blobsterix::BlobAccess.new(:bucket => bucket, :id => key))

  (bucket, key).delete if bucket_files(bucket).include? key
end

#get(bucket, key) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/blobsterix/storage/file_system.rb', line 48

def get(bucket, key)
  if (not File.directory?(contents(bucket, key))) and bucket_files(bucket).include?(key)
    Blobsterix.storage_read(BlobAccess.new(:bucket => bucket, :id => key))
    (bucket, key)
  else
    Blobsterix.storage_read_fail(BlobAccess.new(:bucket => bucket, :id => key))
    Blobsterix::Storage::BlobMetaData.new
  end
end

#list(bucket = "root") ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/blobsterix/storage/file_system.rb', line 18

def list(bucket="root")
  if bucket =~ /root/
    BucketList.new do |l|

      Dir.entries("#{contents}").each{|dir|
        l.buckets << Bucket.new(dir, time_string_of(dir)) if File.directory? File.join("#{contents}",dir) and !(dir =='.' || dir == '..') 
      }
    end
  else
    if bucket_exist(bucket)
      b = Bucket.new(bucket, time_string_of(bucket))
      bucket_files(bucket).each do |file|
        b.contents << BucketEntry.new(file) do |entry|
          meta = (bucket, file)
          entry.last_modified =  meta.last_modified.strftime("%Y-%m-%dT%H:%M:%S.000Z")
          entry.etag =  meta.etag
          entry.size =  meta.size
          entry.mimetype = meta.mimetype
          entry.fullpath = contents(bucket, file).gsub("#{contents}/", "")
        end
      end
      b
    else
      Nokogiri::XML::Builder.new do |xml|
        xml.Error "no such bucket"
      end
    end
  end
end

#put(bucket, key, value) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/blobsterix/storage/file_system.rb', line 58

def put(bucket, key, value)
  Blobsterix.storage_write(BlobAccess.new(:bucket => bucket, :id => key))

  meta = (bucket, key).write() {|f| f.write(value.read) }

  Blobsterix.cache.invalidate(Blobsterix::BlobAccess.new(:bucket => bucket, :id => key))
  meta
end