
ใช่! เป็น DSL สำหรับการสร้างแอปพลิเคชันชั้นวางอย่างรวดเร็วใน MRUBY ด้วยความพยายามน้อยที่สุด:
# 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 เพิ่มบรรทัดด้านล่างไปยัง build_config.rb ของคุณ:
MRuby :: Build . new do | conf |
# ... (snip) ...
conf . gem 'mruby-yeah'
end หรือเพิ่มบรรทัดนี้ไปยัง mrbgem.rake ของคุณ:
MRuby :: Gem :: Specification . new ( 'your-mrbgem' ) do | spec |
# ... (snap) ...
spec . add_dependency 'mruby-yeah'
end ในใช่! เส้นทางเป็นวิธี HTTP ที่จับคู่กับรูปแบบการจับคู่ URL แต่ละเส้นทางเกี่ยวข้องกับบล็อก:
post '/' do
.. create something ..
endเส้นทางจะถูกจับคู่ตามลำดับที่กำหนดไว้ เส้นทางแรกที่ตรงกับคำขอจะถูกเรียกใช้
เส้นทางที่มีสแลชต่อท้าย ไม่ แตกต่างจากเส้นทางที่ไม่มี:
get '/foo' do
# Does match "GET /foo/"
end ใช้ root เพื่อระบุจุดเริ่มต้นเริ่มต้น:
# Redirect "GET /" to "GET /public/index.html"
root '/public/index.html' รูปแบบเส้นทางอาจรวมถึงพารามิเตอร์ชื่อที่สามารถเข้าถึงได้ผ่าน params hash:
# matches "GET /hello/foo" and "GET /hello/bar"
get '/hello/{name}' do
# params[:name] is 'foo' or 'bar'
"Hello #{ params [ :name ] } !"
endนอกจากนี้คุณยังสามารถเข้าถึงพารามิเตอร์ชื่อผ่านพารามิเตอร์บล็อก:
# 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 } !"
endเส้นทางอาจใช้พารามิเตอร์การสืบค้น:
# matches "GET /posts?title=foo&author=bar"
get '/posts' do
title = params [ 'title' ]
author = params [ 'author' ]
endการจับคู่เส้นทางกับการแสดงออกปกติ:
get '/blog/post/{id:\d+}' do | id |
post = Post . find ( id )
endการสนับสนุนสำหรับการแสดงออกปกติต้องใช้ mruby-regexp-pcre ที่จะติดตั้งก่อน mruby-yeah!
เส้นทางยังสามารถกำหนดให้ตรงกับวิธี HTTP ใด ๆ :
# matches "GET /" and "PUT /" and ...
route '/' , R3 :: ANY do
request [ Shelf :: REQUEST_METHOD ]
endสุดท้าย แต่ไม่ท้ายสุดเป็นไปได้ที่จะได้รับรายการเส้นทาง HTTP ที่เพิ่มทั้งหมดทั้งหมด:
routes # => ['GET /blog/post/{id}'] แต่ละบล็อกการกำหนดเส้นทางจะถูกเรียกใช้ภายในขอบเขตของอินสแตนซ์ของ Yeah::Controller ชั้นเรียนให้การเข้าถึงวิธีการเช่น request params logger และ render
request ส่งคืนคำขอชั้นวางและโดยทั่วไปเป็นแฮช get '/' do
request # => { 'REQUEST_METHOD' => 'GET', 'REQUEST_PATH' => '/', 'User-Agent' => '...' }
endparams ส่งคืนพารามิเตอร์แบบสอบถามและชื่อ URL พารามิเตอร์ พารามิเตอร์แบบสอบถามสามารถเข้าถึงได้โดยคีย์สตริงและชื่อพารามิเตอร์ตามสัญลักษณ์ # "GET /blogs/b1/posts/p1?blog_id=b2"
get '/blogs/{blog_id}/posts/{post_id}' do
params # => { blog_id: 'b1', post_id: 'p1' }
endlogger ส่งคืนพารามิเตอร์แบบสอบถามและชื่อ URL Params พารามิเตอร์แบบสอบถามสามารถเข้าถึงได้โดยคีย์สตริงและชื่อพารามิเตอร์ตามสัญลักษณ์ อย่าลืมรวมมิดเดิลแวร์ที่จำเป็น! use Shelf :: Logger
get '/' do
logger # => <Logger:0x007fae54987308>
endrender ส่งคืนการตอบสนองของชั้นวางที่ดี วิธีการอนุญาตให้ 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 แทนที่จะเป็นบล็อกรหัสเพื่อดำเนินการเส้นทางก็ยอมรับคอนโทรลเลอร์และการกระทำที่คล้ายกับราง
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 ใช่! เรือที่มีตัวแยกวิเคราะห์ขนาดเล็ก แต่ละตัวเลือกเชื่อมโยงกับบล็อก:
# matches "your-mrbgem --port 80" or "your-mrbgem -p 80"
opt :port , :int , 8080 do | port |
# port is 80
set :port , port
endOPT สามารถมีค่าเริ่มต้น บล็อกจะถูกเรียกใช้ในกรณีใด ๆ ไม่ว่าจะด้วยค่าบรรทัดคำสั่งค่าเริ่มต้นหรือเพียงแค่ ไม่มี
บางครั้งอย่างไรก็ตามมีจุดประสงค์เพื่อพิมพ์ข้อมูลเมตาบางอย่างสำหรับตัวเลือกเดียวที่กำหนดแล้วออกจากนั้นโดยไม่ต้องเริ่มต้นเซิร์ฟเวอร์:
# matches "your-mrbgem --version" or "your-mrbgem -v"
opt! :version do
# prints 'v1.0.0' on STDOUT and exit
'v1.0.0'
end รันหนึ่งครั้งเมื่อเริ่มต้นในสภาพแวดล้อมใด ๆ :
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 เรียกใช้เฉพาะเมื่อสภาพแวดล้อม (ตัวแปรสภาพแวดล้อม SHELF_ENV ) ถูกตั้งค่าเป็นการ production :
configure :production do
...
end ทำงานเฉพาะเมื่อสภาพแวดล้อมถูกตั้งค่าเป็นทั้ง development หรือ test :
configure :development , :test do
...
end คุณสามารถเข้าถึงตัวเลือกเหล่านั้นผ่าน settings :
configure do
set :foo , 'bar'
end
get '/' do
settings [ :foo ] # => 'bar'
end ใช่! ขี่บนชั้นวางอินเทอร์เฟซมาตรฐานน้อยที่สุดสำหรับเฟรมเวิร์กเว็บ mruby หนึ่งในความสามารถที่น่าสนใจที่สุดของชั้นวางสำหรับนักพัฒนาแอปพลิเคชันคือการสนับสนุน "มิดเดิลแวร์" - ส่วนประกอบที่อยู่ระหว่างเซิร์ฟเวอร์และการตรวจสอบแอปพลิเคชันของคุณและ/หรือจัดการกับคำขอ/การตอบสนอง HTTP เพื่อให้ฟังก์ชั่นทั่วไปประเภทต่างๆ
Sinatra ทำให้ท่อส่งมิดเดิลแวร์ของชั้นวางของ Middleware เป็นวิธี use ระดับบนสุด:
use Shelf :: CatchError
use MyCustomMiddleware
get '/hello' do
'Hello World'
end ความหมายของ use นั้นเหมือนกับที่กำหนดไว้สำหรับชั้นวาง :: Builder DSL ตัวอย่างเช่นวิธีการใช้งานยอมรับ ARGs หลายตัว/ตัวแปรรวมถึงบล็อก:
use Shelf :: Static , urls : [ '/public' ] , root : ENV [ 'DOCUMENT_ROOT' ]ชั้นวางจัดจำหน่ายด้วยมิดเดิลแวร์มาตรฐานที่หลากหลายสำหรับการบันทึกการดีบักและการกำหนดเส้นทาง URL ใช่! ใช้ส่วนประกอบเหล่านี้จำนวนมากขึ้นอยู่กับการกำหนดค่าโดยอัตโนมัติดังนั้นโดยทั่วไปแล้วคุณไม่จำเป็นต้องใช้อย่างชัดเจน
ใช่! ทำงานร่วมกับเว็บเซิร์ฟเวอร์ที่เข้ากันได้กับชั้นวาง ตอนนี้นี่คือ Mruby-Simplehttpserver และ Mruby-Heler :
set :server , 'simplehttpserver' # => Defaultอย่างไรก็ตามเป็นไปได้ที่จะลงทะเบียนตัวจัดการสำหรับเซิร์ฟเวอร์อื่น ๆ ดูที่นี่สำหรับข้อมูลเพิ่มเติม
โคลน repo:
$ git clone https://github.com/katzer/mruby-yeah.git && cd mruby-yeah/
รวบรวมแหล่งที่มา:
$ rake compile
เรียกใช้การทดสอบ:
$ rake test
รายงานข้อผิดพลาดและคำขอดึงยินดีต้อนรับบน GitHub ที่ https://github.com/katzer/mruby-yeah
git checkout -b my-new-feature )git commit -am 'Add some feature' )git push origin my-new-feature ไปยังสาขาMGEM มีให้เป็นโอเพ่นซอร์สภายใต้ข้อกำหนดของใบอนุญาต MIT
ทำด้วย? ในไลพ์ซิก
© 2017 AppPlant GmbH