Class: LaunchDarkly::Interfaces::DataSystem::ChangeSetBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ldclient-rb/interfaces/data_system.rb

Overview

ChangeSetBuilder is a helper for constructing a ChangeSet.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeChangeSetBuilder

Returns a new instance of ChangeSetBuilder.



382
383
384
385
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 382

def initialize
  @intent = nil
  @changes = []
end

Instance Attribute Details

#changesArray<Change>

Returns The changes.

Returns:

  • (Array<Change>)

    The changes



380
381
382
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 380

def changes
  @changes
end

#intentString?

Returns The current intent (IntentCode).

Returns:

  • (String, nil)

    The current intent (IntentCode)



377
378
379
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 377

def intent
  @intent
end

Class Method Details

.empty(selector) ⇒ ChangeSet

Returns an empty ChangeSet, useful for initializing without data.

Parameters:

Returns:



406
407
408
409
410
411
412
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 406

def self.empty(selector)
  ChangeSet.new(
    intent_code: IntentCode::TRANSFER_FULL,
    selector: selector,
    changes: []
  )
end

.no_changesChangeSet

Represents an intent that the current data is up-to-date and doesn’t require changes.

Returns:



392
393
394
395
396
397
398
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 392

def self.no_changes
  ChangeSet.new(
    intent_code: IntentCode::TRANSFER_NONE,
    selector: Selector.no_selector,
    changes: []
  )
end

Instance Method Details

#add_delete(kind, key, version) ⇒ void

This method returns an undefined value.

Adds a deletion to the changeset.

Parameters:

  • kind (String)

    The object kind (ObjectKind)

  • key (Symbol)

    The key

  • version (Integer)

    The version



500
501
502
503
504
505
506
507
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 500

def add_delete(kind, key, version)
  @changes << Change.new(
    action: ChangeType::DELETE,
    kind: kind,
    key: key,
    version: version
  )
end

#add_put(kind, key, version, obj) ⇒ void

This method returns an undefined value.

Adds a new object to the changeset.

Parameters:

  • kind (String)

    The object kind (ObjectKind)

  • key (Symbol)

    The key

  • version (Integer)

    The version

  • obj (Hash)

    The object data



482
483
484
485
486
487
488
489
490
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 482

def add_put(kind, key, version, obj)
  @changes << Change.new(
    action: ChangeType::PUT,
    kind: kind,
    key: key,
    version: version,
    object: obj
  )
end

#expect_changesvoid

This method returns an undefined value.

Ensures that the current ChangeSetBuilder is prepared to handle changes.

Raises:

  • (RuntimeError)

    if no server-intent has been set



431
432
433
434
435
436
437
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 431

def expect_changes
  raise "changeset: cannot expect changes without a server-intent" if @intent.nil?

  return unless @intent == IntentCode::TRANSFER_NONE

  @intent = IntentCode::TRANSFER_CHANGES
end

#finish(selector) ⇒ ChangeSet

Identifies a changeset with a selector and returns the completed changeset.

Parameters:

Returns:

Raises:

  • (RuntimeError)

    if no server-intent has been set



455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 455

def finish(selector)
  raise "changeset: cannot complete without a server-intent" if @intent.nil?

  changeset = ChangeSet.new(
    intent_code: @intent,
    selector: selector,
    changes: @changes
  )
  @changes = []

  # Once a full transfer has been processed, all future changes should be
  # assumed to be changes. Flag delivery can override this behavior by
  # sending a new server intent to any connected stream.
  @intent = IntentCode::TRANSFER_CHANGES if @intent == IntentCode::TRANSFER_FULL

  changeset
end

#resetvoid

This method returns an undefined value.

Clears any existing changes while preserving the current intent.



444
445
446
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 444

def reset
  @changes = []
end

#start(intent) ⇒ void

This method returns an undefined value.

Begins a new change set with a given intent.

Parameters:

  • intent (String)

    The intent code (IntentCode)



420
421
422
423
# File 'lib/ldclient-rb/interfaces/data_system.rb', line 420

def start(intent)
  @intent = intent
  @changes = []
end