angelo 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6587b907b0623b8cc15e44cd6b8bcbe13f74457f
4
- data.tar.gz: 7a1f799676dd2aaedc0bc5f2752849ca2edb3b91
3
+ metadata.gz: dd2cb610a7377a13e931101270360afe324e1abd
4
+ data.tar.gz: 079ed6a36ff484e41ca11fdd7a1791a874923904
5
5
  SHA512:
6
- metadata.gz: bfaa807fa0ec7facc7475b5d6af7e476138396dccf06607705a27996a19109ebffbdbdc1b308f0f429a2bad7b5bba015301ab9c8c76336a1a944565f9a89c634
7
- data.tar.gz: 1913737e3cda415a6741215f6d65a0a54a0247f74bbc7cae1dd55974e95d40983dca9a8d933baa028a8f7f0c44297346104328ad2e790e0915567079afe70d29
6
+ metadata.gz: c6e24a7a88a9b44361c0efebb43ee3fb58130c19280cf3c73b013748ab87b76d104d85b0bd93416b7577c6504680550cfb5f77c8d2be9a38d3c7865eec9f250d
7
+ data.tar.gz: 543e9def3af8a7d149a8ce17bd1a15702a88a807949a1584f1e58f34815921fd5c2446c1b0ea536d3743156ea62e3ceb493b2235263438e3b5447fc109f1043e
data/README.md CHANGED
@@ -538,7 +538,7 @@ class Foo < Angelo::Base
538
538
  # this is a call to Base#future, telling the reactor
539
539
  # do this thing and we'll want the value eventually
540
540
  #
541
- f = future :in_sec params[:sec], params[:msg]
541
+ f = future :in_sec, params[:sec], params[:msg]
542
542
  f.value
543
543
  end
544
544
 
data/lib/angelo/base.rb CHANGED
@@ -128,15 +128,15 @@ module Angelo
128
128
  Angelo::Server.define_task name, &block
129
129
  end
130
130
 
131
- def websockets
131
+ def websockets reject = true
132
132
  @websockets ||= Stash::Websocket.new server
133
- @websockets.reject! &:closed?
133
+ @websockets.reject! &:closed? if reject
134
134
  @websockets
135
135
  end
136
136
 
137
- def sses
137
+ def sses reject = true
138
138
  @sses ||= Stash::SSE.new server
139
- @sses.reject! &:closed?
139
+ @sses.reject! &:closed? if reject
140
140
  @sses
141
141
  end
142
142
 
@@ -287,7 +287,7 @@ module Angelo
287
287
 
288
288
  def eventsource &block
289
289
  headers SSE_HEADER
290
- async :handle_event_source, EventSource.new(responder.connection.detach.socket), block
290
+ async :handle_event_source, EventSource.new(responder), block
291
291
  halt 200, :sse
292
292
  end
293
293
 
@@ -313,11 +313,12 @@ module Angelo
313
313
  class EventSource
314
314
  extend Forwardable
315
315
 
316
- def_delegators :@socket, :close, :closed?, :<<, :write
317
- attr_reader :socket
316
+ def_delegators :@socket, :close, :closed?, :<<, :write, :peeraddr
317
+ attr_reader :responder, :socket
318
318
 
319
- def initialize socket
320
- @socket = socket
319
+ def initialize responder
320
+ @responder = responder
321
+ @socket = @responder.connection.detach.socket
321
322
  end
322
323
 
323
324
  def event name, data = nil
@@ -328,6 +329,15 @@ module Angelo
328
329
  @socket.write Base.sse_message(data)
329
330
  end
330
331
 
332
+ def on_close &block
333
+ @responder.on_close = block
334
+ end
335
+
336
+ def on_close= block
337
+ raise ArgumentError.new unless Proc === block
338
+ @responder.on_close = block
339
+ end
340
+
331
341
  end
332
342
 
333
343
  class ChunkedResponse
@@ -30,20 +30,18 @@ module Angelo
30
30
 
31
31
  end
32
32
 
33
- attr_accessor :connection
34
- attr_reader :request
33
+ attr_accessor :connection, :request
35
34
  attr_writer :base
36
35
 
37
36
  def initialize &block
38
37
  @response_handler = Base.compile! :request_handler, &block
39
38
  end
40
39
 
41
- def request= request
40
+ def reset!
42
41
  @params = nil
43
42
  @redirect = nil
44
43
  @body = nil
45
- @request = request
46
- handle_request
44
+ @request = nil
47
45
  end
48
46
 
49
47
  def handle_request
@@ -199,6 +197,15 @@ module Angelo
199
197
  @redirect = url
200
198
  end
201
199
 
200
+ def on_close= on_close
201
+ raise ArgumentError.new unless Proc === on_close
202
+ @on_close = on_close
203
+ end
204
+
205
+ def on_close
206
+ @on_close[] if @on_close
207
+ end
208
+
202
209
  end
203
210
 
204
211
  end
data/lib/angelo/server.rb CHANGED
@@ -18,10 +18,15 @@ module Angelo
18
18
 
19
19
  def on_connection connection
20
20
  # RubyProf.resume
21
+ responders = []
22
+
21
23
  connection.each_request do |request|
22
24
  meth = request.websocket? ? :websocket : request.method.downcase.to_sym
23
- dispatch! meth, connection, request
25
+ responder = dispatch! meth, connection, request
26
+ responders << responder if responder and responder.respond_to? :on_close
24
27
  end
28
+
29
+ responders.each &:on_close
25
30
  # RubyProf.pause
26
31
  end
27
32
 
@@ -49,9 +54,12 @@ module Angelo
49
54
  def route! meth, connection, request
50
55
  if @base.routes[meth] and rs = @base.routes[meth][request.path]
51
56
  responder = rs.dup
57
+ responder.reset!
52
58
  responder.base = @base.new responder
53
59
  responder.connection = connection
54
60
  responder.request = request
61
+ responder.handle_request
62
+ responder
55
63
  else
56
64
  Angelo.log connection, request, nil, :not_found
57
65
  connection.respond :not_found, DEFAULT_RESPONSE_HEADERS, NOT_FOUND
@@ -1,3 +1,3 @@
1
1
  module Angelo
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: angelo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenichi Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-07 00:00:00.000000000 Z
11
+ date: 2014-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: reel