
Sim! é um DSL para criar rapidamente aplicativos de prateleira em mruby com um esforço 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 Adicione a linha abaixo ao seu build_config.rb :
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end Ou adicione esta linha ao mrbgem.rake da sua aplicação:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end Em sim!, Uma rota é um método HTTP emparelhado com um padrão de correspondência de URL. Cada rota está associada a um bloco:
post '/' do
.. create something ..
endAs rotas são comparadas na ordem em que são definidas. A primeira rota que corresponde à solicitação é invocada.
Rotas com barras à direita não são diferentes das daquelas sem:
get '/foo' do
# Does match "GET /foo/"
end Use root para especificar o ponto de entrada padrão:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' Os padrões de rota podem incluir parâmetros nomeados, acessíveis através do hash params :
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endVocê também pode acessar parâmetros nomeados via parâmetros de bloco:
# 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 } !"
endAs rotas também podem utilizar parâmetros de consulta:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endRota correspondente a expressões regulares:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
endO suporte para expressão regular requer que a Mruby-Regexp-PCRE seja instalada antes de Mruby-Yeah!
As rotas também podem ser definidas para corresponder a qualquer método HTTP:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endPor último, mas não menos importante, é possível obter uma lista de todas as rotas HTTP adicionadas:
routes # => ['GET /blog/post/{id}'] Cada bloco de roteamento é invocado dentro do escopo de uma instância de Yeah::Controller . A classe fornece acesso a métodos como request , params , logger e render .
request retorna a solicitação de prateleira e é basicamente um hash. get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams retorna os parâmetros de consulta e os parâmetros de URL nomeados. Os parâmetros de consulta são acessíveis por teclas de string e params nomeados 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 retorna os parâmetros de consulta e os parâmetros de URL nomeados. Os parâmetros de consulta são acessíveis por teclas de string e params nomeados por símbolo. Não se esqueça de incluir o middleware necessário! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender retorna uma resposta de prateleira bem formada. O método permite o tipo de invocação 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 Em vez de um bloco de código para executar uma rota também aceita um controlador e uma ação semelhante aos trilhos.
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 Sim! Navios com um pequeno analisador de opções. Cada opção está associada a um bloco:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOPTS pode ter um valor padrão. O bloco será chamado em qualquer caso com o valor da linha de comando, seu valor padrão ou apenas nulo .
Às vezes, no entanto, se destina a imprimir apenas algumas meta -informações para uma única opção e depois saia sem iniciar o servidor:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end Corra uma vez, na startup, em qualquer ambiente:
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 Execute apenas quando o ambiente (variável de ambiente SHELF_ENV ) está definido como production :
configure :production do
...
end Execute apenas quando o ambiente estiver definido como development ou test :
configure :development , :test do
...
end Você pode acessar essas opções por meio de settings :
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end Sim! Rides na prateleira, uma interface padrão mínima para estruturas da web mruby. Um dos recursos mais interessantes da prateleira para os desenvolvedores de aplicativos é o suporte para "middleware" - componentes que ficam entre o servidor e o monitoramento de aplicativos e/ou manipulando a solicitação/resposta HTTP para fornecer vários tipos de funcionalidade comum.
Sinatra faz com que os dutos de middleware de construção de rack de construção seja uma fila por meio de um método use de nível superior:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end A semântica do use é idêntica aos definidos para a prateleira :: Builder DSL. Por exemplo, o método de uso aceita múltiplas/variáveis args, bem como blocos:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]A prateleira é distribuída com uma variedade de middleware padrão para log, depuração e roteamento de URL. Sim! Usa muitos desses componentes automaticamente com base na configuração, para que você normalmente não precise usá -los explicitamente.
Sim! Funciona com qualquer servidor web compatível com prateleira. No momento, estes são Mruby-SimplehttpServer e Mruby-Heeler :
set :server , 'simplehttpserver' # => DefaultNo entanto, é possível registrar manipuladores para outros servidores. Veja aqui para mais informações.
Clone o repo:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
Compilar a fonte:
$ rake compile
Execute os testes:
$ rake test
Relatórios de bug e solicitações de tração são bem-vindos no github em https://github.com/katzer/mruby-yeah.
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature )O MGEM está disponível como código aberto nos termos da licença do MIT.
Feito com? em Leipzig
© 2017 Appplant GmbH