class EventStoreClient::HTTP::Commands::Streams::LinkTo

Public Instance Methods

call(stream_name, events, options: {}) click to toggle source
# File lib/event_store_client/adapters/http/commands/streams/link_to.rb, line 8
def call(stream_name, events, options: {})
  expected_version = options[:expected_version]
  data = build_linking_data(events)
  headers = {
    'ES-ExpectedVersion' => expected_version&.to_s
  }.reject { |_key, val| val.nil? || val.empty? }

  response = connection.call(
    :post,
    "/streams/#{stream_name}",
    body: data,
    headers: headers
  )
  validate_response(response, expected_version)
end

Private Instance Methods

build_linking_data(events) click to toggle source
# File lib/event_store_client/adapters/http/commands/streams/link_to.rb, line 36
def build_linking_data(events)
  [events].flatten.map do |event|
    {
      eventId: event.id,
      eventType: '$>',
      data: event.title
    }
  end
end
validate_response(resp, expected_version) click to toggle source
# File lib/event_store_client/adapters/http/commands/streams/link_to.rb, line 26
def validate_response(resp, expected_version)
  wrong_version = resp.status == 400 && resp.reason_phrase == 'Wrong expected EventNumber'
  return Success() unless wrong_version

  Failure(
    "current version: #{resp.headers.fetch('es-currentversion')} | "\
    "expected: #{expected_version}"
  )
end