angelo 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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