Class: SolidObjects::Client
- Inherits:
-
Object
- Object
- SolidObjects::Client
- Defined in:
- lib/solid_objects/client.rb,
sig/generated/lib/solid_objects/client.rbs
Instance Attribute Summary collapse
-
#mailbox ⇒ Object
readonly
Returns the value of attribute mailbox.
Instance Method Summary collapse
- #async(reference, message_name, arguments, available_at: nil, idempotency_key: nil, authorization_context: nil) ⇒ MessageReference
- #authorize!(hook, reference, message_name, arguments, authorization_context:) ⇒ void
- #authorize_destroy!(reference, authorization_context:) ⇒ void
- #destroy(reference, authorization_context: nil) ⇒ Boolean
-
#initialize(mailbox: Mailbox.new) ⇒ Client
constructor
A new instance of Client.
- #sync(reference, message_name, arguments, timeout:, idempotency_key: nil, authorization_context: nil) ⇒ Object
Constructor Details
Instance Attribute Details
#mailbox ⇒ Object (readonly)
Returns the value of attribute mailbox.
94 95 96 |
# File 'lib/solid_objects/client.rb', line 94 def mailbox @mailbox end |
Instance Method Details
#async(reference, message_name, arguments, available_at: nil, idempotency_key: nil, authorization_context: nil) ⇒ MessageReference
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/solid_objects/client.rb', line 16 def async(reference, , arguments, available_at: nil, idempotency_key: nil, authorization_context: nil) actor_class = SolidObjects.registry.fetch(reference.actor_type) = .to_sym raise UnknownMessage, "unknown message #{.inspect}" unless actor_class.definition..key?() ( SolidObjects.configuration., reference, , arguments, authorization_context: ) mailbox.enqueue( reference, , arguments, kind: "async", available_at:, idempotency_key: ) end |
#authorize!(hook, reference, message_name, arguments, authorization_context:) ⇒ void
This method returns an undefined value.
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/solid_objects/client.rb', line 97 def (hook, reference, , arguments, authorization_context:) = hook.call( actor_type: reference.actor_type, actor_id: reference.actor_id, message_name: .to_s, arguments:, authorization_context: ) return if raise Unauthorized, "actor invocation is not authorized" end |
#authorize_destroy!(reference, authorization_context:) ⇒ void
This method returns an undefined value.
111 112 113 114 115 116 117 118 119 120 |
# File 'lib/solid_objects/client.rb', line 111 def (reference, authorization_context:) = SolidObjects.configuration..call( actor_type: reference.actor_type, actor_id: reference.actor_id, authorization_context: ) return if raise Unauthorized, "actor destruction is not authorized" end |
#destroy(reference, authorization_context: nil) ⇒ Boolean
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/solid_objects/client.rb', line 64 def destroy(reference, authorization_context: nil) raise ActorCallCycle, "actors cannot synchronously destroy another actor" if Context.current_actor SolidObjects.registry.fetch(reference.actor_type) (reference, authorization_context:) instance_id = SolidObjects.database_adapter.transaction do instance = Instance.lock.find_by( actor_type: reference.actor_type, actor_id: reference.actor_id ) next unless instance instance_id = instance.id instance.delete instance_id end return false unless instance_id SolidObjects.instrument( :"actor.destroyed", instance_id:, actor_type: reference.actor_type, actor_id: reference.actor_id ) SolidObjects.wake_up.signal true end |
#sync(reference, message_name, arguments, timeout:, idempotency_key: nil, authorization_context: nil) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/solid_objects/client.rb', line 39 def sync(reference, , arguments, timeout:, idempotency_key: nil, authorization_context: nil) actor_class = SolidObjects.registry.fetch(reference.actor_type) = .to_sym query = actor_class.definition.queries.key?() = actor_class.definition..key?() raise UnknownMessage, "unknown message #{.inspect}" unless query || ( query ? SolidObjects.configuration. : SolidObjects.configuration., reference, , arguments, authorization_context: ) = mailbox.enqueue( reference, , arguments, kind: "sync", idempotency_key: ) SynchronousInvocation.new.call(, timeout:) end |