jellyfish 0.9.0 → 0.9.1
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/CHANGES.md +6 -2
- data/README.md +5 -1
- data/Rakefile +3 -3
- data/jellyfish.gemspec +10 -5
- data/lib/jellyfish.rb +1 -1
- data/lib/jellyfish/version.rb +1 -1
- data/test/sinatra/test_routing.rb +2 -2
- data/test/test_from_readme.rb +1 -1
- data/test/test_threads.rb +40 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbbc428cd07afe7548eb82457f5f01f092198fd8
|
4
|
+
data.tar.gz: 5f669713f1f3bd5b1a69868116c776739cbaeb37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3fabf40031fcf2eee773f38d4fc0a021d9d749d69e47aad0e322aa0744e611f3e1e8b69dc85a0f1a39b7bf96d5a7c629cdd2564e1b9ce992f05c557044d22ec
|
7
|
+
data.tar.gz: 12247188a14f764dba3e66dbf81a31ee6e5162434a376f32d29013c5a3b5910d4fef3fbaec3256d191b7179bd790fb217c7a3f581dda342da01e50a77bb43d1c
|
data/CHANGES.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
-
## Jellyfish 0.9.
|
3
|
+
## Jellyfish 0.9.1 -- 2013-08-23
|
4
|
+
|
5
|
+
* Fixed a thread safety bug for initializing exception handlers.
|
6
|
+
|
7
|
+
## Jellyfish 0.9.0 -- 2013-07-11
|
4
8
|
|
5
9
|
### Enhancements for Jellyfish core
|
6
10
|
|
@@ -15,7 +19,7 @@
|
|
15
19
|
it would no longer forward the request but show a 404 page. Always
|
16
20
|
use `forward` if you intend to forward the request.
|
17
21
|
|
18
|
-
## Jellyfish 0.8.0
|
22
|
+
## Jellyfish 0.8.0 -- 2013-06-15
|
19
23
|
|
20
24
|
### Incompatible changes
|
21
25
|
|
data/README.md
CHANGED
@@ -53,6 +53,10 @@ Because Sinatra is too complex and inconsistent for me.
|
|
53
53
|
|
54
54
|
## SYNOPSIS:
|
55
55
|
|
56
|
+
You could also take a look at [Saya][] as an example Jellyfish application.
|
57
|
+
|
58
|
+
[Saya]: https://github.com/godfat/saya
|
59
|
+
|
56
60
|
### Hello Jellyfish, your lovely config.ru
|
57
61
|
|
58
62
|
``` ruby
|
@@ -701,7 +705,7 @@ class Tank
|
|
701
705
|
end
|
702
706
|
end
|
703
707
|
|
704
|
-
HugeTank = Rack::Builder.
|
708
|
+
HugeTank = Rack::Builder.app do
|
705
709
|
use Rack::ContentLength
|
706
710
|
use Rack::ContentType, 'text/plain'
|
707
711
|
use Heater
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
begin
|
4
4
|
require "#{dir = File.dirname(__FILE__)}/task/gemgem"
|
5
5
|
rescue LoadError
|
6
|
-
sh
|
7
|
-
exec Gem.ruby,
|
6
|
+
sh 'git submodule update --init'
|
7
|
+
exec Gem.ruby, '-S', 'rake', *ARGV
|
8
8
|
end
|
9
9
|
|
10
10
|
Gemgem.dir = dir
|
@@ -16,7 +16,7 @@ task 'gem:spec' do
|
|
16
16
|
require 'jellyfish/version'
|
17
17
|
s.name = 'jellyfish'
|
18
18
|
s.version = Jellyfish::VERSION
|
19
|
-
%w[rack bacon].each{ |g| s.add_development_dependency(g) }
|
19
|
+
%w[rack bacon muack].each{ |g| s.add_development_dependency(g) }
|
20
20
|
end
|
21
21
|
|
22
22
|
Gemgem.write
|
data/jellyfish.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "jellyfish"
|
5
|
-
s.version = "0.9.
|
5
|
+
s.version = "0.9.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Lin Jen-Shin (godfat)"]
|
9
|
-
s.date = "2013-
|
9
|
+
s.date = "2013-08-23"
|
10
10
|
s.description = "Pico web framework for building API-centric web applications.\nFor Rack applications or Rack middlewares. Around 250 lines of code."
|
11
11
|
s.email = ["godfat (XD) godfat.org"]
|
12
12
|
s.files = [
|
@@ -41,11 +41,12 @@ Gem::Specification.new do |s|
|
|
41
41
|
"test/sinatra/test_multi_actions.rb",
|
42
42
|
"test/sinatra/test_routing.rb",
|
43
43
|
"test/test_from_readme.rb",
|
44
|
-
"test/test_inheritance.rb"
|
44
|
+
"test/test_inheritance.rb",
|
45
|
+
"test/test_threads.rb"]
|
45
46
|
s.homepage = "https://github.com/godfat/jellyfish"
|
46
47
|
s.licenses = ["Apache License 2.0"]
|
47
48
|
s.require_paths = ["lib"]
|
48
|
-
s.rubygems_version = "2.0.
|
49
|
+
s.rubygems_version = "2.0.6"
|
49
50
|
s.summary = "Pico web framework for building API-centric web applications."
|
50
51
|
s.test_files = [
|
51
52
|
"test/sinatra/test_base.rb",
|
@@ -54,7 +55,8 @@ Gem::Specification.new do |s|
|
|
54
55
|
"test/sinatra/test_multi_actions.rb",
|
55
56
|
"test/sinatra/test_routing.rb",
|
56
57
|
"test/test_from_readme.rb",
|
57
|
-
"test/test_inheritance.rb"
|
58
|
+
"test/test_inheritance.rb",
|
59
|
+
"test/test_threads.rb"]
|
58
60
|
|
59
61
|
if s.respond_to? :specification_version then
|
60
62
|
s.specification_version = 4
|
@@ -62,12 +64,15 @@ Gem::Specification.new do |s|
|
|
62
64
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
63
65
|
s.add_development_dependency(%q<rack>, [">= 0"])
|
64
66
|
s.add_development_dependency(%q<bacon>, [">= 0"])
|
67
|
+
s.add_development_dependency(%q<muack>, [">= 0"])
|
65
68
|
else
|
66
69
|
s.add_dependency(%q<rack>, [">= 0"])
|
67
70
|
s.add_dependency(%q<bacon>, [">= 0"])
|
71
|
+
s.add_dependency(%q<muack>, [">= 0"])
|
68
72
|
end
|
69
73
|
else
|
70
74
|
s.add_dependency(%q<rack>, [">= 0"])
|
71
75
|
s.add_dependency(%q<bacon>, [">= 0"])
|
76
|
+
s.add_dependency(%q<muack>, [">= 0"])
|
72
77
|
end
|
73
78
|
end
|
data/lib/jellyfish.rb
CHANGED
@@ -223,7 +223,7 @@ module Jellyfish
|
|
223
223
|
handlers[e.class]
|
224
224
|
else # or find the nearest match and cache it
|
225
225
|
ancestors = e.class.ancestors
|
226
|
-
handlers[e.class] = handlers.
|
226
|
+
handlers[e.class] = handlers.dup. # thread safe iteration
|
227
227
|
inject([nil, Float::INFINITY]){ |(handler, val), (klass, block)|
|
228
228
|
idx = ancestors.index(klass) || Float::INFINITY # lower is better
|
229
229
|
if idx < val then [block, idx] else [handler, val] end }.first
|
data/lib/jellyfish/version.rb
CHANGED
@@ -411,12 +411,12 @@ describe 'Sinatra routing_test.rb' do
|
|
411
411
|
should 'play well with other routing middleware' do
|
412
412
|
middleware = Class.new{include Jellyfish}
|
413
413
|
inner_app = Class.new{include Jellyfish; get('/foo'){ 'hello' } }
|
414
|
-
|
414
|
+
app = Rack::Builder.app do
|
415
415
|
use middleware
|
416
416
|
map('/test'){ run inner_app.new }
|
417
417
|
end
|
418
418
|
|
419
|
-
status, _, body = get('/test/foo',
|
419
|
+
status, _, body = get('/test/foo', app)
|
420
420
|
status.should.eq 200
|
421
421
|
body .should.eq ['hello']
|
422
422
|
end
|
data/test/test_from_readme.rb
CHANGED
@@ -27,7 +27,7 @@ describe 'from README.md' do
|
|
27
27
|
pinfo, query = uri.path, uri.query
|
28
28
|
|
29
29
|
status, headers, body = File.open(File::NULL) do |input|
|
30
|
-
Rack::Builder.
|
30
|
+
Rack::Builder.app{ eval(code) }.call(
|
31
31
|
'REQUEST_METHOD' => method, 'PATH_INFO' => pinfo,
|
32
32
|
'QUERY_STRING' => query , 'rack.input' => input)
|
33
33
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
require 'jellyfish/test'
|
3
|
+
require 'muack'
|
4
|
+
|
5
|
+
include Muack::API
|
6
|
+
|
7
|
+
describe Jellyfish do
|
8
|
+
after do
|
9
|
+
Muack.verify
|
10
|
+
end
|
11
|
+
|
12
|
+
app = Class.new{
|
13
|
+
include Jellyfish
|
14
|
+
handle(Exception){ |env| 0 }
|
15
|
+
}.new
|
16
|
+
|
17
|
+
exp = RuntimeError.new
|
18
|
+
|
19
|
+
should "no RuntimeError: can't add a new key into hash during iteration" do
|
20
|
+
# make static ancestors so that we could stub it
|
21
|
+
ancestors = RuntimeError.ancestors
|
22
|
+
stub(RuntimeError).ancestors{ancestors}
|
23
|
+
flip = true
|
24
|
+
stub(ancestors).index(anything).proxy.returns do |i|
|
25
|
+
if flip
|
26
|
+
flip = false
|
27
|
+
sleep 0.0001
|
28
|
+
end
|
29
|
+
i
|
30
|
+
end
|
31
|
+
|
32
|
+
2.times.map{
|
33
|
+
Thread.new do
|
34
|
+
app.send(:best_handler, exp).call({}).should.eq 0
|
35
|
+
end
|
36
|
+
}.each(&:join)
|
37
|
+
|
38
|
+
flip.should.eq false
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jellyfish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: muack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: |-
|
42
56
|
Pico web framework for building API-centric web applications.
|
43
57
|
For Rack applications or Rack middlewares. Around 250 lines of code.
|
@@ -79,6 +93,7 @@ files:
|
|
79
93
|
- test/sinatra/test_routing.rb
|
80
94
|
- test/test_from_readme.rb
|
81
95
|
- test/test_inheritance.rb
|
96
|
+
- test/test_threads.rb
|
82
97
|
homepage: https://github.com/godfat/jellyfish
|
83
98
|
licenses:
|
84
99
|
- Apache License 2.0
|
@@ -99,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
114
|
version: '0'
|
100
115
|
requirements: []
|
101
116
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.0.
|
117
|
+
rubygems_version: 2.0.6
|
103
118
|
signing_key:
|
104
119
|
specification_version: 4
|
105
120
|
summary: Pico web framework for building API-centric web applications.
|
@@ -111,3 +126,4 @@ test_files:
|
|
111
126
|
- test/sinatra/test_routing.rb
|
112
127
|
- test/test_from_readme.rb
|
113
128
|
- test/test_inheritance.rb
|
129
|
+
- test/test_threads.rb
|