nyara 0.0.1.pre.6 → 0.0.1.pre.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/example/project.rb +11 -0
- data/example/stream.rb +6 -2
- data/ext/event.c +83 -32
- data/ext/hashes.c +6 -1
- data/ext/inc/epoll.h +1 -2
- data/ext/inc/kqueue.h +1 -2
- data/ext/nyara.h +2 -0
- data/ext/request.c +14 -9
- data/ext/test_response.c +2 -5
- data/ext/url_encoded.c +55 -1
- data/lib/nyara/config.rb +68 -17
- data/lib/nyara/controller.rb +76 -15
- data/lib/nyara/controllers/public_controller.rb +14 -0
- data/lib/nyara/cookie.rb +5 -4
- data/lib/nyara/flash.rb +2 -0
- data/lib/nyara/nyara.rb +153 -20
- data/lib/nyara/patches/to_query.rb +1 -2
- data/lib/nyara/request.rb +0 -5
- data/lib/nyara/route.rb +2 -2
- data/lib/nyara/route_entry.rb +5 -4
- data/lib/nyara/session.rb +47 -22
- data/lib/nyara/test.rb +13 -10
- data/lib/nyara/view.rb +27 -49
- data/lib/nyara/view_handlers/erb.rb +21 -0
- data/lib/nyara/view_handlers/erubis.rb +81 -0
- data/lib/nyara/view_handlers/haml.rb +17 -0
- data/lib/nyara/view_handlers/slim.rb +16 -0
- data/nyara.gemspec +3 -1
- data/readme.md +2 -2
- data/spec/apps/connect.rb +1 -1
- data/spec/config_spec.rb +76 -4
- data/spec/{test_spec.rb → integration_spec.rb} +47 -3
- data/spec/path_helper_spec.rb +1 -1
- data/spec/performance/escape.rb +10 -0
- data/spec/performance/layout.slim +14 -0
- data/spec/performance/page.slim +16 -0
- data/spec/performance_spec.rb +6 -1
- data/spec/public/empty file.html +0 -0
- data/spec/public/index.html +1 -0
- data/spec/request_delegate_spec.rb +1 -1
- data/spec/request_spec.rb +20 -0
- data/spec/route_entry_spec.rb +7 -0
- data/spec/session_spec.rb +8 -4
- data/spec/spec_helper.rb +1 -0
- data/spec/{ext_parse_spec.rb → url_encoded_spec.rb} +17 -5
- data/spec/views/edit.haml +2 -0
- data/spec/views/edit.slim +2 -0
- data/spec/views/index.liquid +0 -0
- data/spec/views/invalid_layout.liquid +0 -0
- data/spec/views/layout.erb +1 -0
- data/spec/views/show.slim +1 -0
- data/tools/foo.rb +9 -0
- data/tools/hello.rb +16 -11
- metadata +22 -4
@@ -0,0 +1,81 @@
|
|
1
|
+
require "erubis"
|
2
|
+
|
3
|
+
module Nyara
|
4
|
+
class View
|
5
|
+
# mostly same as actionpack/action_view/template/handlers/erb.rb
|
6
|
+
class Erubis < ::Erubis::Eruby
|
7
|
+
def self.src template
|
8
|
+
new(template).src
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_preamble(src)
|
12
|
+
@newline_pending = 0
|
13
|
+
src << "_erbout = @_nyara_view.out;"
|
14
|
+
end
|
15
|
+
|
16
|
+
# ensure 1:1 mapping of "\n" between template and output
|
17
|
+
def add_text(src, text)
|
18
|
+
return if text.empty?
|
19
|
+
|
20
|
+
if text == "\n"
|
21
|
+
@newline_pending += 1
|
22
|
+
else
|
23
|
+
src << "_erbout.safe_append='"
|
24
|
+
src << "\n" * @newline_pending if @newline_pending > 0
|
25
|
+
src << escape_text(text)
|
26
|
+
src << "';"
|
27
|
+
|
28
|
+
@newline_pending = 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Erubis toggles <%= and <%== behavior when escaping is enabled.
|
33
|
+
# We override to always treat <%== as escaped.
|
34
|
+
def add_expr(src, code, indicator)
|
35
|
+
case indicator
|
36
|
+
when '=='
|
37
|
+
add_expr_escaped(src, code)
|
38
|
+
else
|
39
|
+
super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
44
|
+
|
45
|
+
def add_expr_literal(src, code)
|
46
|
+
flush_newline_if_pending(src)
|
47
|
+
if code =~ BLOCK_EXPR
|
48
|
+
src << '_erbout.append= ' << code
|
49
|
+
else
|
50
|
+
src << '_erbout.append=(' << code << ');'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_expr_escaped(src, code)
|
55
|
+
flush_newline_if_pending(src)
|
56
|
+
if code =~ BLOCK_EXPR
|
57
|
+
src << "_erbout.safe_append= " << code
|
58
|
+
else
|
59
|
+
src << "_erbout.safe_append=(" << code << ");"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_stmt(src, code)
|
64
|
+
flush_newline_if_pending(src)
|
65
|
+
super
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_postamble(src)
|
69
|
+
flush_newline_if_pending(src)
|
70
|
+
src << '_erbout.join'
|
71
|
+
end
|
72
|
+
|
73
|
+
def flush_newline_if_pending(src)
|
74
|
+
if @newline_pending > 0
|
75
|
+
src << "_erbout.safe_append='#{"\n" * @newline_pending}';"
|
76
|
+
@newline_pending = 0
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "haml"
|
2
|
+
|
3
|
+
module Nyara
|
4
|
+
class View
|
5
|
+
module Haml
|
6
|
+
def self.src template
|
7
|
+
e = ::Haml::Engine.new template
|
8
|
+
# todo trim mode
|
9
|
+
<<-RUBY
|
10
|
+
_hamlout = ::Haml::Buffer.new(nil, encoding: 'utf-8'); _hamlout.buffer = @_nyara_view.out
|
11
|
+
#{e.precompiled}
|
12
|
+
_hamlout.buffer.join
|
13
|
+
RUBY
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "slim"
|
2
|
+
|
3
|
+
module Nyara
|
4
|
+
class View
|
5
|
+
class Slim
|
6
|
+
def self.src template
|
7
|
+
t = ::Slim::Template.new(nil, nil, pretty: false){ template }
|
8
|
+
src = t.instance_variable_get :@src
|
9
|
+
if src.start_with?('_buf = []')
|
10
|
+
src.sub! '_buf = []', '_buf = @_nyara_view.out'
|
11
|
+
end
|
12
|
+
src
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/nyara.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "nyara"
|
3
|
-
s.version = "0.0.1.pre.
|
3
|
+
s.version = "0.0.1.pre.8"
|
4
4
|
s.author = "Zete Lui"
|
5
5
|
s.email = "nobody@example.com"
|
6
6
|
s.homepage = "https://github.com/luikore/nyara"
|
@@ -11,8 +11,10 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.licenses = ['BSD 3-Clause']
|
12
12
|
|
13
13
|
s.files = Dir.glob('{rakefile,nyara.gemspec,readme.md,**/*.{rb,h,c,cc,inc}}')
|
14
|
+
s.files += Dir.glob('spec/**/*')
|
14
15
|
s.files += Dir.glob('ext/http-parser/{AUTHORS,CONTRIBUTIONS,LICENSE-MIT}')
|
15
16
|
s.files += Dir.glob('ext/multipart-parser-c/README.md')
|
17
|
+
s.files.uniq!
|
16
18
|
s.require_paths = ["lib"]
|
17
19
|
s.extensions = ["ext/extconf.rb"]
|
18
20
|
s.rubygems_version = '2.0.3'
|
data/readme.md
CHANGED
data/spec/apps/connect.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -6,16 +6,87 @@ module Nyara
|
|
6
6
|
Config.reset
|
7
7
|
end
|
8
8
|
|
9
|
-
it "
|
10
|
-
Nyara.config
|
9
|
+
it "Nyara.config forbids block" do
|
10
|
+
Nyara.config
|
11
|
+
assert_raise ArgumentError do
|
12
|
+
Nyara.config{}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "convert workers" do
|
17
|
+
Config.configure do
|
18
|
+
set :workers, '3'
|
19
|
+
end
|
20
|
+
Config.init
|
11
21
|
assert_equal 3, Config['workers']
|
12
22
|
end
|
13
23
|
|
14
|
-
it "
|
15
|
-
Config.
|
24
|
+
it "convert port" do
|
25
|
+
Config.configure do
|
26
|
+
set :port, '1000'
|
27
|
+
end
|
28
|
+
Config.init
|
16
29
|
assert_equal 1000, Config['port']
|
17
30
|
end
|
18
31
|
|
32
|
+
it "port default" do
|
33
|
+
Config.reset
|
34
|
+
Config.init
|
35
|
+
assert_equal 3000, Config['port']
|
36
|
+
end
|
37
|
+
|
38
|
+
it "views and public default" do
|
39
|
+
Config.reset
|
40
|
+
Config[:root] = '/root'
|
41
|
+
Config.init
|
42
|
+
assert_equal '/root/public', Config['public']
|
43
|
+
assert_equal '/root/views', Config['views']
|
44
|
+
end
|
45
|
+
|
46
|
+
context "#project_path" do
|
47
|
+
before :all do
|
48
|
+
Config.configure do
|
49
|
+
set :root, '/a'
|
50
|
+
init
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it "works" do
|
55
|
+
path = Config.project_path 'b/../../c', false
|
56
|
+
assert_equal '/c', path
|
57
|
+
end
|
58
|
+
|
59
|
+
it "restrict mode ensures dir safety" do
|
60
|
+
path = Config.project_path 'b/../../c'
|
61
|
+
assert_equal nil, path
|
62
|
+
end
|
63
|
+
|
64
|
+
it "restrict mode allows '..' if it doesn't get outside" do
|
65
|
+
path = Config.project_path 'b/../c', true
|
66
|
+
assert_equal '/a/c', path
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it "#public_path" do
|
71
|
+
Config.configure do
|
72
|
+
set :root, '/root'
|
73
|
+
set :public, 'a'
|
74
|
+
init
|
75
|
+
end
|
76
|
+
path = Config.public_path '/b'
|
77
|
+
assert_equal '/root/a/b', path
|
78
|
+
end
|
79
|
+
|
80
|
+
it "#views_path" do
|
81
|
+
Config.configure do
|
82
|
+
set :root, '/'
|
83
|
+
set :views, '/a'
|
84
|
+
init
|
85
|
+
end
|
86
|
+
path = Config.views_path '../..', false
|
87
|
+
assert_equal '/', path
|
88
|
+
end
|
89
|
+
|
19
90
|
it "env helpers" do
|
20
91
|
Config.set :env, 'test'
|
21
92
|
assert_equal true, Config.test?
|
@@ -23,6 +94,7 @@ module Nyara
|
|
23
94
|
|
24
95
|
Config.set :env, 'production'
|
25
96
|
assert_equal false, Config.test?
|
97
|
+
assert_equal true, Config.production?
|
26
98
|
end
|
27
99
|
end
|
28
100
|
end
|
@@ -11,6 +11,14 @@ class TestController < Nyara::Controller
|
|
11
11
|
post '/create' do
|
12
12
|
redirect_to '#index'
|
13
13
|
end
|
14
|
+
|
15
|
+
put '/send_file/%z' do |name|
|
16
|
+
send_file Nyara.config.views_path name
|
17
|
+
end
|
18
|
+
|
19
|
+
delete '/render' do
|
20
|
+
render 'edit.slim'
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
class MyTest
|
@@ -18,12 +26,13 @@ class MyTest
|
|
18
26
|
end
|
19
27
|
|
20
28
|
module Nyara
|
21
|
-
describe Nyara::Test do
|
29
|
+
describe Nyara::Test, 'integration' do
|
22
30
|
before :all do
|
23
31
|
configure do
|
24
32
|
reset
|
25
|
-
set :env, 'test'
|
33
|
+
# set :env, 'test'
|
26
34
|
map '/', TestController
|
35
|
+
set :root, __dir__
|
27
36
|
end
|
28
37
|
Nyara.setup
|
29
38
|
@test = MyTest.new
|
@@ -40,7 +49,7 @@ module Nyara
|
|
40
49
|
it "redirect" do
|
41
50
|
@test.post @test.path_to('test#create')
|
42
51
|
assert @test.response.success?
|
43
|
-
assert_equal 'http://localhost/', @test.redirect_location
|
52
|
+
assert_equal 'http://localhost:3000/', @test.redirect_location
|
44
53
|
@test.follow_redirect
|
45
54
|
assert_equal '/', @test.request.path
|
46
55
|
end
|
@@ -54,5 +63,40 @@ module Nyara
|
|
54
63
|
assert_equal '4', @test.session['b']
|
55
64
|
assert_equal '3', @test.session['a']
|
56
65
|
end
|
66
|
+
|
67
|
+
it "send file" do
|
68
|
+
@test.put "/send_file/layout.erb"
|
69
|
+
data = File.read Nyara.config.views_path('layout.erb')
|
70
|
+
assert_equal data, @test.response.body
|
71
|
+
end
|
72
|
+
|
73
|
+
it "render" do
|
74
|
+
@test.delete "/render"
|
75
|
+
assert_include @test.response.body, "slim:edit"
|
76
|
+
end
|
77
|
+
|
78
|
+
context "public static content" do
|
79
|
+
it "found file" do
|
80
|
+
@test.get "/index.html"
|
81
|
+
assert_equal 200, @test.response.status
|
82
|
+
assert_equal "index.html", @test.response.body
|
83
|
+
end
|
84
|
+
|
85
|
+
it "found empty file" do
|
86
|
+
@test.get "/empty file.html"
|
87
|
+
assert_equal 200, @test.response.status
|
88
|
+
assert_empty @test.response.body
|
89
|
+
end
|
90
|
+
|
91
|
+
it "missing file" do
|
92
|
+
@test.get "/missing.html"
|
93
|
+
assert_equal 404, @test.response.status
|
94
|
+
end
|
95
|
+
|
96
|
+
it "found but directory" do
|
97
|
+
@test.get "/empty"
|
98
|
+
assert_equal 404, @test.response.status
|
99
|
+
end
|
100
|
+
end
|
57
101
|
end
|
58
102
|
end
|
data/spec/path_helper_spec.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
- # for layout_render.rb, captures: @title
|
2
|
+
doctype html
|
3
|
+
html
|
4
|
+
head
|
5
|
+
meta charset="utf-8"
|
6
|
+
meta http-equiv="X-UA-Compatible" content="IE=edge"
|
7
|
+
title == @title
|
8
|
+
link rel="icon" type="image/x-icon" href="/favicon.ico"
|
9
|
+
script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"
|
10
|
+
body
|
11
|
+
== yield
|
12
|
+
|
13
|
+
div#footer
|
14
|
+
| Copyright © #{Time.now}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- # for layout_render.rb, locals: items
|
2
|
+
h1 Markup examples
|
3
|
+
|
4
|
+
#content
|
5
|
+
p This example shows you how a basic Slim file looks like.
|
6
|
+
|
7
|
+
- unless items.empty?
|
8
|
+
table
|
9
|
+
- items.each do |item|
|
10
|
+
tr
|
11
|
+
td.name = item.name
|
12
|
+
td.price = item.price
|
13
|
+
- else
|
14
|
+
p
|
15
|
+
| No items found. Please add some inventory.
|
16
|
+
Thank you!
|
data/spec/performance_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe 'performance' do
|
|
19
19
|
|
20
20
|
it "[parse_accept_value] faster than sinatra" do
|
21
21
|
res = bm 'parse_accept_value'
|
22
|
-
assert res[:nyara] * 1.
|
22
|
+
assert res[:nyara] * 1.5 < res[:sinatra], res.inspect
|
23
23
|
end
|
24
24
|
|
25
25
|
it "[parse_param] faster than parse in pure ruby" do
|
@@ -31,6 +31,11 @@ describe 'performance' do
|
|
31
31
|
res = bm 'layout_render'
|
32
32
|
assert res[:nyara] * 1.1 < res[:tilt], res.inspect
|
33
33
|
end
|
34
|
+
|
35
|
+
it "[escape] faster than CGI.escape" do
|
36
|
+
res = bm 'escape'
|
37
|
+
assert res[:nyara] * 8 < res[:cgi], res.inspect
|
38
|
+
end
|
34
39
|
end
|
35
40
|
|
36
41
|
end # unless
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
index.html
|
data/spec/request_spec.rb
CHANGED
@@ -38,6 +38,26 @@ module Nyara
|
|
38
38
|
assert_equal 3000, @request.port
|
39
39
|
end
|
40
40
|
|
41
|
+
it "#host_with_port ignores port on 80" do
|
42
|
+
@request.header['Host'] = '127.0.0.1'
|
43
|
+
assert_equal '127.0.0.1', @request.host_with_port
|
44
|
+
end
|
45
|
+
|
46
|
+
it "#accept_language" do
|
47
|
+
@request.header['accept-language'] = "en-US,en;q=0.8"
|
48
|
+
assert_equal ['en-US', 'en'], @request.accept_language
|
49
|
+
end
|
50
|
+
|
51
|
+
it "#accept_encoding with blank header" do
|
52
|
+
@request.header.delete 'Accept-Encoding'
|
53
|
+
assert_equal [], @request.accept_encoding
|
54
|
+
end
|
55
|
+
|
56
|
+
it "#accept_charset" do
|
57
|
+
@request.header['ACCEPT-CHARSET'] = "iso-8859-1;q=0.2, utf-8"
|
58
|
+
assert_equal %w[utf-8 iso-8859-1], @request.accept_charset
|
59
|
+
end
|
60
|
+
|
41
61
|
def request_set_attrs
|
42
62
|
Ext.request_set_attrs @request, @request_attrs
|
43
63
|
end
|
data/spec/route_entry_spec.rb
CHANGED
@@ -44,6 +44,13 @@ module Nyara
|
|
44
44
|
assert_equal [], conv
|
45
45
|
end
|
46
46
|
|
47
|
+
it "#compile %z" do
|
48
|
+
re, conv = @r.compile_re '/%z'
|
49
|
+
assert_equal [:to_s], conv
|
50
|
+
s = '/foo bar.baz'
|
51
|
+
assert_equal [s, s[1..-1]], s.match(Regexp.new re).to_a
|
52
|
+
end
|
53
|
+
|
47
54
|
it "#compile_re with utf-8 chars" do
|
48
55
|
re, conv = @r.compile_re '/目录/%da/也可以'
|
49
56
|
assert_equal [:to_i], conv
|
data/spec/session_spec.rb
CHANGED
@@ -4,7 +4,8 @@ module Nyara
|
|
4
4
|
describe Session do
|
5
5
|
context ".encode_set_cookie options" do
|
6
6
|
before :all do
|
7
|
-
@session =
|
7
|
+
@session = Session.new
|
8
|
+
@session['hello'] = 'world'
|
8
9
|
end
|
9
10
|
|
10
11
|
it "is HttpOnly" do
|
@@ -65,7 +66,8 @@ module Nyara
|
|
65
66
|
|
66
67
|
it "should encode and decode" do
|
67
68
|
cookie = {}
|
68
|
-
session =
|
69
|
+
session = Session.new
|
70
|
+
session['hello'] = 'world'
|
69
71
|
Session.encode_to_cookie session, cookie
|
70
72
|
|
71
73
|
session_data = cookie[Session.name].split('/')[1]
|
@@ -77,7 +79,8 @@ module Nyara
|
|
77
79
|
|
78
80
|
it "drops bad signature" do
|
79
81
|
cookie = {}
|
80
|
-
session =
|
82
|
+
session = Session.new
|
83
|
+
session['hello'] = 'world'
|
81
84
|
Session.encode_to_cookie session, cookie
|
82
85
|
|
83
86
|
cookie[Session.name].sub!(/\w/, &:swapcase)
|
@@ -98,7 +101,8 @@ module Nyara
|
|
98
101
|
|
99
102
|
it "encode and decode" do
|
100
103
|
cookie = {}
|
101
|
-
session =
|
104
|
+
session = Session.new
|
105
|
+
session['hello'] = 'world'
|
102
106
|
Session.encode_to_cookie session, cookie
|
103
107
|
|
104
108
|
session_data = cookie[Session.name].split('/')[1]
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,21 @@
|
|
1
1
|
require_relative "spec_helper"
|
2
2
|
|
3
3
|
module Nyara
|
4
|
-
describe Ext, "
|
4
|
+
describe Ext, "url_encoded.c" do
|
5
|
+
context "Ext.escape" do
|
6
|
+
it "escapes path" do
|
7
|
+
s = "/a/path.js"
|
8
|
+
assert_equal s, Ext.escape(s, true)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "escapes uri component" do
|
12
|
+
s = "/a/path.js"
|
13
|
+
assert_equal CGI.escape(s), Ext.escape(s, false)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
5
17
|
# note: this method is only used in C code
|
6
|
-
context "
|
18
|
+
context "Ext.parse_url_encoded_seg" do
|
7
19
|
[false, true].each do |nested|
|
8
20
|
context (nested ? 'nested mode' : 'flat mode') do
|
9
21
|
it "normal parse" do
|
@@ -58,7 +70,7 @@ module Nyara
|
|
58
70
|
end
|
59
71
|
end
|
60
72
|
|
61
|
-
context "
|
73
|
+
context "Ext.parse_path" do
|
62
74
|
before :each do
|
63
75
|
@output = ''
|
64
76
|
end
|
@@ -128,7 +140,7 @@ module Nyara
|
|
128
140
|
end
|
129
141
|
end
|
130
142
|
|
131
|
-
context ".parse_cookie" do
|
143
|
+
context "Ext.parse_cookie" do
|
132
144
|
it "parses complex cookie" do
|
133
145
|
history = CGI.escape '历史'
|
134
146
|
cookie = "pgv_pvi; pgv_si= ; pgv_pvi=som; sid=1d6c75f0 ; PLHistory=<#{history}>;"
|
@@ -146,7 +158,7 @@ module Nyara
|
|
146
158
|
end
|
147
159
|
end
|
148
160
|
|
149
|
-
context ".parse_param" do
|
161
|
+
context "Ext.parse_param" do
|
150
162
|
it "parses param with non-utf-8 chars" do
|
151
163
|
bad_s = CGI.escape "\xE2"
|
152
164
|
h = Ext.parse_param ParamHash.new, bad_s
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<html><%== yield %></html>
|
@@ -0,0 +1 @@
|
|
1
|
+
= a
|
data/tools/foo.rb
ADDED
data/tools/hello.rb
CHANGED
@@ -1,23 +1,28 @@
|
|
1
|
-
require_relative "../lib/nyara"
|
1
|
+
require_relative "../lib/nyara/nyara"
|
2
2
|
# require "open-uri"
|
3
3
|
# require "pry"
|
4
4
|
|
5
5
|
configure do
|
6
6
|
# set :env, 'production'
|
7
|
-
# set :workers,
|
7
|
+
# set :workers, 3
|
8
|
+
map '/', 'my'
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
11
|
+
class MyController < Nyara::Controller
|
12
|
+
get '/' do
|
13
|
+
send_string 'hello world'
|
14
|
+
end
|
14
15
|
|
15
|
-
get '/exit' do
|
16
|
-
|
17
|
-
end
|
16
|
+
get '/exit' do
|
17
|
+
exit
|
18
|
+
end
|
18
19
|
|
19
|
-
get '/redi' do
|
20
|
-
|
20
|
+
get '/redi' do
|
21
|
+
redirect '/'
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
25
|
+
Nyara.setup
|
26
|
+
Nyara.start_server
|
27
|
+
|
23
28
|
# GC.stress = true
|