Class: Riak::Crdt::GrowOnlySet

Inherits:
Base show all
Includes:
Util::String
Defined in:
lib/riak/crdt/grow_only_set.rb

Overview

A distributed grow-only set containing strings, using the Riak 2 Data Types feature.

Uses the Ruby standard library ‘::Set` frequently, so the full class names will be used frequently.

Direct Known Subclasses

Set

Defined Under Namespace

Classes: BatchGrowOnlySet

Instance Attribute Summary

Attributes inherited from Base

#bucket, #bucket_type, #key

Instance Method Summary collapse

Methods included from Util::String

equal_bytes?

Methods inherited from Base

#==, #context?, #dirty?, #inspect_name, #pretty_print_cycle, #reload

Methods included from Util::Translation

#i18n_scope, #t

Constructor Details

#initialize(bucket, key, bucket_type = nil, options = {}) ⇒ GrowOnlySet

Create a grow-only set instance. The bucket type is determined by the first of these sources:

  1. The ‘bucket_type` String argument

  2. A BucketTyped::Bucket as the ‘bucket` argument

  3. The ‘Crdt::Base::DEFAULT_BUCKET_TYPES` entry

Parameters:

  • bucket (Bucket)

    the Bucket for this grow-only set

  • key (String, nil)

    The name of the grow-only set. A nil key makes Riak assign a key.

  • bucket_type (String) (defaults to: nil)

    The optional bucket type for this grow-only set.

  • options (Hash) (defaults to: {})


39
40
41
# File 'lib/riak/crdt/grow_only_set.rb', line 39

def initialize(bucket, key, bucket_type = nil, options = {})
  super(bucket, key, bucket_type || :gset, options)
end

Instance Method Details

#add(element, options = {}) ⇒ Object

Parameters:

  • element (String)

    the element to add to the set

  • options (Hash) (defaults to: {})


100
101
102
# File 'lib/riak/crdt/grow_only_set.rb', line 100

def add(element, options = {})
  operate operation(:add, element), options
end

#batch {|batcher| ... } ⇒ Object

Yields:

  • (batcher)


54
55
56
57
58
59
60
# File 'lib/riak/crdt/grow_only_set.rb', line 54

def batch
  batcher = BatchGrowOnlySet.new self

  yield batcher

  operate batcher.operations
end

#empty?Boolean

Check to see if this structure has any members.

Returns:

  • (Boolean)

    if the structure is empty



84
85
86
# File 'lib/riak/crdt/grow_only_set.rb', line 84

def empty?
  members.empty?
end

#include?(candidate) ⇒ Boolean

Check to see if a given string is present in this data structure.

Parameters:

  • candidate (String)

    string to check for inclusion in this structure

Returns:

  • (Boolean)

    if the structure includes



92
93
94
# File 'lib/riak/crdt/grow_only_set.rb', line 92

def include?(candidate)
  members.any? { |m| equal_bytes?(m, candidate) }
end

#members::Set Also known as: value

Gets the current set members from Riak if necessary, and return the stdlib ‘::Set` of them.

Returns:



67
68
69
70
# File 'lib/riak/crdt/grow_only_set.rb', line 67

def members
  reload if dirty?
  @members
end

#pretty_print(pp) ⇒ Object



104
105
106
107
108
109
# File 'lib/riak/crdt/grow_only_set.rb', line 104

def pretty_print(pp)
  super pp do
    pp.comma_breakable
    pp.pp to_a
  end
end

#to_aArray

Cast this Riak::Crdt::GrowOnlySet to a Ruby Array.

Returns:

  • (Array)

    array of set members



77
78
79
# File 'lib/riak/crdt/grow_only_set.rb', line 77

def to_a
  members.to_a
end

#vivify(value) {|batch_grow_only_set| ... } ⇒ Object

Yields a ‘BatchGrowOnlySet` to proxy multiple add operations into a single Riak update. The `BatchGrowOnlySet` has the same methods as this Riak::Crdt::GrowOnlySet.

Yield Parameters:



48
49
50
51
52
# File 'lib/riak/crdt/grow_only_set.rb', line 48

def vivify(value)
  value.each(&:freeze)
  @members = ::Set.new(value)
  @members.freeze
end