Class: SeaShanty::RequestSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/sea_shanty/request_serializer.rb

Instance Method Summary collapse

Constructor Details

#initialize(headers_filter: lambda { |_name, value| value }, body_filter: lambda { |body| body }) ⇒ RequestSerializer

Returns a new instance of RequestSerializer.



8
9
10
11
# File 'lib/sea_shanty/request_serializer.rb', line 8

def initialize(headers_filter: lambda { |_name, value| value }, body_filter: lambda { |body| body })
  @headers_filter = headers_filter
  @body_filter = body_filter
end

Instance Method Details

#digest(request) ⇒ Object



13
14
15
# File 'lib/sea_shanty/request_serializer.rb', line 13

def digest(request)
  Digest::SHA1.hexdigest(request.method.to_s + request.url.to_s + body_filter.call(request.body.to_s))
end

#file_path(request) ⇒ Object



21
22
23
24
25
# File 'lib/sea_shanty/request_serializer.rb', line 21

def file_path(request)
  # Don't assume system directory separator is /
  url_path = request.url.path.delete_prefix("/").split("/").join(File::SEPARATOR)
  Pathname.new(request.url.hostname).join(url_path, request.method.to_s, filename(request))
end

#filename(request) ⇒ Object



17
18
19
# File 'lib/sea_shanty/request_serializer.rb', line 17

def filename(request)
  "#{digest(request)}.yml"
end

#serialize(request) ⇒ Object



27
28
29
30
31
32
# File 'lib/sea_shanty/request_serializer.rb', line 27

def serialize(request)
  hash = request.to_h
  hash[:headers] = hash.fetch(:headers).map { |name, value| [name, headers_filter.call(name, value)] }.to_h
  hash[:body] = body_filter.call(hash.fetch(:body))
  hash
end