Sha256: 824b1b227e09bb6dab46b4b17df844fc6cdc936fcabdbce63b117b8b902b8d89

Contents?: true

Size: 995 Bytes

Versions: 12

Compression:

Stored size: 995 Bytes

Contents

module Eternity
  class Index < Restruct::NestedHash.new(CollectionIndex)

    attr_reader :name

    def initialize(name=nil)
      @name = name ? name.to_s : SecureRandom.uuid
      super connection: Eternity.connection,
            id: Eternity.keyspace[:index][@name]
    end

    def apply(delta)
      delta.each do |collection, elements|
        elements.each do |id, change|
          args = [id, change['data']].compact
          self[collection].send change['action'], *args
        end
      end
    end

    def write_blob
      Blob.write :index, dump
    end

    def self.read_blob(sha1)
      Index.new.tap do |index|
        index.restore Blob.read :index, sha1
      end
    end

    def self.all
      sections_count = Eternity.keyspace[:index].sections.count
      names = Eternity.connection.call('KEYS', Eternity.keyspace[:index]['*']).map do |key|
        Restruct::Id.new(key).sections[sections_count]
      end.uniq
      names.map { |name| new name }
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
eternity-4.0.0 lib/eternity/index.rb
eternity-3.0.1 lib/eternity/index.rb
eternity-3.0.0 lib/eternity/index.rb
eternity-2.0.1 lib/eternity/index.rb
eternity-2.0.0 lib/eternity/index.rb
eternity-1.1.1 lib/eternity/index.rb
eternity-1.1.0 lib/eternity/index.rb
eternity-1.0.0 lib/eternity/index.rb
eternity-0.1.3 lib/eternity/index.rb
eternity-0.1.2 lib/eternity/index.rb
eternity-0.1.1 lib/eternity/index.rb
eternity-0.1.0 lib/eternity/index.rb