ruby sinatra 之 扩展

这次的开发中,使用thin作为服务器,sinatra作为web服务框架进行开发。下面讨论的是如何书写自己的插件,扩展sinatra框架。


自定义插件有两种方式,extension方法和helper方法。


extension方法

require 'sinatra/base'

module Sinatra
  module PostGet
    def post_get(route,&block)
      get(route,&block)
      post(route,&block)
    end
  end
      
  register PostGet
end

 
在定义了PostGet模块后,只需要register就可以使用。

require 'sinatra'
require 'post_get'

configure do
  set :port,5000
end
post_get '/' do 
   "hi"
end

 

helpers方法

有两种定义方法。一种module定义,一种采用块进行定义。

require 'sinatra/base'
module Sinatra
  module LinkHelper
    def link(name)
      case name
      when :about then '/about'
      when :index then '/index'
      else "/page/#{name}"
    end
  end
  helpers LinkHelper
end

 

require 'sinatra'

helpers do
  def link(name)
    case name
      when :about then '/about'
      when :index then '/index'
      else "/page/#{name}";
    end
  end
end

 
如上,定义了link的扩展方法。在之后的方法体中,直接调用link方法即可。


extension和helper的混入定义方法

require 'sinatra/base'
module MyExtension
  module Helpers
    # helper methods go here
  end
  # extension methods go here
  def self.registered(app)
    app.helpers Helpers
  end
end
Sinatra.register MyExtension

 

因为Sinatra.register方法体中,我们可以看到如下代码:

def register(*extensions, &block)
        extensions << Module.new(&block) if block_given?
        @extensions += extensions
        extensions.each do |extension|
          extend extension
          extension.registered(self) if extension.respond_to?(:registered)
        end
end
 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值