
是的!是一个DSL,可快速在Mruby中以最小的努力创建货架应用程序:
# mrblib/your-mrbgem.rb
extend Yeah :: DSL | extend Yeah :: DSL
|
set port : 3000 | opt ( :port ) { | port | set port : port }
|
get '/hi/{name}' do | name | | get '/hi' do
"Hi #{ name } " | "Hi #{ params [ 'name' ] . join ( ' and ' ) } "
end | end $ your-mrbgem & | $ your-mrbgem --port 8080 &
Starting application at http://localhost:3000 | Starting application at http://localhost:8080
|
$ curl ' localhost:3000/hi/Ben ' | $ curl ' localhost:8080/hi?name=Tom&name=Jerry '
Hi Ben | Hi Tom and Jerry将下面的行添加到您的build_config.rb :
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end或将此行添加到您的Aplication的mrbgem.rake :
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end 在是的!中,一条路线是与URL匹配模式配对的HTTP方法。每个路线都与一个块相关联:
post '/' do
.. create something ..
end路线按定义的顺序匹配。调用与请求匹配的第一条路线。
拖尾斜线的路线与没有的路线没有不同的路线:
get '/foo' do
# Does match "GET /foo/"
end使用root指定默认条目:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html'路由模式可能包括命名参数,可通过params哈希访问:
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
end您还可以通过块参数访问命名参数:
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do | name |
# params[:name] is 'foo' or 'bar'
# name stores params[:name]
"Hello #{ name } !"
end路由也可以使用查询参数:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
end路线与正则表达式匹配:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
end对正则表达式的支持需要在Mruby-Yeah之前安装MRUBY-REGEXP-PCRE !
也可以定义路由以匹配任何HTTP方法:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
end最后但并非最不重要的一点可以获取所有添加的HTTP路线的列表:
routes # => ['GET /blog/post/{id}'] 每个路由块都在Yeah::Controller实例的范围内调用。该类提供对request , params , logger和render等方法的访问。
request返回货架请求,基本上是哈希。 get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams返回查询参数并命名url参数。查询参数可通过字符串键访问,并通过符号命名参数。 # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger返回查询参数并命名url参数。查询参数可通过字符串键访问,并通过符号命名参数。不要忘记包括所需的中间件! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender返回形成良好的架子响应。该方法允许varoius的援引: get '/500' do | get '/yeah' do
render 500 | render html : '<h1>Yeah!</h1>'
end | end
|
get '/say_hi' do | post '/api/stats' do
render 'Hi' | render json : Stats . create ( params ) , status : 201 , headers : { ... }
end | end
|
get '/say_hello' do | get '/' do
'Hello' | render redirect : 'public/index.html'
end | end 代替执行路线的代码块还接受控制器和类似于导轨的操作。
class GreetingsController < Yeah :: Controller
def greet ( name )
render "Hello #{ name . capitalize } "
end
end
Yeah . application . routes . draw do
get 'greet/{name}' , to : 'greetings#greet'
end
Yeah . application . configure :production do
log_folder '/logs' , 'iss.log' , 'iss.err'
end
Yeah . application . run! port : 3000 是的!带有小的opt式解析器的船只。每个选项都与一个块关联:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOPTS可以具有默认值。在任何情况下,都将调用该块的命令行值,其默认值或仅零。
但是,有时它仅打印出单个给定选项的一些元信息,然后在不启动服务器的情况下退出:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end 在启动时,在任何环境中运行一次:
configure do
# setting one option
set :option , 'value'
# setting multiple options
set a : 1 , b : 2
# same as `set :option, true`
enable :option
# same as `set :option, false`
disable :option
end仅当环境( SHELF_ENV环境变量)设置为production时运行:
configure :production do
...
end仅当环境设置为development或test时运行:
configure :development , :test do
...
end您可以通过settings访问这些选项:
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end 是的!骑在架子上,这是MRUBY Web框架的最小标准接口。货架开发人员最有趣的功能之一是支持“中间件”,这些组件位于服务器和您的应用程序监视和/或操纵HTTP请求/响应以提供各种类型的共同功能。
Sinatra通过顶级use方法使建筑架中间件管道成为束缚:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end use语义与为架子定义的语义相同:: Builder DSL。例如,使用方法接受多个/变量ARG以及块:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]架子分配了各种标准中间件,用于记录,调试和URL路由。是的!根据配置自动使用许多这些组件,因此通常不必明确使用它们。
是的!与任何与货架兼容的Web服务器一起使用。现在,这些是Mruby-simplehttpserver和Mruby-heeler :
set :server , 'simplehttpserver' # => Default但是,可以为其他服务器注册处理程序。请参阅此处以获取更多信息。
克隆回购:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
编译来源:
$ rake compile
运行测试:
$ rake test
欢迎在https://github.com/katzer/mruby-yeah上在GitHub上的错误报告和拉动请求。
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature )根据MIT许可条款,可以作为开源的MGEM提供。
与?在莱比锡
©2017 AppPlant GmbH