
Ouais! est un DSL pour créer rapidement des applications d'étagère dans MruBy avec un minimum d'effort:
# 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 Ajoutez la ligne ci-dessous à votre build_config.rb :
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end Ou ajoutez cette ligne à mrbgem.rake de votre apélication:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end Dans ouais!, Un itinéraire est une méthode HTTP associée à un motif de correspondance d'URL. Chaque itinéraire est associé à un bloc:
post '/' do
.. create something ..
endLes itinéraires sont appariés dans l'ordre où ils sont définis. Le premier itinéraire qui correspond à la demande est invoqué.
Les itinéraires avec des barres obliques de fuite ne sont pas différentes de celles sans:
get '/foo' do
# Does match "GET /foo/"
end Utilisez root pour spécifier le point d'entrée par défaut:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' Les modèles d'itinéraire peuvent inclure des paramètres nommés, accessibles via le hachage params :
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endVous pouvez également accéder aux paramètres nommés via des paramètres de bloc:
# 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 } !"
endLes routes peuvent également utiliser les paramètres de requête:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endAssociation d'itinéraire avec des expressions régulières:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
endLa prise en charge de l'expression régulière nécessite l'installation de MruBy-Regexp-PCE avant Mruby-yeah!
Les routes peuvent également être définies pour correspondre à n'importe quelle méthode HTTP:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endEnfin et surtout, il est possible d'obtenir une liste de toutes les routes HTTP ajoutées:
routes # => ['GET /blog/post/{id}'] Chaque bloc de routage est invoqué dans le champ d'application d'une instance de Yeah::Controller . La classe donne accès à des méthodes telles que request , params , logger et render .
request renvoie la demande d'étagère et est essentiellement un hachage. get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams renvoie les paramètres de requête et les paramètres d'URL nommés. Les paramètres de requête sont accessibles par les touches de chaîne et les paramètres nommés par symbole. # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger renvoie les paramètres de requête et les paramètres d'URL nommés. Les paramètres de requête sont accessibles par les touches de chaîne et les paramètres nommés par symbole. N'oubliez pas d'inclure le middleware requis! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender renvoie une réponse de l'étagère bien formée. La méthode permet une invoque de 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 Au lieu d'un bloc de code pour exécuter un itinéraire accepte également un contrôleur et une action similaire aux 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 Ouais! expédié avec un petit analyseur d'opt. Chaque option est associée à un bloc:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOpts peut avoir une valeur par défaut. Le bloc sera invoqué dans tous les cas avec la valeur de ligne de commande, sa valeur par défaut ou tout simplement nulle .
Parfois, cependant, il est destiné à imprimer uniquement certaines informations de méta pour une seule option donnée, puis à quitter sans démarrer le serveur:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end Exécutez une fois, au démarrage, dans n'importe quel environnement:
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 Exécuter uniquement lorsque l'environnement (variable d'environnement SHELF_ENV ) est défini sur production :
configure :production do
...
end Exécutez uniquement lorsque l'environnement est défini sur development ou test :
configure :development , :test do
...
end Vous pouvez accéder à ces options via settings :
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end Ouais! Rides sur l'étagère, une interface standard minimale pour les frameworks Web MruBy. L'une des capacités les plus intéressantes de Shelf pour les développeurs d'applications est la prise en charge du "middleware" - des composants qui se trouvent entre le serveur et la surveillance de votre application et / ou la manipulation de la demande / réponse HTTP pour fournir divers types de fonctionnalités communes.
Sinatra fait de la construction de pipelines de middleware à rack un jeu d'enfant via une méthode use de niveau supérieur:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end La sémantique d' use est identique à celles définies pour l'étagère :: Builder DSL. Par exemple, la méthode d'utilisation accepte des args multiples / variables ainsi que des blocs:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]L'étagère est distribuée avec une variété de middleware standard pour l'exploitation forestière, le débogage et le routage d'URL. Ouais! Utilise plusieurs de ces composants automatiquement en fonction de la configuration, vous n'avez généralement pas à les utiliser explicitement.
Ouais! Fonctionne avec n'importe quel serveur Web compatible étagère. À l'heure actuelle, ce sont Mruby-SimplehTTPServer et MruBy-Heeler :
set :server , 'simplehttpserver' # => DefaultCependant, il est possible d'enregistrer des gestionnaires pour d'autres serveurs. Voir ici pour plus d'informations.
Cloner le repo:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
Compilez la source:
$ rake compile
Exécutez les tests:
$ rake test
Les rapports de bogues et les demandes de traction sont les bienvenus sur GitHub à https://github.com/katzer/mruby-yah.
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature )Le MGEM est disponible en open source en vertu des termes de la licence MIT.
Fait avec? à Leipzig
© 2017 Applant GmbH