class EventStoreClient::GRPC::Commands::Streams::LinkTo

Public Instance Methods

call(stream_name, events, options: {}) click to toggle source
# File lib/event_store_client/adapters/grpc/commands/streams/link_to.rb, line 20
def call(stream_name, events, options: {})
  events.each_with_index do |event, index|
    custom_metadata = JSON.generate(
      "type": '$>',
      "created_at": Time.now,
      "encryption": event.metadata['encryption'] || ''
    )

    event_metadata = event.metadata.tap do |h|
      h['type'] = '$>'
      h['content-type'] = 'application/json'
      h.delete('encryption')
    end

    event_id = event.id
    event_id = SecureRandom.uuid if event.id.nil? || event.id.empty?

    payload = [
      request.new(
        options: {
          stream_identifier: {
            streamName: stream_name
          },
          any: {}
        }
      ),
      request.new(
        proposed_message: {
          id: {
            string: event_id
          },
          data: event.title,
          custom_metadata: custom_metadata,
          metadata: event_metadata
        }
      )
    ]
    service.append(payload, metadata: metadata)
  end
  Success()
end