
Ja! ist eine DSL, um schnell Schelfanwendungen in MRUBY mit minimalem Aufwand zu erstellen:
# 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 Fügen Sie die unten stehende Zeile zu Ihrem build_config.rb hinzu:
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end Oder fügen Sie diese Zeile dem mrbgem.rake Ihrer Aplikationsrate hinzu:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end In Yeah!, Eine Route ist eine HTTP-Methode, die mit einem URL-Matching-Muster gepaart ist. Jede Route ist mit einem Block verbunden:
post '/' do
.. create something ..
endRouten sind in der Reihenfolge übereinstimmt, die sie definiert sind. Die erste Route, die mit der Anfrage übereinstimmt, wird aufgerufen.
Routen mit nachlaufenden Schrägstrichen unterscheiden sich nicht von denen ohne:
get '/foo' do
# Does match "GET /foo/"
end Verwenden Sie root , um den Standardeintragspunkt anzugeben:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' Routenmuster können benannte Parameter enthalten, die über den params Hash zugänglich sind:
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endSie können auch über Blockparameter auf Namensparameter zugreifen:
# 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 } !"
endRouten können auch Abfrageparameter verwenden:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endStreckenübereinstimmung mit regulären Ausdrücken:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
endDie Unterstützung für den regulären Ausdruck erfordert, dass MRUBY-REGEXP-PCRE vor MRUBY-yeah installiert wird!
Routen können auch so definiert werden, dass sie jeder HTTP -Methode entspricht:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endLast but not least ist es möglich, eine Liste aller hinzugefügten HTTP -Routen zu erhalten:
routes # => ['GET /blog/post/{id}'] Jeder Routing -Block wird im Rahmen einer Instanz von Yeah::Controller aufgerufen. Die Klasse bietet Zugriff auf Methoden wie request , params , logger und render .
request gibt die Regalanfrage zurück und ist im Grunde ein Hash. get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams gibt die Abfrageparameter und die benannten URL -Params zurück. Abfrageparameter können mit String -Tasten und mit dem Symbol benannten Params zugegriffen werden. # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger gibt die Abfrageparameter und die benannten URL -Params zurück. Abfrageparameter können mit String -Tasten und mit dem Symbol benannten Params zugegriffen werden. Vergessen Sie nicht, die erforderliche Middleware einzubeziehen! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender gibt eine gut geformte Regalantwort zurück. Die Methode ermöglicht Varoius -Art von Invokation: 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 Anstelle eines Codeblocks, um eine Route auszuführen, akzeptiert auch einen Controller und eine ähnliche Aktion wie Rails.
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 Ja! Schiffe mit einem kleinen Opt -Parser. Jede Option ist einem Block zugeordnet:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOpts können einen Standardwert haben. Der Block wird auf jeden Fall entweder mit dem Befehlszeilenwert, seinem Standardwert oder nur mit NIL aufgerufen.
Manchmal ist es jedoch beabsichtigt, nur einige Meta -Informationen für eine einzelne Option auszudrucken und dann zu beenden, ohne den Server zu starten:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end Laufen Sie beim Start einmal in jeder Umgebung:
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 Führen Sie nur dann aus, wenn die Umgebung ( SHELF_ENV -Umgebungsvariable) auf production eingestellt ist:
configure :production do
...
end Laufen Sie nur, wenn die Umgebung entweder auf development oder auf test eingestellt ist:
configure :development , :test do
...
end Sie können über settings auf diese Optionen zugreifen:
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end Ja! Fahrten im Regal, eine minimale Standardschnittstelle für MRUBY -Webrahmen. Eine der interessantesten Funktionen des Regals für Anwendungsentwickler ist die Unterstützung für "Middleware" - Komponenten, die zwischen dem Server und Ihrer Anwendungsüberwachung liegen und/oder die HTTP -Anforderung/-Anantwortung zu verarbeiten, um verschiedene Arten von gemeinsamen Funktionen bereitzustellen.
Sinatra macht den Gebäude Rack Middleware Pipelines über eine Methode use auf höchster Ebene zu einem Kino:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end Die Semantik der use ist identisch mit denen, die für das Regal definiert sind :: Builder DSL. Beispielsweise akzeptiert die Verwendung der Verwendung der Verwendung mehrerer/variabler Argumente sowie Blöcke:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]Das Regal wird mit einer Vielzahl von Standard -Middleware für Protokollierung, Debuggen und URL -Routing verteilt. Ja! Verwendet viele dieser Komponenten automatisch basierend auf der Konfiguration, sodass Sie sie normalerweise nicht explizit verwenden müssen.
Ja! Funktioniert mit allen Regal-kompatiblen Webserver. Im Moment sind dies Mruby-SimpleHttpserver und Mruby-Heeler :
set :server , 'simplehttpserver' # => DefaultEs ist jedoch möglich, Handler für andere Server zu registrieren. Weitere Informationen finden Sie hier.
Klonen Sie das Repo:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
Kompilieren Sie die Quelle:
$ rake compile
Führen Sie die Tests aus:
$ rake test
Fehlerberichte und Pull-Anfragen sind auf Github unter https://github.com/katzer/mruby-yeah willkommen.
git checkout -b my-new-feature ).git commit -am 'Add some feature' )git push origin my-new-feature )Das MGEM ist unter den Bedingungen der MIT -Lizenz als Open Source erhältlich.
Gemacht mit? in Leipzig
© 2017 Appplant GmbH