uv-rays 0.0.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/uv-rays/abstract_tokenizer.rb +1 -1
- data/lib/uv-rays/buffered_tokenizer.rb +2 -2
- data/lib/uv-rays/connection.rb +23 -7
- data/lib/uv-rays/http/encoding.rb +1 -1
- data/lib/uv-rays/http/request.rb +2 -2
- data/lib/uv-rays/http/response.rb +2 -2
- data/lib/uv-rays/http_endpoint.rb +3 -3
- data/lib/uv-rays/scheduler/cron.rb +1 -1
- data/lib/uv-rays/scheduler/time.rb +2 -2
- data/lib/uv-rays/scheduler.rb +6 -6
- data/lib/uv-rays/tcp_server.rb +1 -1
- data/lib/uv-rays/version.rb +2 -2
- data/lib/uv-rays.rb +3 -6
- data/spec/abstract_tokenizer_spec.rb +17 -17
- data/spec/buffered_tokenizer_spec.rb +44 -44
- data/spec/connection_spec.rb +41 -15
- data/spec/http_endpoint_spec.rb +55 -55
- data/spec/scheduler_cron_spec.rb +93 -93
- data/spec/scheduler_spec.rb +11 -11
- data/spec/scheduler_time_spec.rb +63 -63
- data/uv-rays.gemspec +3 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 663ee2734c50410a550b07bb2cf2e0fa868fa9a3
|
4
|
+
data.tar.gz: d268b959e9d47496538b8133fb4049c316838057
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf48b38bea0a918df33883661c51906bb7aebedb51356589495827de3a67549ccb31a86f547bfed83aa85f0402ae3aebf88976e30b8fbce5058ba8f24e6466be
|
7
|
+
data.tar.gz: 91f4931a148d3219d01673253ba19c1411187477545609486a0a2f6f957d6405669363a7bcf4a534f24194364a71419ad89b2fc4401f4ed6b9a461113de37bd0
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# end
|
14
14
|
# end
|
15
15
|
# end
|
16
|
-
module
|
16
|
+
module UV
|
17
17
|
class BufferedTokenizer
|
18
18
|
|
19
19
|
attr_accessor :delimiter, :indicator, :size_limit, :verbose
|
@@ -23,7 +23,7 @@ module UvRays
|
|
23
23
|
@delimiter = options[:delimiter]
|
24
24
|
@indicator = options[:indicator]
|
25
25
|
@size_limit = options[:size_limit]
|
26
|
-
@verbose
|
26
|
+
@verbose = options[:verbose] if @size_limit
|
27
27
|
|
28
28
|
raise ArgumentError, 'no delimiter provided' unless @delimiter
|
29
29
|
|
data/lib/uv-rays/connection.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
module
|
2
|
+
module UV
|
3
3
|
def self.try_connect(tcp, handler, server, port)
|
4
4
|
if IPAddress.valid? server
|
5
5
|
tcp.finally handler.method(:on_close)
|
@@ -15,7 +15,7 @@ module UvRays
|
|
15
15
|
else
|
16
16
|
tcp.loop.lookup(server).then(
|
17
17
|
proc { |result|
|
18
|
-
|
18
|
+
UV.try_connect(tcp, handler, result[0][0], port)
|
19
19
|
},
|
20
20
|
proc { |failure|
|
21
21
|
# TODO:: Log error on loop
|
@@ -75,7 +75,23 @@ module UvRays
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
def stream_file(filename)
|
78
|
+
def stream_file(filename, type = :raw)
|
79
|
+
file = @loop.file(filename, File::RDONLY)
|
80
|
+
file.progress do # File is open and available for reading
|
81
|
+
file.send_file(@transport, type).finally do
|
82
|
+
file.close
|
83
|
+
end
|
84
|
+
end
|
85
|
+
return file
|
86
|
+
end
|
87
|
+
|
88
|
+
def keepalive(raw_time)
|
89
|
+
time = raw_time.to_i
|
90
|
+
if time.to_i <= 0
|
91
|
+
@transport.disable_keepalive
|
92
|
+
else
|
93
|
+
@transport.enable_keepalive(time)
|
94
|
+
end
|
79
95
|
end
|
80
96
|
|
81
97
|
def on_connect(transport) # user to define
|
@@ -111,12 +127,12 @@ module UvRays
|
|
111
127
|
def initialize(server, port)
|
112
128
|
super()
|
113
129
|
|
114
|
-
@loop = Libuv::Loop.current
|
130
|
+
@loop = Libuv::Loop.current || Libuv::Loop.default
|
115
131
|
@server = server
|
116
132
|
@port = port
|
117
133
|
@transport = @loop.tcp
|
118
134
|
|
119
|
-
::
|
135
|
+
::UV.try_connect(@transport, self, @server, @port)
|
120
136
|
end
|
121
137
|
|
122
138
|
def use_tls(args = {})
|
@@ -136,7 +152,7 @@ module UvRays
|
|
136
152
|
@server = server || @server
|
137
153
|
@port = port || @port
|
138
154
|
|
139
|
-
::
|
155
|
+
::UV.try_connect(@transport, self, @server, @port)
|
140
156
|
end
|
141
157
|
end
|
142
158
|
|
@@ -144,7 +160,7 @@ module UvRays
|
|
144
160
|
def initialize(server = nil, port = nil)
|
145
161
|
super()
|
146
162
|
|
147
|
-
@loop = Libuv::Loop.current
|
163
|
+
@loop = Libuv::Loop.current || Libuv::Loop.default
|
148
164
|
@transport = @loop.udp
|
149
165
|
@transport.progress method(:on_read)
|
150
166
|
|
data/lib/uv-rays/http/request.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module UV
|
2
2
|
module Http
|
3
3
|
class Request < ::Libuv::Q::DeferredPromise
|
4
4
|
include Encoding
|
@@ -138,7 +138,7 @@ module UvRays
|
|
138
138
|
|
139
139
|
# Set the User-Agent if it hasn't been specified
|
140
140
|
if !head.key?('user-agent')
|
141
|
-
head['user-agent'] = "
|
141
|
+
head['user-agent'] = "UV HttpClient"
|
142
142
|
elsif head['user-agent'].nil?
|
143
143
|
head.delete('user-agent')
|
144
144
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module UV
|
2
2
|
module Http
|
3
3
|
class Headers < Hash
|
4
4
|
# The HTTP version returned
|
@@ -52,7 +52,7 @@ module UvRays
|
|
52
52
|
@chunked = false
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def on_status(parser, data)
|
56
56
|
# Different HTTP versions have different defaults
|
57
57
|
if @state.http_minor == 0
|
58
58
|
@close_connection = true
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module UV
|
2
2
|
class CookieJar
|
3
3
|
def initialize
|
4
4
|
@jar = ::CookieJar::Jar.new
|
@@ -60,7 +60,7 @@ module UvRays
|
|
60
60
|
uri.port ||= (@https ? 443 : 80)
|
61
61
|
|
62
62
|
|
63
|
-
@loop = Libuv::Loop.current
|
63
|
+
@loop = Libuv::Loop.current || Libuv::Loop.default
|
64
64
|
@host = uri.host
|
65
65
|
@port = uri.port
|
66
66
|
#@transport = @loop.tcp
|
@@ -196,7 +196,7 @@ module UvRays
|
|
196
196
|
end
|
197
197
|
|
198
198
|
@connecting = true
|
199
|
-
::
|
199
|
+
::UV.try_connect(@transport, self, @host, @port)
|
200
200
|
end
|
201
201
|
|
202
202
|
def get_connection(callback = nil, &blk)
|
@@ -23,12 +23,12 @@
|
|
23
23
|
#++
|
24
24
|
|
25
25
|
|
26
|
-
module
|
26
|
+
module UV
|
27
27
|
class Scheduler
|
28
28
|
|
29
29
|
def self.parse_in(o, quiet = false)
|
30
30
|
# if o is an integer we are looking at seconds
|
31
|
-
o.is_a?(String) ? parse_duration(o, quiet) :
|
31
|
+
o.is_a?(String) ? parse_duration(o, quiet) : o
|
32
32
|
end
|
33
33
|
|
34
34
|
TZ_REGEX = /\b((?:[a-zA-Z][a-zA-z0-9\-+]+)(?:\/[a-zA-Z0-9\-+]+)?)\b/
|
data/lib/uv-rays/scheduler.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
module
|
2
|
+
module UV
|
3
3
|
|
4
4
|
class ScheduledEvent < ::Libuv::Q::DeferredPromise
|
5
5
|
include Comparable
|
@@ -161,7 +161,7 @@ module UvRays
|
|
161
161
|
#
|
162
162
|
# @param time [String] a human readable string representing the time period. 3w2d4h1m2s for example.
|
163
163
|
# @param callback [Proc] a block or method to execute when the event triggers
|
164
|
-
# @return [::
|
164
|
+
# @return [::UV::Repeat]
|
165
165
|
def every(time, callback = nil, &block)
|
166
166
|
callback ||= block
|
167
167
|
ms = Scheduler.parse_in(time)
|
@@ -178,7 +178,7 @@ module UvRays
|
|
178
178
|
#
|
179
179
|
# @param time [String] a human readable string representing the time period. 3w2d4h1m2s for example.
|
180
180
|
# @param callback [Proc] a block or method to execute when the event triggers
|
181
|
-
# @return [::
|
181
|
+
# @return [::UV::OneShot]
|
182
182
|
def in(time, callback = nil, &block)
|
183
183
|
callback ||= block
|
184
184
|
ms = @loop.now + Scheduler.parse_in(time)
|
@@ -195,7 +195,7 @@ module UvRays
|
|
195
195
|
#
|
196
196
|
# @param time [String, Time] a representation of a date and time that can be parsed
|
197
197
|
# @param callback [Proc] a block or method to execute when the event triggers
|
198
|
-
# @return [::
|
198
|
+
# @return [::UV::OneShot]
|
199
199
|
def at(time, callback = nil, &block)
|
200
200
|
callback ||= block
|
201
201
|
ms = Scheduler.parse_at(time) - @time_diff
|
@@ -212,7 +212,7 @@ module UvRays
|
|
212
212
|
#
|
213
213
|
# @param schedule [String] a standard CRON job line.
|
214
214
|
# @param callback [Proc] a block or method to execute when the event triggers
|
215
|
-
# @return [::
|
215
|
+
# @return [::UV::Repeat]
|
216
216
|
def cron(schedule, callback = nil, &block)
|
217
217
|
callback ||= block
|
218
218
|
ms = Scheduler.parse_cron(time)
|
@@ -312,7 +312,7 @@ end
|
|
312
312
|
module Libuv
|
313
313
|
class Loop
|
314
314
|
def scheduler
|
315
|
-
@scheduler ||=
|
315
|
+
@scheduler ||= UV::Scheduler.new(@loop)
|
316
316
|
@scheduler
|
317
317
|
end
|
318
318
|
end
|
data/lib/uv-rays/tcp_server.rb
CHANGED
data/lib/uv-rays/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = '0.0
|
1
|
+
module UV
|
2
|
+
VERSION = '0.2.0'
|
3
3
|
end
|
data/lib/uv-rays.rb
CHANGED
@@ -29,7 +29,7 @@ require 'uv-rays/http_endpoint'
|
|
29
29
|
|
30
30
|
|
31
31
|
|
32
|
-
module
|
32
|
+
module UV
|
33
33
|
|
34
34
|
# @private
|
35
35
|
def self.klass_from_handler(klass, handler = nil, *args)
|
@@ -69,7 +69,7 @@ module UvRays
|
|
69
69
|
raise ThreadError, "There is no Libuv Loop running on the current thread" if loop.nil?
|
70
70
|
|
71
71
|
klass = klass_from_handler(InboundConnection, handler, *args)
|
72
|
-
|
72
|
+
UV::TcpServer.new loop, server, port, klass, *args
|
73
73
|
end
|
74
74
|
|
75
75
|
def self.attach_server(sock, handler, *args)
|
@@ -79,7 +79,7 @@ module UvRays
|
|
79
79
|
klass = klass_from_handler(InboundConnection, handler, *args)
|
80
80
|
sd = sock.respond_to?(:fileno) ? sock.fileno : sock
|
81
81
|
|
82
|
-
|
82
|
+
UV::TcpServer.new loop, sd, sd, klass, *args
|
83
83
|
end
|
84
84
|
|
85
85
|
def self.open_datagram_socket(handler, server = nil, port = nil, *args)
|
@@ -91,6 +91,3 @@ module UvRays
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
# Alias for {UvRays}
|
95
|
-
UV = UvRays
|
96
|
-
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'uv-rays'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe UV::AbstractTokenizer do
|
4
4
|
before :each do
|
5
|
-
@buffer =
|
5
|
+
@buffer = UV::AbstractTokenizer.new({
|
6
6
|
indicator: "Start",
|
7
7
|
callback: lambda { |data|
|
8
8
|
return 4 if data.length > 3
|
@@ -16,29 +16,29 @@ describe UvRays::AbstractTokenizer do
|
|
16
16
|
msg1 = "test"
|
17
17
|
|
18
18
|
result = @buffer.extract(msg1)
|
19
|
-
result.
|
19
|
+
expect(result).to eq([])
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should not return anything when an empty message is present" do
|
23
23
|
msg1 = "test"
|
24
24
|
|
25
25
|
result = @buffer.extract(msg1)
|
26
|
-
result.
|
26
|
+
expect(result).to eq([])
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should tokenize messages where the data is a complete message" do
|
30
30
|
msg1 = "Start1234"
|
31
31
|
|
32
32
|
result = @buffer.extract(msg1)
|
33
|
-
result.
|
33
|
+
expect(result).to eq(['1234'])
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should return multiple complete messages" do
|
37
37
|
msg1 = "Start1234Start123456"
|
38
38
|
|
39
39
|
result = @buffer.extract(msg1)
|
40
|
-
result.
|
41
|
-
@buffer.flush.
|
40
|
+
expect(result).to eq(['1234', '1234'])
|
41
|
+
expect(@buffer.flush).to eq('56') # as we've indicated a message length of 4
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should tokenize messages where the indicator is split" do
|
@@ -46,32 +46,32 @@ describe UvRays::AbstractTokenizer do
|
|
46
46
|
msg2 = "twhoaStart1234"
|
47
47
|
|
48
48
|
result = @buffer.extract(msg1)
|
49
|
-
result.
|
49
|
+
expect(result).to eq([])
|
50
50
|
result = @buffer.extract(msg2)
|
51
|
-
result.
|
51
|
+
expect(result).to eq(['whoa', '1234'])
|
52
52
|
|
53
53
|
msg1 = "123Star"
|
54
54
|
msg2 = "twhoaSt"
|
55
55
|
msg3 = "art1234"
|
56
56
|
|
57
57
|
result = @buffer.extract(msg1)
|
58
|
-
result.
|
58
|
+
expect(result).to eq([])
|
59
59
|
result = @buffer.extract(msg2)
|
60
|
-
result.
|
60
|
+
expect(result).to eq(['whoa'])
|
61
61
|
result = @buffer.extract(msg3)
|
62
|
-
result.
|
62
|
+
expect(result).to eq(['1234'])
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should empty the buffer if the limit is exceeded" do
|
66
66
|
result = @buffer.extract('1234567890G')
|
67
|
-
result.
|
67
|
+
expect(result).to eq([])
|
68
68
|
|
69
69
|
# We keep enough to match a possible partial indicator
|
70
|
-
@buffer.flush.
|
70
|
+
expect(@buffer.flush).to eq('890G')
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should work with regular expressions" do
|
74
|
-
@buffer =
|
74
|
+
@buffer = UV::AbstractTokenizer.new({
|
75
75
|
indicator: /Start/i,
|
76
76
|
callback: lambda { |data|
|
77
77
|
return 4 if data.length > 3
|
@@ -80,8 +80,8 @@ describe UvRays::AbstractTokenizer do
|
|
80
80
|
})
|
81
81
|
|
82
82
|
result = @buffer.extract('1234567starta')
|
83
|
-
result.
|
83
|
+
expect(result).to eq([])
|
84
84
|
result = @buffer.extract('bcd')
|
85
|
-
result.
|
85
|
+
expect(result).to eq(['abcd'])
|
86
86
|
end
|
87
87
|
end
|