
Ya! adalah DSL untuk membuat aplikasi rak dengan cepat di Mruby dengan upaya minimal:
# 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 Tambahkan baris di bawah ini ke build_config.rb Anda:
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end Atau tambahkan baris ini ke mrbgem.rake aplikasi Anda:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end Di yeah!, Rute adalah metode HTTP yang dipasangkan dengan pola pencocokan URL. Setiap rute dikaitkan dengan blok:
post '/' do
.. create something ..
endRute dicocokkan dalam urutan yang didefinisikan. Rute pertama yang cocok dengan permintaan yang diminta.
Rute dengan tebasan trailing tidak berbeda dari yang tanpa:
get '/foo' do
# Does match "GET /foo/"
end Gunakan root untuk menentukan titik masuk default:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' Pola rute mungkin termasuk parameter yang disebutkan, dapat diakses melalui hash params :
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endAnda juga dapat mengakses parameter bernama melalui parameter blok:
# 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 } !"
endRute juga dapat menggunakan parameter kueri:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endPencocokan rute dengan ekspresi reguler:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
endDukungan untuk ekspresi reguler membutuhkan mruby-regexp-pcre untuk diinstal sebelum mruby-yeah!
Rute juga dapat didefinisikan untuk mencocokkan metode HTTP apa pun:
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endTerakhir namun tidak mungkin untuk mendapatkan daftar semua rute HTTP yang ditambahkan:
routes # => ['GET /blog/post/{id}'] Setiap blok perutean dipanggil dalam ruang lingkup contoh Yeah::Controller . Kelas menyediakan akses ke metode seperti request , params , logger dan render .
request Mengembalikan permintaan rak dan pada dasarnya adalah hash. get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams Mengembalikan kueri Params dan bernama URL Params. Param kueri dapat diakses dengan tombol string dan bernama params dengan simbol. # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger Mengembalikan kueri Params dan bernama URL Params. Param kueri dapat diakses dengan tombol string dan bernama params dengan simbol. Jangan lupa untuk memasukkan middleware yang diperlukan! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender mengembalikan respons rak yang terbentuk dengan baik. Metode ini memungkinkan invokasi jenis 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 Alih -alih blok kode untuk menjalankan rute juga menerima pengontrol dan tindakan yang mirip dengan rel.
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 Ya! Kapal dengan parser opt kecil. Setiap opsi dikaitkan dengan blok:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOpts dapat memiliki nilai default. Blok akan dipanggil dalam hal apa pun baik dengan nilai baris perintah, nilai defaultnya atau hanya nihil .
Namun terkadang dimaksudkan untuk hanya mencetak beberapa informasi meta untuk satu opsi yang diberikan dan kemudian keluar tanpa memulai server:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end Jalankan sekali, saat startup, di lingkungan apa pun:
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 Jalankan hanya ketika lingkungan (variabel lingkungan SHELF_ENV ) diatur ke production :
configure :production do
...
end Jalankan hanya ketika lingkungan diatur ke development atau test :
configure :development , :test do
...
end Anda dapat mengakses opsi tersebut melalui settings :
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end Ya! Wahana di rak, antarmuka standar minimal untuk kerangka kerja web mruby. Salah satu kemampuan rak paling menarik untuk pengembang aplikasi adalah dukungan untuk "middleware" - komponen yang duduk di antara server dan pemantauan aplikasi Anda dan/atau memanipulasi permintaan/respons HTTP untuk menyediakan berbagai jenis fungsionalitas umum.
Sinatra Membuat Bangunan Rak Middleware Pipelines Cinch melalui metode use tingkat atas:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end Semantik use identik dengan yang ditentukan untuk rak :: pembangun DSL. Misalnya, metode penggunaan menerima beberapa arg/variabel serta blok:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]Shelf didistribusikan dengan berbagai middleware standar untuk penebangan, debugging, dan perutean URL. Ya! Menggunakan banyak komponen ini secara otomatis berdasarkan konfigurasi sehingga Anda biasanya tidak harus menggunakannya secara eksplisit.
Ya! Bekerja dengan server web yang kompatibel dengan rak. Saat ini ini adalah mruby-simplehttpserver dan mruby-heeler :
set :server , 'simplehttpserver' # => DefaultNamun mungkin untuk mendaftarkan penangan untuk server lain. Lihat di sini untuk info lebih lanjut.
Kloning repo:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
Kompilasi sumbernya:
$ rake compile
Jalankan tes:
$ rake test
Laporan bug dan permintaan tarik dipersilakan di GitHub di https://github.com/katzer/mruby-leeah.
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature )MGEM tersedia sebagai open source di bawah ketentuan lisensi MIT.
Dibuat dengan? di Leipzig
© 2017 Appplant GmbH