1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/ninefold/models/storage/directories.rb

49 lines
1.5 KiB
Ruby
Raw Normal View History

require 'fog/core/collection'
require 'fog/ninefold/models/storage/directory'
module Fog
module Storage
class Ninefold
class Directories < Fog::Collection
2011-07-09 02:55:55 -04:00
attribute :directory
model Fog::Storage::Ninefold::Directory
def all
2011-07-09 02:55:55 -04:00
directory ? ns = directory.key : ns = ''
2011-07-10 09:44:35 -04:00
ns = ns + '/' unless ns =~ /\/$/
2011-07-09 02:55:55 -04:00
data = connection.get_namespace(ns).body[:DirectoryList]
data = {:DirectoryEntry => []} if data.kind_of? String
data[:DirectoryEntry] = [data[:DirectoryEntry]] if data[:DirectoryEntry].kind_of? Hash
2011-07-09 02:55:55 -04:00
dirs = data[:DirectoryEntry].select {|de| de[:FileType] == 'directory'}
2011-07-10 09:44:35 -04:00
dirs.each do |d|
d[:Filename] = ns + d[:Filename] if directory
d[:Filename] += '/' unless d[:Filename] =~ /\/$/
end
load(dirs)
end
def get(key, options = {})
return nil if key == '' # Root dir shouldn't be retrieved like this.
2011-07-10 09:44:35 -04:00
key =~ /\/$/ ? ns = key : ns = key + '/'
res = connection.get_namespace ns
emc_meta = res.headers['x-emc-meta']
obj_id = emc_meta.scan(/objectid=(\w+),/).flatten[0]
2011-07-10 09:44:35 -04:00
new(:objectid => obj_id, :key => ns)
rescue Fog::Storage::Ninefold::NotFound
nil
end
2011-07-09 02:55:55 -04:00
def new(attributes ={})
attributes = {:directory => directory}.merge(attributes) if directory
super(attributes)
end
end
end
end
end