Sha256: 3d38a57f4a66d8ff57bf23f48d26de02b651ac82d0aab6f5bc134103f4baea50

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

module Riak
  module Crdt
    # A map that exists inside a {TypedCollection} inside another map.
    class InnerMap
      attr_reader :counters, :flags, :maps, :registers, :sets

      attr_accessor :name

      # The parent of this counter.
      #
      # @api private
      attr_reader :parent

      # @api private
      def initialize(parent, value={})
        @parent = parent
        @value = value.symbolize_keys

        initialize_collections
      end

      # @api private
      def operate(inner_operation)
        wrapped_operation = Operation::Update.new.tap do |op|
          op.value = inner_operation
          op.type = :map
        end

        @parent.operate(name, wrapped_operation)
      end

      # @api private
      def self.delete
        Operation::Delete.new.tap do |op|
          op.type = :map
        end
      end

      def context?
        @parent.context?
      end

      private
      def initialize_collections
        @counters = TypedCollection.new InnerCounter, self, @value[:counters]
        @flags = TypedCollection.new InnerFlag, self, @value[:flags]
        @maps = TypedCollection.new InnerMap, self, @value[:maps]
        @registers = TypedCollection.new InnerRegister, self, @value[:registers]
        @sets = TypedCollection.new InnerSet, self, @value[:sets]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
riak-client-2.0.0.rc1 lib/riak/crdt/inner_map.rb