class DeepStore::DAO

Constants

Result

Attributes

adapter[R]
bucket[R]
codec[R]
resource_class[R]

Public Class Methods

new(data = {}) click to toggle source
# File lib/deep_store/dao.rb, line 7
def initialize(data = {})
  @adapter = data.fetch(:adapter, DeepStore.adapter)
  @bucket  = data.fetch(:bucket, DeepStore.settings.bucket)
  @codec   = data.fetch(:codec)
end

Public Instance Methods

delete(key) click to toggle source
# File lib/deep_store/dao.rb, line 37
def delete(key)
  adapter.delete_object(bucket: bucket, key: key)
end
expand_path(path) click to toggle source
# File lib/deep_store/dao.rb, line 41
def expand_path(path)
  keys   = []
  marker = nil

  while (objects = remote_objects_for(path, marker)).any?
    keys.concat(objects.map(&:key))
    marker = objects.last.key
  end

  keys.uniq
end
get(key) click to toggle source
# File lib/deep_store/dao.rb, line 21
def get(key)
  stream = Tempfile.new
  stream.binmode
  object = adapter.get_object(bucket: bucket, key: key, response_target: stream)
  Result.new(object: object, stream: codec.decode(stream))
rescue Aws::S3::Errors::NoSuchKey
  raise DeepStore::Errors::RecordNotFound
rescue Aws::S3::Errors::NotFound
  raise DeepStore::Errors::RecordNotFound
end
head(key) click to toggle source
# File lib/deep_store/dao.rb, line 13
def head(key)
  adapter.head_object(bucket: bucket, key: key)
rescue Aws::S3::Errors::NoSuchKey
  raise DeepStore::Errors::RecordNotFound
rescue Aws::S3::Errors::NotFound
  raise DeepStore::Errors::RecordNotFound
end
put(key, stream) click to toggle source
# File lib/deep_store/dao.rb, line 32
def put(key, stream)
  encoded_stream = codec.encode(stream)
  adapter.put_object(bucket: bucket, key: key, body: encoded_stream)
end

Private Instance Methods

remote_objects_for(path, marker = nil) click to toggle source
# File lib/deep_store/dao.rb, line 55
def remote_objects_for(path, marker = nil)
  adapter.list_objects(bucket: bucket, prefix: path, marker: marker, max_keys: 50).contents
end