Class: GraphAgent::Channels::EphemeralValue

Inherits:
BaseChannel
  • Object
show all
Defined in:
lib/graph_agent/channels/ephemeral_value.rb

Constant Summary

Constants inherited from BaseChannel

BaseChannel::MISSING

Instance Attribute Summary

Attributes inherited from BaseChannel

#key

Instance Method Summary collapse

Methods inherited from BaseChannel

#consume, #finish

Constructor Details

#initialize(key: "", guard: true) ⇒ EphemeralValue

Returns a new instance of EphemeralValue.



6
7
8
9
10
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 6

def initialize(key: "", guard: true)
  super(key: key)
  @guard = guard
  @value = MISSING
end

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 38

def available?
  !@value.equal?(MISSING)
end

#checkpointObject



42
43
44
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 42

def checkpoint
  @value
end

#copyObject



52
53
54
55
56
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 52

def copy
  ch = self.class.new(key: key, guard: @guard)
  ch.instance_variable_set(:@value, @value)
  ch
end

#from_checkpoint(checkpoint) ⇒ Object



46
47
48
49
50
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 46

def from_checkpoint(checkpoint)
  ch = self.class.new(key: key, guard: @guard)
  ch.instance_variable_set(:@value, checkpoint.equal?(MISSING) ? MISSING : checkpoint)
  ch
end

#getObject

Raises:



12
13
14
15
16
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 12

def get
  raise EmptyChannelError.new("Channel '#{key}' is empty") if @value.equal?(MISSING)

  @value
end

#update(values) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/graph_agent/channels/ephemeral_value.rb', line 18

def update(values)
  if values.empty?
    if @value.equal?(MISSING)
      return false
    else
      @value = MISSING
      return true
    end
  end

  if values.length != 1 && @guard
    raise InvalidUpdateError.new(
      "At key '#{key}': EphemeralValue(guard=true) can receive only one value per step."
    )
  end

  @value = values.last
  true
end