class Socrates::Core::StateData

Constants

END_OF_CONVERSATION

Attributes

last_interaction_timestamp[RW]
state_action[RW]
state_id[RW]

Public Class Methods

deserialize(string) click to toggle source
# File lib/socrates/core/state_data.rb, line 99
def self.deserialize(string)
  YAML.load(string)
end
new(state_id: nil, state_action: nil, data: {}) click to toggle source
# File lib/socrates/core/state_data.rb, line 14
def initialize(state_id: nil, state_action: nil, data: {})
  @state_id       = state_id
  @state_action   = state_action
  @data           = data
  @temporary_keys = []
end

Public Instance Methods

clear(key = nil) click to toggle source
# File lib/socrates/core/state_data.rb, line 85
def clear(key = nil)
  if key
    @data.delete(key)
    @temporary_keys.delete(key)
  else
    @data.clear
    @temporary_keys.clear
  end
end
each_key(&block) click to toggle source
# File lib/socrates/core/state_data.rb, line 41
def each_key(&block)
  @data.each_key(&block)
end
elapsed_time() click to toggle source
# File lib/socrates/core/state_data.rb, line 33
def elapsed_time
  Time.current - @last_interaction_timestamp
end
expired?() click to toggle source
# File lib/socrates/core/state_data.rb, line 25
def expired?
  return false if last_interaction_timestamp.nil? ||
                  Socrates.config.expired_timeout.nil? ||
                  Socrates.config.expired_timeout.zero?

  elapsed_time > Socrates.config.expired_timeout
end
finished?() click to toggle source
# File lib/socrates/core/state_data.rb, line 21
def finished?
  @state_id.nil? || @state_id == END_OF_CONVERSATION
end
get(key, clear: false) click to toggle source
# File lib/socrates/core/state_data.rb, line 57
def get(key, clear: false)
  value = @data[key]

  if @temporary_keys.include?(key) || clear
    @temporary_keys.delete(key)
    @data.delete(key)
  end

  value
end
has_key?(key) click to toggle source
# File lib/socrates/core/state_data.rb, line 49
def has_key?(key)
  @data.has_key?(key)
end
has_temporary_key?(key) click to toggle source
# File lib/socrates/core/state_data.rb, line 53
def has_temporary_key?(key)
  @temporary_keys.include?(key)
end
keys() click to toggle source
# File lib/socrates/core/state_data.rb, line 45
def keys
  @data.keys
end
merge(other) click to toggle source
# File lib/socrates/core/state_data.rb, line 81
def merge(other)
  @data.merge!(other)
end
reset_elapsed_time() click to toggle source
# File lib/socrates/core/state_data.rb, line 37
def reset_elapsed_time
  @last_interaction_timestamp = Time.current
end
serialize() click to toggle source
# File lib/socrates/core/state_data.rb, line 95
def serialize
  YAML.dump(self)
end
set(key, value) click to toggle source
# File lib/socrates/core/state_data.rb, line 68
def set(key, value)
  @data[key] = value
end
set_temporary(key, value) click to toggle source
# File lib/socrates/core/state_data.rb, line 72
def set_temporary(key, value)
  if @data.has_key?(key) && !@temporary_keys.include?(key)
    raise ArgumentError, "Cannot overrite key '#{key}' with a temporary value."
  end

  @data[key] = value
  @temporary_keys << key
end