
是的!是一個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