Sha256: f17b63c3c427c53abbec49c39f486ab46118d09b5e034e8f783c18c481c37279

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require 'builder'
require 'thread'
require 'fakes3/s3_object'
require 'fakes3/red_black_tree'

module FakeS3
  class Bucket
    attr_accessor :name,:creation_date,:objects

    def initialize(name,creation_date,objects)
      @name = name
      @creation_date = creation_date
      @objects = SortedSet.new
      @objects = RedBlackTree.new
      objects.each do |obj|
        @objects.add(obj)
      end
      @mutex = Mutex.new
    end

    def <<(object)
      # Unfortunately have to synchronize here since the RB Tree is not thread
      # safe. Probably can get finer granularity if performance is important
      @mutex.synchronize do
        exists = @objects.search(object.name)
        if exists.nil?
          @objects.add(object.name,object)
        end
      end
    end

    def delete(object_name)
      @objects.delete_via_key(object_name)
    end

    def query_for_range(options)
      marker = options[:marker]
      prefix = options[:prefix]
      max_keys = options[:max_keys] || 1000
      delimiter = options[:delimiter]

      matches = []
      is_truncated = false

      @mutex.synchronize do
        matches, is_truncated = @objects.search_for_range(
          marker,prefix,max_keys,delimiter)
      end

      bq = BucketQuery.new
      bq.bucket = self
      bq.marker = marker
      bq.prefix = prefix
      bq.max_keys = max_keys
      bq.delimiter = delimiter
      bq.matches = matches
      bq.is_truncated = is_truncated
      return bq
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fakes3-0.1.1 lib/fakes3/bucket.rb