
¡Sí! es un DSL para crear rápidamente aplicaciones de estante en Mruby con un esfuerzo mínimo:
# 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 Agregue la línea a continuación a su build_config.rb :
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end O agregue esta línea al mrbgem.rake de su aplicación:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end ¡En sí!, Una ruta es un método HTTP emparejado con un patrón de coincidencia de URL. Cada ruta está asociada con un bloque:
post '/' do
.. create something ..
endLas rutas coinciden en el orden en que se definen. Se invoca la primera ruta que coincide con la solicitud.
Las rutas con cortes finales no son diferentes de las que no tienen:
get '/foo' do
# Does match "GET /foo/"
end Use root para especificar el punto de entrada predeterminado:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' Los patrones de ruta pueden incluir parámetros con nombre, accesibles a través del hash params :
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endTambién puede acceder a los parámetros nombrados a través de parámetros de bloque:
# 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 } !"
endLas rutas también pueden utilizar los parámetros de consulta:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endCoincidencia de ruta con expresiones regulares:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
end¡El soporte para la expresión regular requiere que Mruby-Regexp-PCRE se instale antes de Mruby-Yeah!
Las rutas también se pueden definir para que coincidan con cualquier método HTTP:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endPor último, pero no menos importante, es posible obtener una lista de todas las rutas HTTP agregadas:
routes # => ['GET /blog/post/{id}'] Cada bloque de enrutamiento se invoca dentro del alcance de una instancia de Yeah::Controller . La clase proporciona acceso a métodos como request , params , logger y render .
request devuelve la solicitud del estante y es básicamente un hash. get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams Devuelve los parámetros de consulta y los parámetros de URL con nombre. Los parámetros de consulta son accesibles por teclas de cadena y se nombran parámetros por símbolo. # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger devuelve los parámetros de consulta y los parámetros de URL con nombre. Los parámetros de consulta son accesibles por teclas de cadena y se nombran parámetros por símbolo. ¡No olvides incluir el middleware requerido! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender devuelve una respuesta de estante bien formada. El método permite la invocación 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 En lugar de un bloque de código para ejecutar una ruta, también acepta un controlador y una acción similar a los rieles.
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 ¡Sí! Viajes con un pequeño analizador Opt. Cada opción está asociada con un bloque:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOPTS puede tener un valor predeterminado. El bloque se invocará en cualquier caso con el valor de la línea de comandos, su valor predeterminado o simplemente nulo .
A veces, sin embargo, está destinado a imprimir solo algunas meta informaciones para una sola opción dada y luego salir sin iniciar el servidor:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end Ejecute una vez, al inicio, en cualquier entorno:
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 Ejecute solo cuando el entorno ( SHELF_ENV Variable de entorno) se establece en production :
configure :production do
...
end Ejecute solo cuando el entorno esté configurado para development o test :
configure :development , :test do
...
end Puede acceder a esas opciones a través de settings :
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end ¡Sí! Made en el estante, una interfaz estándar mínima para los marcos web de Mruby. Una de las capacidades más interesantes de Shelf para los desarrolladores de aplicaciones es el soporte para el "middleware", componentes que se encuentran entre el servidor y la supervisión de su aplicación y/o manipular la solicitud/respuesta HTTP para proporcionar varios tipos de funcionalidad común.
Sinatra hace que Building Rack Middleware Pipelines sea una FINH a través de un método use de nivel superior:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end La semántica de use es idéntica a las definidas para el estante :: Builder DSL. Por ejemplo, el método de uso acepta múltiples/variables args, así como bloques:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]El estante se distribuye con una variedad de middleware estándar para registro, depuración y enrutamiento de URL. ¡Sí! Utiliza muchos de estos componentes automáticamente en función de la configuración, por lo que generalmente no tiene que usarlos explícitamente.
¡Sí! Funciona con cualquier servidor web compatible con estante. En este momento estos son Mruby-Simplehttpserver y Mruby-Heler :
set :server , 'simplehttpserver' # => DefaultSin embargo, es posible registrar manejadores para otros servidores. Vea aquí para más información.
Clon el repositorio:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
Compilar la fuente:
$ rake compile
Ejecute las pruebas:
$ rake test
Los informes de errores y las solicitudes de extracción son bienvenidas en GitHub en https://github.com/katzer/mruby-yeah.
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature )El MGEM está disponible como código abierto bajo los términos de la licencia MIT.
Hecho con? en Leipzig
© 2017 Applant GmbH