什么是Sinatra :: Base负责? (即课程概述)

时间:2014-07-21 23:59:35

标签: sinatra

我正在学习Sinatra并试图将我的大脑包裹在Sinatra::Basedocumentation不能轻易回答这个问题:

Sinatra::Base负责什么?

有没有一种简单的方法来考虑它? (也许有一个好图或什么?)

或者答案只是一长串的功能? (例如:Sinatra::Base负责错误,过滤器,路由,模板等等。”)

或者它是否简单:“Sinatra::Base Sinatra,减去执行上下文,Sinatra::Application”?

1 个答案:

答案 0 :(得分:2)

Sinatra::Base 没有授权的Sinatra。请考虑以下代码 with delegation:

# app.rb
require 'sinatra'

get '/' do
  render :template
end

此样式为您提供免费的选项解析器:

$ ruby app.rb -h
Usage: app [options]
    -p port                          set the port (default is 4567)
    -o addr                          set the host (default is localhost)
    -e env                           set the environment (default is development)
    -s server                        specify rack server/handler (default is thin)
    -x                               turn on the mutex lock (default is off)

当您使用应用程序运行脚本时,它还会使用适当的Rack处理程序启动服务器,因此您不必编写任何相关代码。

它的作用只是因为ObjectSinatra::Delegator中使用sinatra/main进行了扩展。请参阅http://git.io/zWl7RAhttp://git.io/NxgpBg。它将所有Sinatra DSL方法委派给预先配置的Sinatra::Base实例,即Sinatra::Application

以模块化样式编写应用程序时,不会委派任何内容。你只是继承了基地:

require 'sinatra/base'

class Application < Sinatra::Base
  get '/'
    render :template
  end
end

Application.run!

因此,Sinatra::Base目前负责在Rack,Tilt和其他依赖项之上实现所有Sinatra DSL方法。