Class: Bucket

Inherits:
Bit
  • Object
show all
Defined in:
lib/sinatra-s3/models/bucket.rb

Direct Known Subclasses

GitBucket

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Bit

#access_readable, #acl_label, #acl_list, acl_text, #acp_readable_by?, #acp_writable_by?, #check_access, #diff, diff, #each_piece, #fullpath, #get_acls_for_bin, #git_object, #git_repository, #git_repository_path, #git_update, #grant, #objectish, #owned_by?, #readable_by?, #versioning_enabled?, #writable_by?

Class Method Details

.find_root(bucket_name) ⇒ Object



10
11
12
# File 'lib/sinatra-s3/models/bucket.rb', line 10

def self.find_root(bucket_name)
  root(bucket_name).find(:first) or raise S3::NoSuchBucket
end

Instance Method Details

#add_child(bit) ⇒ Object



27
28
29
# File 'lib/sinatra-s3/models/bucket.rb', line 27

def add_child(bit)
  bit.update_attributes(:parent_id => self.id)
end

#find_slot(oid) ⇒ Object



14
15
16
# File 'lib/sinatra-s3/models/bucket.rb', line 14

def find_slot(oid)
  Slot.find(:first, :conditions => ['deleted = 0 AND parent_id = ? AND name = ?', self.id, oid]) or raise S3::NoSuchKey
end

#git_disableObject



23
24
25
# File 'lib/sinatra-s3/models/bucket.rb', line 23

def git_disable
  FileUtils.touch(File.join(self.fullpath, '.git', 'disable_versioning'))
end

#git_initObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sinatra-s3/models/bucket.rb', line 31

def git_init
  disable_file = File.join(self.fullpath, '.git', 'disable_versioning')
  FileUtils.rm_f(disable_file) and return if File.exists?(disable_file)

  begin
    FileUtils.mkdir_p(self.fullpath) unless File.exists?(self.fullpath)
    dir_empty = !Dir.foreach(self.fullpath) {|n| break true unless /\A\.\.?\z/ =~ n}
    g = Git.init(self.fullpath)
    g.config('user.name', self.owner.)
    g.config('user.email', self.owner.email)
    # if directory is not empty we need to add the files
    # into version control
    unless dir_empty
	g.add('.')
	g.commit_all("Enabling versioning for bucket #{self.name}.")
	self.git_update
    end
    self.type = "GitBucket"
    self.save()
    self.git_update
  rescue Git::GitExecuteError => error_message
    puts "[#{Time.now}] GIT: #{error_message}" 
  end
end

#items(marker, prefix) ⇒ Object



6
7
8
# File 'lib/sinatra-s3/models/bucket.rb', line 6

def items(marker,prefix)
  Slot.bucket(self).items(marker,prefix)
end

#metainfoObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/sinatra-s3/models/bucket.rb', line 56

def metainfo
  children = self.all_children
  mii = RubyTorrent::MetaInfoInfo.new
  mii.name = self.name
  mii.piece_length = 512.kilobytes
  mii.files, files = [], []
  mii.pieces = ""
  i = 0
  Slot.find(:all, :conditions => ['parent_id = ?', self.id]).each do |slot|
    miif = RubyTorrent::MetaInfoInfoFile.new
    miif.length = slot.obj.size
    miif.md5sum = slot.obj.md5
    miif.path = File.split(slot.name)
    mii.files << miif
    files << slot.fullpath
  end
  each_piece(files, mii.piece_length) do |piece|
    mii.pieces += Digest::SHA1.digest(piece)
    i += 1
  end
  mi = RubyTorrent::MetaInfo.new
  mi.info = mii
  mi
end

#remove_from_filesystemObject



18
19
20
21
# File 'lib/sinatra-s3/models/bucket.rb', line 18

def remove_from_filesystem
  bucket_dir = File.join(S3::STORAGE_PATH, self.name)
  FileUtils.rm_rf bucket_dir if File.directory?(bucket_dir) && Dir.empty?(bucket_dir)
end