Class: SolidObjects::ActorSnapshot

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_objects/actor_snapshot.rb,
sig/generated/lib/solid_objects/actor_snapshot.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reference) ⇒ ActorSnapshot

Returns a new instance of ActorSnapshot.

RBS:

  • (Reference) -> void

Parameters:



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/solid_objects/actor_snapshot.rb', line 16

def initialize(reference)
  @reference = reference
  @actor_class = SolidObjects.registry.fetch(reference.actor_type)
  @instance = Instance.find_by(
    actor_type: reference.actor_type,
    actor_id: reference.actor_id
  )
  @instance_id = @instance&.id || 0
  @revision = @instance&.state_revision || 0
  @actor = build_actor
  @observable_values = nil
  @observable_value_cache = {}
end

Instance Attribute Details

#actorObject (readonly)

RBS:

  • @reference: Reference

  • @actor_class: Class

  • @actor: Actor

  • @instance_id: Integer

  • @revision: Integer

  • @observable_values: Hash[String, untyped]?

  • @observable_value_cache: Hash[String, untyped]

Returns:

  • (Object)


13
14
15
# File 'lib/solid_objects/actor_snapshot.rb', line 13

def actor
  @actor
end

#actor_classObject (readonly)

RBS:

  • @reference: Reference

  • @actor_class: Class

  • @actor: Actor

  • @instance_id: Integer

  • @revision: Integer

  • @observable_values: Hash[String, untyped]?

  • @observable_value_cache: Hash[String, untyped]

Returns:

  • (Object)


13
14
15
# File 'lib/solid_objects/actor_snapshot.rb', line 13

def actor_class
  @actor_class
end

#instanceObject (readonly)

Returns the value of attribute instance.

Returns:

  • (Object)


46
47
48
# File 'lib/solid_objects/actor_snapshot.rb', line 46

def instance
  @instance
end

#instance_idObject (readonly)

RBS:

  • @reference: Reference

  • @actor_class: Class

  • @actor: Actor

  • @instance_id: Integer

  • @revision: Integer

  • @observable_values: Hash[String, untyped]?

  • @observable_value_cache: Hash[String, untyped]

Returns:

  • (Object)


13
14
15
# File 'lib/solid_objects/actor_snapshot.rb', line 13

def instance_id
  @instance_id
end

#referenceObject (readonly)

RBS:

  • @reference: Reference

  • @actor_class: Class

  • @actor: Actor

  • @instance_id: Integer

  • @revision: Integer

  • @observable_values: Hash[String, untyped]?

  • @observable_value_cache: Hash[String, untyped]

Returns:

  • (Object)


13
14
15
# File 'lib/solid_objects/actor_snapshot.rb', line 13

def reference
  @reference
end

#revisionObject (readonly)

RBS:

  • @reference: Reference

  • @actor_class: Class

  • @actor: Actor

  • @instance_id: Integer

  • @revision: Integer

  • @observable_values: Hash[String, untyped]?

  • @observable_value_cache: Hash[String, untyped]

Returns:

  • (Object)


13
14
15
# File 'lib/solid_objects/actor_snapshot.rb', line 13

def revision
  @revision
end

Instance Method Details

#build_actorActor

RBS:

  • () -> Actor

Returns:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/solid_objects/actor_snapshot.rb', line 49

def build_actor
  state_version = instance&.state_version || actor_class.state_version
  state_data = ApplicationWriteGuard.call(
    actor_type: reference.actor_type,
    actor_id: reference.actor_id,
    operation: "state_migration"
  ) do
    actor_class.definition.migrate_state(
      state_version,
      instance&.state || {}
    )
  end
  actor_class.new(
    actor_id: reference.actor_id,
    state: State.new(actor_class.definition.state_definition, state_data)
  )
end

#observable_value(name) ⇒ Object

RBS:

  • (Symbol | String) -> untyped

Parameters:

  • (Symbol, String)

Returns:

  • (Object)


36
37
38
39
40
41
42
# File 'lib/solid_objects/actor_snapshot.rb', line 36

def observable_value(name)
  observable_name = name.to_s
  return @observable_value_cache.fetch(observable_name) if @observable_value_cache.key?(observable_name)

  @observable_value_cache[observable_name] =
    Serialization.readonly_copy(actor.observable_value(observable_name))
end

#observable_valuesHash[String, untyped]

RBS:

  • () -> Hash[String, untyped]

Returns:

  • (Hash[String, untyped])


31
32
33
# File 'lib/solid_objects/actor_snapshot.rb', line 31

def observable_values
  @observable_values ||= Serialization.readonly_copy(actor.observable_values)
end