Module: StagedEvent
- Defined in:
- lib/staged_event.rb,
lib/staged_event/model.rb,
lib/staged_event/version.rb,
lib/staged_event/publisher.rb,
lib/staged_event/subscriber.rb,
lib/staged_event/backoff_timer.rb,
lib/staged_event/configuration.rb,
lib/staged_event/event_envelope_pb.rb,
lib/staged_event/publisher_process.rb,
lib/staged_event/subscriber_process.rb,
lib/staged_event/google_pub_sub/helper.rb,
lib/staged_event/google_pub_sub/publisher.rb,
lib/staged_event/google_pub_sub/subscriber.rb,
lib/generators/staged_event/install_generator.rb
Defined Under Namespace
Modules: Configuration, GooglePubSub Classes: BackoffTimer, DeserializationError, Error, InstallGenerator, Model, Publisher, PublisherProcess, Subscriber, SubscriberProcess, UnknownEventTypeError
Constant Summary collapse
- VERSION =
"0.0.2"
- EventEnvelope =
::Google::Protobuf::DescriptorPool.generated_pool.lookup("staged_event.EventEnvelope").msgclass
Class Method Summary collapse
-
.deserialize_event(serialized_data) ⇒ OpenStruct
Converts serialized event data received from a publisher into an object with the event (and its metadata) in accessible form.
-
.from_proto(proto, **kwargs) ⇒ StagedEvent::Model
Builds an ActiveRecord model from a proto object representing an event.
-
.save_proto!(proto, **kwargs) ⇒ Object
Shortcut method to construct and persist an event with a single call.
Class Method Details
.deserialize_event(serialized_data) ⇒ OpenStruct
Converts serialized event data received from a publisher into an object with the event (and its metadata) in accessible form
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/staged_event.rb', line 63 def deserialize_event(serialized_data) envelope = EventEnvelope.decode(serialized_data) event_descriptor = Google::Protobuf::DescriptorPool.generated_pool.lookup(envelope.event.type_url) raise UnknownEventTypeError if event_descriptor.blank? proto = event_descriptor.msgclass.decode(envelope.event.value) OpenStruct.new( id: envelope.uuid, data: proto, ) rescue Google::Protobuf::ParseError raise DeserializationError end |
.from_proto(proto, **kwargs) ⇒ StagedEvent::Model
Builds an ActiveRecord model from a proto object representing an event. If the model is committed to the database, it will be published by the publisher process.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/staged_event.rb', line 35 def from_proto(proto, **kwargs) uuid = SecureRandom.uuid envelope = EventEnvelope.new( event: { type_url: proto.class.descriptor.name, value: proto.class.encode(proto), }, uuid: uuid, ) data = EventEnvelope.encode(envelope) topic = kwargs.fetch(:topic, nil) Model.new(id: uuid, data: data, topic: topic) end |
.save_proto!(proto, **kwargs) ⇒ Object
Shortcut method to construct and persist an event with a single call. Params are the same as from_proto.
54 55 56 |
# File 'lib/staged_event.rb', line 54 def save_proto!(proto, **kwargs) StagedEvent.from_proto(proto, **kwargs).save! end |