Class: Fastbeans::Request
- Inherits:
-
Object
- Object
- Fastbeans::Request
- Defined in:
- lib/fastbeans/request.rb
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
Instance Method Summary collapse
- #build_payload(call_data) ⇒ Object
-
#initialize(connection) ⇒ Request
constructor
A new instance of Request.
- #perform(call_data) ⇒ Object
- #read_response(sock, call_data) ⇒ Object
- #sign(call_data) ⇒ Object
- #write_payload(sock, payload) ⇒ Object
Constructor Details
#initialize(connection) ⇒ Request
Returns a new instance of Request.
8 9 10 |
# File 'lib/fastbeans/request.rb', line 8 def initialize(connection) @connection = connection end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
6 7 8 |
# File 'lib/fastbeans/request.rb', line 6 def connection @connection end |
Instance Method Details
#build_payload(call_data) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/fastbeans/request.rb', line 16 def build_payload(call_data) signature = sign(call_data) signed_data = [signature, call_data] payload = MessagePack.pack(signed_data) if payload.respond_to?(:force_encoding) payload.force_encoding('BINARY') end [signature, payload] end |
#perform(call_data) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fastbeans/request.rb', line 36 def perform(call_data) connection.with_socket do |sock| signature, payload = build_payload(call_data) write_payload(sock, payload) resp = read_response(sock, call_data) if resp.error? or resp.signed_with?(signature) resp.payload else raise ResponseSignatureMismatch, "Received #{resp.signature} signature instead of expected #{signature} for #{call_data} call" end end end |
#read_response(sock, call_data) ⇒ Object
31 32 33 34 |
# File 'lib/fastbeans/request.rb', line 31 def read_response(sock, call_data) raw_resp = MessagePack.load(sock) Fastbeans::Response.new(call_data, raw_resp) end |
#sign(call_data) ⇒ Object
12 13 14 |
# File 'lib/fastbeans/request.rb', line 12 def sign(call_data) Digest::MD5.hexdigest(call_data.inspect) end |
#write_payload(sock, payload) ⇒ Object
26 27 28 29 |
# File 'lib/fastbeans/request.rb', line 26 def write_payload(sock, payload) sock.write([payload.bytesize].pack('N')) sock.write(payload) end |