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
 


 

你可能感兴趣的:(Sinatra)