Class: Tarantool::Request
- Inherits:
-
Object
- Object
- Tarantool::Request
show all
- Defined in:
- lib/tarantool/request.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(space, *args) ⇒ Request
Returns a new instance of Request.
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/tarantool/request.rb', line 37
def initialize(space, *args)
@space = space
@args = args
@params = if args.last.is_a? Hash
args.pop
else
{}
end
@space_no = params.delete(:space_no) || space.space_no || raise(UndefinedSpace.new)
parse_args
end
|
Instance Attribute Details
#args ⇒ Object
Returns the value of attribute args.
35
36
37
|
# File 'lib/tarantool/request.rb', line 35
def args
@args
end
|
#params ⇒ Object
Returns the value of attribute params.
35
36
37
|
# File 'lib/tarantool/request.rb', line 35
def params
@params
end
|
#space ⇒ Object
Returns the value of attribute space.
35
36
37
|
# File 'lib/tarantool/request.rb', line 35
def space
@space
end
|
#space_no ⇒ Object
Returns the value of attribute space_no.
36
37
38
|
# File 'lib/tarantool/request.rb', line 36
def space_no
@space_no
end
|
Class Method Details
.pack_field(value) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/tarantool/request.rb', line 17
def pack_field(value)
if String === value
raise StringTooLong.new if value.bytesize > 1024 * 1024
[value.bytesize, value].pack('wa*')
elsif Integer === value
if value < 4294967296
[4, value].pack('wL')
else
[8, value].pack('wQ')
end
elsif value.is_a?(Tarantool::Field)
[value.data.bytesize].pack('w') + value.data
else
raise ArgumentError.new("Field should be integer or string")
end
end
|
.pack_tuple(*values) ⇒ Object
13
14
15
|
# File 'lib/tarantool/request.rb', line 13
def pack_tuple(*values)
[values.size].pack('L') + values.map { |v| pack_field(v) }.join
end
|
.request_type(name = nil) ⇒ Object
5
6
7
8
9
10
11
|
# File 'lib/tarantool/request.rb', line 5
def request_type(name = nil)
if name
@request_type = Tarantool::Requests::REQUEST_TYPES[name] || raise(UndefinedRequestType)
else
@request_type
end
end
|
Instance Method Details
#connection ⇒ Object
83
84
85
|
# File 'lib/tarantool/request.rb', line 83
def connection
space.connection
end
|
#make_packet(body) ⇒ Object
62
63
64
65
|
# File 'lib/tarantool/request.rb', line 62
def make_packet(body)
[self.class.request_type, body.size, request_id].pack('LLL') +
body
end
|
#make_response(data) ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/tarantool/request.rb', line 67
def make_response(data)
return_code, = data[0,4].unpack('L')
if return_code == 0
Response.new(data[4, data.size], response_params)
else
msg = data[4, data.size].unpack('A*')
raise BadReturnCode.new("Error code #{return_code}: #{msg}")
end
end
|
#parse_args ⇒ Object
54
55
56
|
# File 'lib/tarantool/request.rb', line 54
def parse_args
end
|
49
50
51
52
|
# File 'lib/tarantool/request.rb', line 49
def perform
data = connection.send_packet request_id, make_packet(make_body)
make_response data
end
|
#request_id ⇒ Object
58
59
60
|
# File 'lib/tarantool/request.rb', line 58
def request_id
@request_id ||= connection.next_request_id
end
|
#response_params ⇒ Object
77
78
79
80
81
|
# File 'lib/tarantool/request.rb', line 77
def response_params
res = {}
res[:return_tuple] = true if params[:return_tuple]
res
end
|