Class: Bucket
- Inherits:
-
Bit
- Object
- ActiveRecord::Base
- Bit
- Bucket
show all
- Defined in:
- lib/sinatra-s3/models/bucket.rb
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_disable ⇒ Object
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_init ⇒ Object
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.login)
g.config('user.email', self.owner.email)
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
|
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_filesystem ⇒ Object
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
|