Class: Attachie::FakeDriver

Inherits:
Object
  • Object
show all
Includes:
MonitorMixin
Defined in:
lib/attachie/fake_driver.rb

Instance Method Summary collapse

Instance Method Details

#delete(name, bucket) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/attachie/fake_driver.rb', line 81

def delete(name, bucket)
  synchronize do
    objects(bucket).delete(name)
  end

  true
end

#download(name, bucket, path) ⇒ Object



97
98
99
100
101
# File 'lib/attachie/fake_driver.rb', line 97

def download(name, bucket, path)
  content = value(name, bucket)

  open(path, "wb") { |stream| stream.write(content) }
end

#exists?(name, bucket) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
78
79
# File 'lib/attachie/fake_driver.rb', line 75

def exists?(name, bucket)
  synchronize do
    objects(bucket).key?(name)
  end
end

#flushObject



107
108
109
110
111
# File 'lib/attachie/fake_driver.rb', line 107

def flush
  synchronize do
    @objects = {}
  end
end

#info(name, bucket) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/attachie/fake_driver.rb', line 47

def info(name, bucket)
  synchronize do
    raise(ItemNotFound, "Object #{ name } does not exist in bucket #{ bucket }") unless objects(bucket).key?(name)

    {
      last_modified: objects(bucket)[name][:last_modified],
      content_length: objects(bucket)[name][:data].size,
      content_type: MIME::Types.of(name).first&.to_s
    }
  end
end

#list(bucket, prefix: nil) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/attachie/fake_driver.rb', line 37

def list(bucket, prefix: nil)
  return enum_for(:list, bucket, prefix: prefix) unless block_given?

  synchronize do
    objects(bucket).sort { |a, b| a[0] <=> b[0] }.each do |key, _|
      yield key if prefix.nil? || key.start_with?(prefix)
    end
  end
end

#presigned_post(name, bucket, options = {}) ⇒ Object

Raises:



59
60
61
# File 'lib/attachie/fake_driver.rb', line 59

def presigned_post(name, bucket, options = {})
  raise NotSupported, 'presigned_post is not supported in FakeDriver'
end

#store(name, data_or_io, bucket, options = {}) ⇒ Object



63
64
65
66
67
# File 'lib/attachie/fake_driver.rb', line 63

def store(name, data_or_io, bucket, options = {})
  synchronize do
    objects(bucket)[name] = { data: data_or_io.respond_to?(:read) ? data_or_io.read : data_or_io, last_modified: Time.now.utc }
  end
end

#store_multipart(name, bucket, options = {}, &block) ⇒ Object



69
70
71
72
73
# File 'lib/attachie/fake_driver.rb', line 69

def store_multipart(name, bucket, options = {}, &block)
  synchronize do
    objects(bucket)[name] = { data: FakeMultipartUpload.new(name, bucket, options, &block).data, last_modified: Time.now.utc }
  end
end

#temp_url(name, bucket, options = {}) ⇒ Object



103
104
105
# File 'lib/attachie/fake_driver.rb', line 103

def temp_url(name, bucket, options = {})
  "https://example.com/#{bucket}/#{name}?signature=signature&expires=expires"
end

#value(name, bucket) ⇒ Object



89
90
91
92
93
94
95
# File 'lib/attachie/fake_driver.rb', line 89

def value(name, bucket)
  synchronize do
    raise(ItemNotFound, "Object #{ name } does not exist in bucket #{ bucket }") unless objects(bucket).key?(name)

    objects(bucket)[name][:data]
  end
end