class IdempotentRequest::RequestManager
Attributes
request[R]
storage[R]
Public Class Methods
new(request, config)
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 5 def initialize(request, config) @request = request @storage = config.fetch(:storage) @callback = config[:callback] end
Public Instance Methods
lock()
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 11 def lock storage.lock(key) end
read()
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 19 def read status, headers, response = parse_data(storage.read(key)).values return unless status run_callback(:detected, key: request.key) [status, headers, response] end
unlock()
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 15 def unlock storage.unlock(key) end
write(*data)
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 27 def write(*data) status, headers, response = data response = response.body if response.respond_to?(:body) if (200..226).cover?(status) storage.write(key, payload(status, headers, response)) end data end
Private Instance Methods
key()
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 58 def key request.key end
parse_data(data)
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 40 def parse_data(data) return {} if data.to_s.empty? Oj.load(data) end
payload(status, headers, response)
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 46 def payload(status, headers, response) Oj.dump(status: status, headers: headers.to_h, response: Array(response)) end
run_callback(action, **args)
click to toggle source
# File lib/idempotent-request/request_manager.rb, line 52 def run_callback(action, **args) return unless @callback @callback.new(request).send(action, **args) end