angelo 0.2.2 → 0.2.3
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +40 -6
- data/lib/angelo/base.rb +12 -5
- data/lib/angelo/params_parser.rb +0 -1
- data/lib/angelo/version.rb +1 -1
- data/test/angelo_spec.rb +8 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b18b8a96ef58b0f38df32ae070d22da0564b2f1
|
4
|
+
data.tar.gz: c1abdf8b2494da8b8fc0b3efcce12bc5fe2ea06e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a561e6343ed0ac67eac30d741b8c65421b684936d1761f2aeb08202eb7d4eecf3db78cf497823ba4ebaaa37f45e1fc742fccecc2bcf8f9c1163e309f5480173b
|
7
|
+
data.tar.gz: aa9e7a498eb39a86b0e95c0df5607fcf5b825b61159a3490ce7e2eb18ad90dde2e11058e10840c083b0b6f2b4db4ba333e8df59abac8754c840d7e2344719747
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
### 0.2.3 28 oct 2014
|
5
|
+
|
6
|
+
thanks: @mighe, @chewi
|
7
|
+
|
8
|
+
* add flag (default: false) to `Base.run` to trap INT and sleep or not
|
9
|
+
* add `Base.run!` which calls `.run` with flag set true
|
10
|
+
* fix for form params keys with no values
|
11
|
+
|
12
|
+
### 0.2.2 22 oct 2014
|
13
|
+
|
14
|
+
thanks: @chewi
|
15
|
+
|
16
|
+
* add on_close setter to EventSource
|
17
|
+
* fix peeraddr forward on EventSource
|
18
|
+
|
4
19
|
### 0.2.1 7 oct 2014
|
5
20
|
|
6
21
|
thanks: @chewi
|
data/README.md
CHANGED
@@ -63,7 +63,8 @@ from inside a websocket handler block. These can "later" be iterated over so one
|
|
63
63
|
emit a message on every connected websocket when the service receives a POST request.
|
64
64
|
|
65
65
|
The `websockets` helper also includes a context ability, so you can stash connected websocket clients
|
66
|
-
into different "sections".
|
66
|
+
into different "sections". Also, by default, the helper will `reject!` any closed sockets before
|
67
|
+
returning; you may optionally pass `false` to the helper to skip this step.
|
67
68
|
|
68
69
|
##### Example!
|
69
70
|
|
@@ -178,10 +179,12 @@ Angelo also includes a "stash" helper for SSE connections. One can `<<` a socket
|
|
178
179
|
inside an `eventsource` handler block. These can also be "later" be iterated over so one can do things
|
179
180
|
like emit a message on every SSE connection when the service receives a POST request.
|
180
181
|
|
181
|
-
The `sses` helper includes the same a context ability as the `websockets` helper.
|
182
|
-
|
183
|
-
|
184
|
-
|
182
|
+
The `sses` helper includes the same a context ability as the `websockets` helper. Also, by default,
|
183
|
+
the helper will `reject!` any closed sockets before returning, just like `websockets`. You may
|
184
|
+
optionally pass `false` to the helper to skip this step.In addition, the `sses` stash includes
|
185
|
+
methods for easily sending events or messages to all stashed connections. **Note that the
|
186
|
+
`Stash::SSE#event` method only works on non-default contexts and uses the context name as the event
|
187
|
+
name.**
|
185
188
|
|
186
189
|
```ruby
|
187
190
|
eventsource '/sse' do |s|
|
@@ -222,6 +225,37 @@ Handling this on the client may require conditionals for [browsers](http://caniu
|
|
222
225
|
do not support EventSource yet, since this will respond with a non-"text/event-stream" Content-Type if
|
223
226
|
'sse' is not present in the params.
|
224
227
|
|
228
|
+
##### `EventSource#on_close` helper
|
229
|
+
|
230
|
+
When inside an eventsource block, you can use may want to do something specific when a client closes the
|
231
|
+
connection. For this case, there are `on_close` and `on_close=` methods on the object passed to the block
|
232
|
+
that will get called if the client closes the socket. The assignment method takes a proc object and the
|
233
|
+
other one takes a block:
|
234
|
+
|
235
|
+
```ruby
|
236
|
+
get '/' do
|
237
|
+
eventsource do |es|
|
238
|
+
|
239
|
+
# assignment!
|
240
|
+
es.on_close = ->{sses(false).remove_socket es}
|
241
|
+
|
242
|
+
sses << es
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
eventsource '/sse' do |es|
|
247
|
+
|
248
|
+
# just passing a block here
|
249
|
+
es.on_close {sses(false).remove_socket es}
|
250
|
+
|
251
|
+
sses << es
|
252
|
+
end
|
253
|
+
```
|
254
|
+
|
255
|
+
Note the use of the optional parameter the stashes here; by default, stash accessors (`websockets` and
|
256
|
+
`sses`) will `reject!` any closed sockets before letting you in. If you pass `false` to the stash
|
257
|
+
accessors, they will skip the `reject!` step.
|
258
|
+
|
225
259
|
### Tasks + Async / Future
|
226
260
|
|
227
261
|
Angelo is built on Reel and Celluloid::IO, giving your web application class the ability to define
|
@@ -555,7 +589,7 @@ class Foo < Angelo::Base
|
|
555
589
|
get '/chunky_json' do
|
556
590
|
content_type :json
|
557
591
|
|
558
|
-
# this helper requires a block that takes one arg, the response
|
592
|
+
# this helper requires a block that takes one arg, the response
|
559
593
|
# proc to call with each chunk (i.e. the block that is passed to
|
560
594
|
# `#each`)
|
561
595
|
#
|
data/lib/angelo/base.rb
CHANGED
@@ -144,15 +144,22 @@ module Angelo
|
|
144
144
|
Responder.content_type type
|
145
145
|
end
|
146
146
|
|
147
|
-
def run addr = @@addr, port = @@port
|
147
|
+
def run! addr = @@addr, port = @@port
|
148
|
+
run addr, port, true
|
149
|
+
end
|
150
|
+
|
151
|
+
def run addr = @@addr, port = @@port, blocking = false
|
148
152
|
Celluloid.logger.level = @@log_level
|
149
153
|
@server = Angelo::Server.new self, addr, port
|
150
154
|
@server.async.ping_websockets
|
151
|
-
|
152
|
-
|
153
|
-
|
155
|
+
if blocking
|
156
|
+
trap "INT" do
|
157
|
+
@server.terminate if @server and @server.alive?
|
158
|
+
exit
|
159
|
+
end
|
160
|
+
sleep
|
154
161
|
end
|
155
|
-
|
162
|
+
@server
|
156
163
|
end
|
157
164
|
|
158
165
|
def local_path path
|
data/lib/angelo/params_parser.rb
CHANGED
@@ -12,7 +12,6 @@ module Angelo
|
|
12
12
|
AMPERSAND = '&'
|
13
13
|
|
14
14
|
def parse_formencoded str
|
15
|
-
raise FormEncodingError unless str.empty? or str.index EQUALS
|
16
15
|
str.split(AMPERSAND).reduce(Responder.symhash) do |p, kv|
|
17
16
|
key, value = kv.split(EQUALS).map {|s| CGI.unescape s}
|
18
17
|
p[key] = value
|
data/lib/angelo/version.rb
CHANGED
data/test/angelo_spec.rb
CHANGED
@@ -327,7 +327,7 @@ describe Angelo::Base do
|
|
327
327
|
|
328
328
|
it 'does not parse JSON body when content-type is formencoded' do
|
329
329
|
post '/json', obj.to_json, {'Content-Type' => Angelo::FORM_TYPE}
|
330
|
-
|
330
|
+
last_response_must_be_json(obj.to_json => nil)
|
331
331
|
end
|
332
332
|
|
333
333
|
it 'does not parse body when request content-type not set' do
|
@@ -342,6 +342,13 @@ describe Angelo::Base do
|
|
342
342
|
end
|
343
343
|
end
|
344
344
|
|
345
|
+
Angelo::HTTPABLE.each do |m|
|
346
|
+
it "does not choke on #{m.to_s.upcase} requests with without param values" do
|
347
|
+
send m, '/json?foo'
|
348
|
+
last_response_must_be_json('foo' => nil)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
345
352
|
end
|
346
353
|
|
347
354
|
describe 'request_headers helper' do
|
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.
|
4
|
+
version: 0.2.3
|
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-
|
11
|
+
date: 2014-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reel
|