class Kcl::Types::ExtendedSequenceNumber

Constants

AT_TIMESTAMP_VALUE
LATEST_VALUE
TRIM_HORIZON_VALUE

Attributes

sequence_number[R]
sub_sequence_number[R]

Public Class Methods

digits?(str) click to toggle source

@param [String] str @return [Boolean]

# File lib/kcl/types/extended_sequence_number.rb, line 48
def self.digits?(str)
  return false if str.nil? || str.empty?
  (str =~ /\A[0-9]+\z/) != nil
end
digits_or_sentinel?(str) click to toggle source

@param [String] str @return [Boolean]

# File lib/kcl/types/extended_sequence_number.rb, line 28
def self.digits_or_sentinel?(str)
  digits?(str) || sentinel?(str)
end
latest() click to toggle source

@return [Kcl::Types::ExtendedSequenceNumber]

# File lib/kcl/types/extended_sequence_number.rb, line 12
def self.latest
  @_latest ||= self.new(Kcl::Checkpoints::Sentinel::LATEST)
end
new(sequence_number, sub_sequence_number = 0) click to toggle source

@param [String] sequence_number @param [Number] sub_sequence_number

# File lib/kcl/types/extended_sequence_number.rb, line 55
def initialize(sequence_number, sub_sequence_number = 0)
  @sequence_number     = sequence_number
  @sub_sequence_number = sub_sequence_number
end
sentinel?(str) click to toggle source

@param [String] str @return [Boolean]

# File lib/kcl/types/extended_sequence_number.rb, line 34
def self.sentinel?(str)
  case str
  when Kcl::Checkpoints::Sentinel::TRIM_HORIZON,
    Kcl::Checkpoints::Sentinel::LATEST,
    Kcl::Checkpoints::Sentinel::SHARD_END,
    Kcl::Checkpoints::Sentinel::AT_TIMESTAMP
    true
  else
    false
  end
end
shard_end() click to toggle source

@return [Kcl::Types::ExtendedSequenceNumber]

# File lib/kcl/types/extended_sequence_number.rb, line 17
def self.shard_end
  @_shard_end ||= self.new(Kcl::Checkpoints::Sentinel::SHARD_END)
end
trim_horizon() click to toggle source

@return [Kcl::Types::ExtendedSequenceNumber]

# File lib/kcl/types/extended_sequence_number.rb, line 22
def self.trim_horizon
  @_trim_horizon ||= self.new(Kcl::Checkpoints::Sentinel::TRIM_HORIZON)
end

Public Instance Methods

equals(extended_sequence_number) click to toggle source

@param [Kcl::Types::ExtendedSequenceNumber] extended_sequence_number @return [Boolean]

# File lib/kcl/types/extended_sequence_number.rb, line 82
def equals(extended_sequence_number)
  if @sequence_number != extended_sequence_number.sequence_number
    return false
  end
  @sub_sequence_number == extended_sequence_number.sub_sequence_number
end
value() click to toggle source

@return [BigDecimal]

# File lib/kcl/types/extended_sequence_number.rb, line 61
def value
  if self.class.digits?(@sequence_number)
    return BigDecimal(@sequence_number)
  end

  case @sequence_number
  when Kcl::Checkpoints::Sentinel::LATEST
    LATEST_VALUE
  when Kcl::Checkpoints::Sentinel::TRIM_HORIZON
    TRIM_HORIZON_VALUE
  when Kcl::Checkpoints::Sentinel::AT_TIMESTAMP
    AT_TIMESTAMP_VALUE
  else
    raise Kcl::Errors::IllegalArgumentError.new(
      'Expected a string of digits, TRIM_HORIZON, LATEST or AT_TIMESTAMP but received ' + @sequence_number
    )
  end
end