48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require 's3'
|
|
|
|
module Support
|
|
module S3
|
|
class FakeObject
|
|
attr_accessor :key, :size
|
|
def initialize(key, options = {})
|
|
@key = key
|
|
@size = options[:size] || "0"
|
|
end
|
|
end
|
|
|
|
class FakeService
|
|
attr_reader :buckets
|
|
def initialize(bucket)
|
|
@buckets = [bucket]
|
|
@buckets.stubs(:find).returns(bucket)
|
|
end
|
|
end
|
|
|
|
class FakeBucket
|
|
def initialize(objects)
|
|
@objects = Array(objects)
|
|
end
|
|
|
|
def objects(params = {})
|
|
params.each_key { |key| raise "cannot fake #{key}" unless key == :prefix }
|
|
prefix = params[:prefix] || ""
|
|
@objects.select { |o| o.key.start_with? prefix }
|
|
end
|
|
|
|
def add(key, options = {})
|
|
@objects << FakeObject.new(key, options)
|
|
end
|
|
|
|
alias_method :<<, :add
|
|
end
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
before(:each) { ::S3::Service.stubs(:new).returns(s3_service) }
|
|
let(:s3_service) { FakeService.new(s3_bucket) }
|
|
let(:s3_bucket) { FakeBucket.new(s3_objects) }
|
|
let(:s3_objects) { [] }
|
|
end
|
|
end
|
|
end |