Class: Warden::Client
- Inherits:
-
Object
show all
- Defined in:
- lib/warden/client.rb,
lib/warden/client/v1.rb,
lib/warden/client/version.rb
Defined Under Namespace
Classes: Error, ServerError, V1
Constant Summary
collapse
- VERSION =
"0.1.0"
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path) ⇒ Client
Returns a new instance of Client.
14
15
16
17
|
# File 'lib/warden/client.rb', line 14
def initialize(path)
@path = path
@v1mode = false
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &blk) ⇒ Object
107
108
109
110
111
112
113
|
# File 'lib/warden/client.rb', line 107
def method_missing(sym, *args, &blk)
klass_name = sym.to_s.gsub(/(^|_)([a-z])/) { $2.upcase }
klass_name += "Request"
klass = Warden::Protocol.const_get(klass_name)
call(klass.new(*args))
end
|
Instance Attribute Details
#path ⇒ Object
Returns the value of attribute path.
12
13
14
|
# File 'lib/warden/client.rb', line 12
def path
@path
end
|
Instance Method Details
#call(request) ⇒ Object
102
103
104
105
|
# File 'lib/warden/client.rb', line 102
def call(request)
write(request)
read
end
|
#connect ⇒ Object
23
24
25
26
|
# File 'lib/warden/client.rb', line 23
def connect
raise "already connected" if connected?
@sock = ::UNIXSocket.new(path)
end
|
#connected? ⇒ Boolean
19
20
21
|
# File 'lib/warden/client.rb', line 19
def connected?
!@sock.nil?
end
|
#disconnect ⇒ Object
28
29
30
31
32
|
# File 'lib/warden/client.rb', line 28
def disconnect
raise "not connected" unless connected?
@sock.close rescue nil
@sock = nil
end
|
#io ⇒ Object
39
40
41
42
43
44
45
46
47
|
# File 'lib/warden/client.rb', line 39
def io
rv = yield
if rv.nil?
disconnect
raise ::EOFError
end
rv
end
|
#read ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/warden/client.rb', line 49
def read
length = io { @sock.gets }
data = io { @sock.read(length.to_i) }
io { @sock.read(2) }
response = Warden::Protocol::Message.decode(data).response
if response.is_a?(Warden::Protocol::ErrorResponse)
raise Warden::Client::ServerError.new(response.message)
end
if @v1mode
response = V1.response_to_v1(response)
end
response
end
|
#reconnect ⇒ Object
34
35
36
37
|
# File 'lib/warden/client.rb', line 34
def reconnect
disconnect if connected?
connect
end
|
#stream(request, &blk) ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/warden/client.rb', line 85
def stream(request, &blk)
unless request.is_a?(Warden::Protocol::StreamRequest)
msg = "Expected argument to be of type:"
msg << "'#{Warden::Protocol::StreamRequest}'"
msg << ", but received: '#{request.class}'."
raise ArgumentError, msg
end
response = call(request)
while response.exit_status.nil?
blk.call(response)
response = read
end
response
end
|
#write(request) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/warden/client.rb', line 70
def write(request)
if request.kind_of?(Array)
@v1mode = true
request = V1.request_from_v1(request.dup)
end
unless request.kind_of?(Warden::Protocol::BaseRequest)
raise "Expected #kind_of? Warden::Protocol::BaseRequest"
end
data = request.wrap.encode.to_s
@sock.write data.length.to_s + "\r\n"
@sock.write data + "\r\n"
end
|