nyny 3.0.1 → 3.1.0
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/.ruby-version +1 -1
- data/CHANGELOG +10 -0
- data/Performance.md +5 -1
- data/README.md +3 -2
- data/lib/nyny/app.rb +3 -2
- data/lib/nyny/core-ext/runner.rb +4 -12
- data/lib/nyny/primitives.rb +6 -16
- data/lib/nyny/request_scope.rb +5 -4
- data/lib/nyny/router.rb +2 -2
- data/lib/nyny/version.rb +1 -1
- data/nyny.gemspec +4 -3
- data/spec/app_spec.rb +1 -26
- data/spec/primitives_spec.rb +9 -29
- data/spec/request_scope_spec.rb +52 -2
- data/spec/router_spec.rb +2 -2
- data/spec/runner_spec.rb +3 -3
- data/spec/spec_helper.rb +0 -4
- data/spec/templates_spec.rb +14 -3
- metadata +37 -24
- data/benchmark.rb +0 -116
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae38227835876ef5e85282b236b5349049e15116
|
4
|
+
data.tar.gz: 70836d65922b92ac174fee44b9c0c1dc8a2525b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99cfbc9eabad3173837d1acba68236b4eb7ba01dee114691d12a8266bb6c4970acea3a586c7be8b1699f08938abaea8f5ef1e25931b47dc78b6d2c10a6d5907b
|
7
|
+
data.tar.gz: 5443fdcb5d69b8771f35153ca8c7bbec47eb71f6db4221fd831f2f733da4b62576f99ac723491f9778d7e2fa0659a472ff21d378bbb9fd46054948067127fe8b
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.1
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
3.1.0
|
2
|
+
- use latest Tilt (2.0.0)
|
3
|
+
- get rid of silly Rack::Response hacks, write to body properly
|
4
|
+
- Response#rewrite (body= aliases it for backward compatibility)
|
5
|
+
- Refactor .run! implementation, prefer thin, webrik.
|
6
|
+
- NYNY now ships with better_errors, which is only enabled in development
|
7
|
+
- Fixed builder instanciation logic
|
8
|
+
- removed benchmark script, since tilt dep version is not compatible with
|
9
|
+
Sinatra
|
10
|
+
|
1
11
|
3.0.1
|
2
12
|
- File SystemStackError when accessing missing param (@holies)
|
3
13
|
|
data/Performance.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
Note: this bench may be a bit obsolete, I removed the profiling
|
3
|
+
script due to the fact that NYNY's and Sintara's deps are
|
4
|
+
incompatible. For a more complete list of of microframework
|
5
|
+
benchmarks, see [https://github.com/luislavena/bench-micro]()
|
2
6
|
```
|
3
7
|
Comparing NYNY 3.0.0 with Sinatra 1.4.4
|
4
8
|
|
data/README.md
CHANGED
@@ -213,6 +213,7 @@ class App < NYNY::App
|
|
213
213
|
end
|
214
214
|
end
|
215
215
|
```
|
216
|
+
|
216
217
|
There are 2 ways to pass data to the template:
|
217
218
|
|
218
219
|
Via a instance variable:
|
@@ -239,7 +240,7 @@ to create a helper for that:
|
|
239
240
|
```ruby
|
240
241
|
class App < NYNY::App
|
241
242
|
helpers do
|
242
|
-
def
|
243
|
+
def template *args
|
243
244
|
render 'layout.erb' do
|
244
245
|
render *args
|
245
246
|
end
|
@@ -247,7 +248,7 @@ class App < NYNY::App
|
|
247
248
|
end
|
248
249
|
|
249
250
|
get '/' do
|
250
|
-
|
251
|
+
template 'index.erb'
|
251
252
|
end
|
252
253
|
end
|
253
254
|
```
|
data/lib/nyny/app.rb
CHANGED
@@ -27,15 +27,16 @@ module NYNY
|
|
27
27
|
def initialize app=nil
|
28
28
|
self.class.builder.run Router.new({
|
29
29
|
:routes => self.class.routes,
|
30
|
-
:fallback => (app || lambda {|env| Response.new
|
30
|
+
:fallback => (app || lambda {|env| Response.new [], 404 }),
|
31
31
|
:before_hooks => self.class.before_hooks,
|
32
32
|
:after_hooks => self.class.after_hooks,
|
33
33
|
:scope_class => self.class.scope_class
|
34
34
|
})
|
35
|
+
@app = self.class.builder.to_app
|
35
36
|
end
|
36
37
|
|
37
38
|
def call env
|
38
|
-
|
39
|
+
@app.call env
|
39
40
|
end
|
40
41
|
|
41
42
|
#class methods
|
data/lib/nyny/core-ext/runner.rb
CHANGED
@@ -1,19 +1,11 @@
|
|
1
|
+
require 'better_errors'
|
2
|
+
|
1
3
|
module NYNY
|
2
4
|
module Runner
|
3
|
-
def optimal_runner
|
4
|
-
return Rack::Handler::WEBrick if RUBY_PLATFORM == 'java'
|
5
|
-
|
6
|
-
begin
|
7
|
-
Rack::Handler::Thin
|
8
|
-
rescue LoadError
|
9
|
-
Rack::Handler::WEBrick
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
5
|
def run! port=9292
|
14
6
|
use Rack::CommonLogger
|
15
|
-
use
|
16
|
-
|
7
|
+
use BetterErrors::Middleware unless NYNY.env.production?
|
8
|
+
Rack::Handler.pick(['thin', 'webrick']).run new, :Port => port
|
17
9
|
end
|
18
10
|
end
|
19
11
|
end
|
data/lib/nyny/primitives.rb
CHANGED
@@ -3,23 +3,13 @@ module NYNY
|
|
3
3
|
end
|
4
4
|
|
5
5
|
class Response < Rack::Response
|
6
|
-
|
7
|
-
|
8
|
-
def initialize body=[], status=200, header={}
|
9
|
-
@raw_body = body
|
10
|
-
super body.to_s, status, header
|
11
|
-
end
|
12
|
-
|
13
|
-
def body= value
|
14
|
-
@raw_body = value
|
15
|
-
@body = []
|
6
|
+
def rewrite str
|
7
|
+
@body = []
|
16
8
|
@length = 0
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
elsif value.respond_to?(:each)
|
21
|
-
value.each {|part| write part.to_s }
|
22
|
-
end
|
9
|
+
header.delete "Content-Type"
|
10
|
+
header.delete "Content-Length"
|
11
|
+
write str
|
23
12
|
end
|
13
|
+
alias_method :body=, :rewrite
|
24
14
|
end
|
25
15
|
end
|
data/lib/nyny/request_scope.rb
CHANGED
@@ -11,7 +11,7 @@ module NYNY
|
|
11
11
|
|
12
12
|
def initialize request
|
13
13
|
@request = request
|
14
|
-
@response = Response.new
|
14
|
+
@response = Response.new
|
15
15
|
end
|
16
16
|
|
17
17
|
def cookies
|
@@ -25,7 +25,8 @@ module NYNY
|
|
25
25
|
def halt status, headers={}, body=''
|
26
26
|
response.status = status
|
27
27
|
response.headers.merge! headers
|
28
|
-
response.
|
28
|
+
response.rewrite body
|
29
|
+
cookies.finish!(response) if @cookies
|
29
30
|
throw :halt, response.finish
|
30
31
|
end
|
31
32
|
|
@@ -35,8 +36,8 @@ module NYNY
|
|
35
36
|
alias_method :redirect, :redirect_to
|
36
37
|
|
37
38
|
def apply_to &handler
|
38
|
-
response.
|
39
|
-
cookies.finish!(response)
|
39
|
+
response.write instance_eval(&handler)
|
40
|
+
cookies.finish!(response) if @cookies
|
40
41
|
response.finish
|
41
42
|
end
|
42
43
|
end
|
data/lib/nyny/router.rb
CHANGED
@@ -23,9 +23,9 @@ module NYNY
|
|
23
23
|
def process route, env
|
24
24
|
request = Request.new(env)
|
25
25
|
request.params.merge! route.url_params(env)
|
26
|
-
request.params.default_proc =
|
26
|
+
request.params.default_proc = lambda do |h, k|
|
27
27
|
h.fetch(k.to_s, nil) || h.fetch(k.to_sym, nil)
|
28
|
-
|
28
|
+
end
|
29
29
|
|
30
30
|
eval_response scope_class.new(request), route.handler
|
31
31
|
end
|
data/lib/nyny/version.rb
CHANGED
data/nyny.gemspec
CHANGED
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_dependency "rack",
|
24
|
-
spec.add_dependency "rack-contrib",
|
25
|
-
spec.add_dependency "tilt",
|
23
|
+
spec.add_dependency "rack", "~> 1.5.2"
|
24
|
+
spec.add_dependency "rack-contrib", "~> 1.1.0"
|
25
|
+
spec.add_dependency "tilt", "~> 2.0.0"
|
26
|
+
spec.add_dependency "better_errors", "~> 1.1.0"
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
27
28
|
spec.add_development_dependency "rake"
|
28
29
|
spec.add_development_dependency "rspec"
|
data/spec/app_spec.rb
CHANGED
@@ -167,31 +167,6 @@ describe App do
|
|
167
167
|
app.get '/'
|
168
168
|
end
|
169
169
|
|
170
|
-
describe 'cookies' do
|
171
|
-
let (:app) do
|
172
|
-
mock_app do
|
173
|
-
post '/cookie' do
|
174
|
-
cookies['foo'] = 'bar'
|
175
|
-
end
|
176
|
-
|
177
|
-
delete '/cookie' do
|
178
|
-
cookies.delete 'foo'
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'sets a cookie' do
|
184
|
-
res = app.post '/cookie'
|
185
|
-
res.headers['Set-Cookie'].should == 'foo=bar; path=/'
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'deletes a cookie' do
|
189
|
-
app.post '/cookie'
|
190
|
-
res = app.delete '/cookie'
|
191
|
-
res.headers['Set-Cookie'].should_not include('foo=bar')
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
170
|
it 'works with empty path' do
|
196
171
|
kls = mock_app_class do
|
197
172
|
get '/' do
|
@@ -201,7 +176,7 @@ describe App do
|
|
201
176
|
|
202
177
|
env = Rack::MockRequest.env_for '/'
|
203
178
|
env['PATH_INFO'] = ''
|
204
|
-
kls.new.call(env)[2].body.
|
179
|
+
kls.new.call(env)[2].body.last.should == 'Hello'
|
205
180
|
end
|
206
181
|
|
207
182
|
describe 'Class level api' do
|
data/spec/primitives_spec.rb
CHANGED
@@ -1,33 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
describe '#raw_body' do
|
13
|
-
it 'should be accesible when the response was initialized' do
|
14
|
-
raw_body = double
|
15
|
-
res = Response.new raw_body
|
16
|
-
res.raw_body.should == raw_body
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should accesible after body was set' do
|
20
|
-
res = Response.new
|
21
|
-
raw_body = double
|
22
|
-
res.body = raw_body
|
23
|
-
res.raw_body.should == raw_body
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should set the iterable as the raw body as well' do
|
27
|
-
res = Response.new
|
28
|
-
raw_body = ['one', 'two']
|
29
|
-
res.body = raw_body
|
30
|
-
res.raw_body.should == raw_body
|
3
|
+
describe 'NYNY primitives' do
|
4
|
+
describe NYNY::Response do
|
5
|
+
it 'allows to rewrite the response' do
|
6
|
+
resp = NYNY::Response.new
|
7
|
+
resp.write 'foo'
|
8
|
+
resp.rewrite 'banana'
|
9
|
+
resp.headers['Content-Length'].should == "6"
|
10
|
+
resp.body.first.should == 'banana'
|
31
11
|
end
|
32
12
|
end
|
33
|
-
end
|
13
|
+
end
|
data/spec/request_scope_spec.rb
CHANGED
@@ -23,6 +23,56 @@ describe RequestScope do
|
|
23
23
|
app.get '/?foo=bar'
|
24
24
|
end
|
25
25
|
|
26
|
+
describe 'cookies' do
|
27
|
+
let (:app) do
|
28
|
+
mock_app do
|
29
|
+
post '/cookie' do
|
30
|
+
cookies['foo'] = 'bar'
|
31
|
+
end
|
32
|
+
|
33
|
+
post '/cookie_halt' do
|
34
|
+
cookies['foo'] = 'bar'
|
35
|
+
halt 200, {}, 'blah'
|
36
|
+
cookies['foo'] = 'moo'
|
37
|
+
end
|
38
|
+
|
39
|
+
delete '/cookie' do
|
40
|
+
cookies.delete 'foo'
|
41
|
+
end
|
42
|
+
|
43
|
+
delete '/cookie_halt' do
|
44
|
+
cookies.delete 'foo'
|
45
|
+
halt 200, {}, 'blah'
|
46
|
+
'blah'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'sets a cookie' do
|
52
|
+
res = app.post '/cookie'
|
53
|
+
res.headers['Set-Cookie'].should == 'foo=bar; path=/'
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'deletes a cookie' do
|
57
|
+
app.post '/cookie'
|
58
|
+
res = app.delete '/cookie'
|
59
|
+
res.headers['Set-Cookie'].should_not include('foo=bar')
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'when response was halted' do
|
63
|
+
it 'sets a cookie' do
|
64
|
+
res = app.post '/cookie_halt'
|
65
|
+
res.headers['Set-Cookie'].should == 'foo=bar; path=/'
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'deletes a cookie' do
|
69
|
+
app.post '/cookie'
|
70
|
+
res = app.delete '/cookie_halt'
|
71
|
+
res.headers['Set-Cookie'].should_not include('foo=bar')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
26
76
|
it '#headers should set the header values' do
|
27
77
|
subject.headers['Head'] = 'Tail'
|
28
78
|
response = subject.apply_to &handler
|
@@ -76,13 +126,13 @@ describe RequestScope do
|
|
76
126
|
it 'return prematurely with pass' do
|
77
127
|
app = mock_app do
|
78
128
|
get '/' do
|
79
|
-
next '
|
129
|
+
next 'blah'
|
80
130
|
'shouldnt be returned'
|
81
131
|
end
|
82
132
|
end
|
83
133
|
res = app.get '/'
|
84
134
|
res.status.should == 200
|
85
|
-
res.body.should == '
|
135
|
+
res.body.should == 'blah'
|
86
136
|
end
|
87
137
|
|
88
138
|
it '#redirect_to should redirect' do
|
data/spec/router_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe Router do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
after do
|
16
|
-
response.
|
16
|
+
response.rewrite "Zaz"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -24,6 +24,6 @@ describe Router do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should not raise SystemStackError if any absent param is accessed" do
|
27
|
-
expect { response = app.post('/') }.not_to raise_error
|
27
|
+
expect { response = app.post('/') }.not_to raise_error
|
28
28
|
end
|
29
29
|
end
|
data/spec/runner_spec.rb
CHANGED
@@ -4,19 +4,19 @@ describe Runner do
|
|
4
4
|
let (:kls) { mock_app_class {} }
|
5
5
|
|
6
6
|
before do
|
7
|
-
|
7
|
+
Rack::Handler.stub :pick => double(:run => nil)
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should include the default middleware on top' do
|
11
11
|
kls.should_receive(:use).with(Rack::CommonLogger)
|
12
|
-
kls.should_receive(:use).with(
|
12
|
+
kls.should_receive(:use).with(BetterErrors::Middleware)
|
13
13
|
kls.run!
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should not include show exceptions middleware in production' do
|
17
17
|
NYNY.env.stub :production? => true
|
18
18
|
kls.should_receive(:use).with(Rack::CommonLogger)
|
19
|
-
kls.should_not_receive(:use).with(
|
19
|
+
kls.should_not_receive(:use).with(BetterErrors::Middleware)
|
20
20
|
kls.run!
|
21
21
|
end
|
22
22
|
|
data/spec/spec_helper.rb
CHANGED
data/spec/templates_spec.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Templates do
|
4
|
-
let (:
|
5
|
-
|
4
|
+
let (:app_class) do
|
5
|
+
mock_app_class do
|
6
|
+
helpers do
|
7
|
+
def template_root
|
8
|
+
File.join(__dir__, "views")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
6
12
|
get '/without_layout' do
|
7
13
|
render template('index.erb')
|
8
14
|
end
|
@@ -18,12 +24,18 @@ describe Templates do
|
|
18
24
|
render template('instance.erb')
|
19
25
|
end
|
20
26
|
|
27
|
+
get '/via_helper' do
|
28
|
+
erb :index
|
29
|
+
end
|
30
|
+
|
21
31
|
get '/local_var' do
|
22
32
|
render template('local.erb'), :foo => 'bar'
|
23
33
|
end
|
24
34
|
end
|
25
35
|
end
|
26
36
|
|
37
|
+
let (:app) { Rack::MockRequest.new(app_class.new)}
|
38
|
+
|
27
39
|
it 'renders correctly without layout' do
|
28
40
|
response = app.get('/without_layout')
|
29
41
|
response.body.should == '<p>Hello!</p>'
|
@@ -48,5 +60,4 @@ describe Templates do
|
|
48
60
|
|
49
61
|
response.body.should == rendered
|
50
62
|
end
|
51
|
-
|
52
63
|
end
|
metadata
CHANGED
@@ -1,97 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nyny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrei Lisnic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.5.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.5.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rack-contrib
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: tilt
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: better_errors
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.1.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - ~>
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '1.3'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - ~>
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '1.3'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rspec
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
description: New York, New York - (very) small Sinatra clone.
|
@@ -101,17 +115,16 @@ executables: []
|
|
101
115
|
extensions: []
|
102
116
|
extra_rdoc_files: []
|
103
117
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rspec
|
106
|
-
- .ruby-version
|
107
|
-
- .travis.yml
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".ruby-version"
|
121
|
+
- ".travis.yml"
|
108
122
|
- CHANGELOG
|
109
123
|
- Gemfile
|
110
124
|
- LICENSE.txt
|
111
125
|
- Performance.md
|
112
126
|
- README.md
|
113
127
|
- Rakefile
|
114
|
-
- benchmark.rb
|
115
128
|
- lib/nyny.rb
|
116
129
|
- lib/nyny/app.rb
|
117
130
|
- lib/nyny/core-ext/runner.rb
|
@@ -145,17 +158,17 @@ require_paths:
|
|
145
158
|
- lib
|
146
159
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
160
|
requirements:
|
148
|
-
- -
|
161
|
+
- - ">="
|
149
162
|
- !ruby/object:Gem::Version
|
150
163
|
version: 1.9.2
|
151
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
165
|
requirements:
|
153
|
-
- -
|
166
|
+
- - ">="
|
154
167
|
- !ruby/object:Gem::Version
|
155
168
|
version: '0'
|
156
169
|
requirements: []
|
157
170
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.0
|
171
|
+
rubygems_version: 2.2.0
|
159
172
|
signing_key:
|
160
173
|
specification_version: 4
|
161
174
|
summary: New York, New York.
|
data/benchmark.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
#!ruby -I ./lib -I lib
|
2
|
-
require 'nyny'
|
3
|
-
require 'ruby-prof'
|
4
|
-
require 'benchmark'
|
5
|
-
require 'sinatra'
|
6
|
-
include Benchmark
|
7
|
-
|
8
|
-
set :run, false #do not run sinatra's builtin web server
|
9
|
-
|
10
|
-
def build_apps &block
|
11
|
-
sinatra = Class.new(Sinatra::Base, &block).new
|
12
|
-
nyny = Class.new(NYNY::App, &block).new
|
13
|
-
return [nyny, sinatra].map {|app| Rack::MockRequest.new(app) }
|
14
|
-
end
|
15
|
-
|
16
|
-
def run_test name, apps, &block
|
17
|
-
nyny, sinatra = apps
|
18
|
-
prc = Proc.new(&block)
|
19
|
-
|
20
|
-
puts "\nTest: #{name}"
|
21
|
-
Benchmark.benchmark(CAPTION, 7, FORMAT, "> NYNY/Sinatra:") do |x|
|
22
|
-
nyny_time = x.report("nyny: ") { 1000.times { prc.call(nyny) } }
|
23
|
-
sinatra_time = x.report("sinatra:") { 1000.times { prc.call(sinatra) } }
|
24
|
-
puts "NYNY is #{"%.2f" % [sinatra_time.real/nyny_time.real]}x faster than Sinatra in this test"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
puts "Comparing NYNY #{NYNY::VERSION} with Sinatra #{Sinatra::VERSION}"
|
29
|
-
|
30
|
-
#
|
31
|
-
# Hello World
|
32
|
-
apps = build_apps do
|
33
|
-
get '/' do
|
34
|
-
'Hello World'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
run_test 'hello world', apps do |app|
|
38
|
-
app.get '/'
|
39
|
-
end
|
40
|
-
|
41
|
-
#
|
42
|
-
# Filters
|
43
|
-
apps = build_apps do
|
44
|
-
before do
|
45
|
-
request
|
46
|
-
end
|
47
|
-
|
48
|
-
after do
|
49
|
-
response
|
50
|
-
end
|
51
|
-
|
52
|
-
get '/' do
|
53
|
-
'Hello World!'
|
54
|
-
end
|
55
|
-
end
|
56
|
-
run_test 'filters', apps do |app|
|
57
|
-
app.get '/'
|
58
|
-
end
|
59
|
-
|
60
|
-
#
|
61
|
-
# Helpers
|
62
|
-
apps = build_apps do
|
63
|
-
helpers do
|
64
|
-
def da_request
|
65
|
-
request
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
get '/' do
|
70
|
-
da_request
|
71
|
-
end
|
72
|
-
end
|
73
|
-
run_test 'helpers', apps do |app|
|
74
|
-
app.get '/'
|
75
|
-
end
|
76
|
-
|
77
|
-
#
|
78
|
-
# Url patterns
|
79
|
-
apps = build_apps do
|
80
|
-
get '/:name' do
|
81
|
-
params[:name]
|
82
|
-
end
|
83
|
-
end
|
84
|
-
run_test 'Url patterns', apps do |app|
|
85
|
-
app.get '/foo'
|
86
|
-
end
|
87
|
-
|
88
|
-
# Plain routes
|
89
|
-
apps = build_apps do
|
90
|
-
[:get, :post, :put].each do |method|
|
91
|
-
10.times do |i|
|
92
|
-
send(method, "/foo/#{i}") do
|
93
|
-
i
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
run_test 'A lot o Plain routes', apps do |app|
|
99
|
-
app.get '/foo/5'
|
100
|
-
end
|
101
|
-
|
102
|
-
#
|
103
|
-
# Pattern routes
|
104
|
-
apps = build_apps do
|
105
|
-
[:get, :post, :put].each do |method|
|
106
|
-
10.times do |i|
|
107
|
-
send(method, "/foo/#{i}/:action") do
|
108
|
-
params[:action]
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
run_test 'A lot of Pattern routes', apps do |app|
|
114
|
-
app.get '/foo/5/edit'
|
115
|
-
end
|
116
|
-
|