Class: EventStore::HTTP::ReadEvent

Inherits:
Object
  • Object
show all
Includes:
Request, Log::Dependency
Defined in:
lib/event_store/http/read_event.rb,
lib/event_store/http/read_event/log_text.rb,
lib/event_store/http/read_event/substitute.rb

Direct Known Subclasses

Substitute::ReadEvent

Defined Under Namespace

Modules: LogText, Substitute

Constant Summary collapse

Error =
Class.new StandardError
EventNotFoundError =
Class.new Error

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Request

included

Instance Attribute Details

#output_schemaObject



11
12
13
# File 'lib/event_store/http/read_event.rb', line 11

def output_schema
  @output_schema ||= MediaTypes::Atom::Event
end

Instance Method Details

#build_request(uri) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/event_store/http/read_event.rb', line 54

def build_request(uri)
  if uri.is_a? URI
    path = uri.path
  elsif uri.start_with? 'http'
    path = URI.parse(uri).path
  else
    path = uri
  end

  request = Net::HTTP::Get.new path
  request['Accept'] = MediaTypes::Atom.mime
  request
end

#call(uri = nil, stream: nil, position: nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/event_store/http/read_event.rb', line 15

def call(uri=nil, stream: nil, position: nil)
  uri ||= self.event_path stream, position

  logger.trace { "Reading event (#{LogText.attributes uri})" }

  request = build_request uri

  response = connection.request request

  case response
  when Net::HTTPOK
    event = Transform::Read.(response.body, :json, output_schema)

    logger.info { "Read event done (#{LogText.attributes uri, response: response}, OutputSchema: #{output_schema})" }

    event

  when Net::HTTPNotFound
    error_message = "Event not found (#{LogText.attributes uri, response: response})"
    logger.error { error_message }
    raise EventNotFoundError, error_message

  else
    error_message = "Client error (#{LogText.attributes uri, response: response})"
    logger.error { error_message }
    raise Error, error_message
  end
end

#event_path(stream, position) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/event_store/http/read_event.rb', line 44

def event_path(stream, position)
  if stream.nil? || position.nil?
    error_message = "Both stream and position must be specified when URI is omitted (Stream: #{stream.inspect}, Position: #{position.inspect})"
    logger.error { error_message }
    raise ArgumentError, error_message
  end

  "/streams/#{stream}/#{position}"
end