处理库版本

时间:2013-01-16 18:33:12

标签: ruby versioning

我正在尝试实现一个库,该库提供了一种统一的方式来与服务器进行通信,该服务器将API调用从版本更改为版本。我计划以这种方式实施它:

connect.rb:

class Connect
    def self.getConn(params)
        case params[:version]
            when '4.0' then return Connect4.new(params)
            when '5.0' then return Connect5.new(params)
            else 'Version not supported.'
        end

    end 
end

class Connect4
    def initialize(params)
        # Code for v4.
    end 
end

class Connect5
    def initialize(params)
        # Code for v5.
    end 
end

test.rb:

require 'connect'

conn = Connect.getConn(:version => '4.0')

puts conn

我认为它会起作用,但我仍然是红宝石的新手,可能会有一些我不考虑的问题。有没有最好的做法来处理这种“挑战”?

1 个答案:

答案 0 :(得分:1)

我认为你的方法没有任何问题,它肯定能奏效。另一方面,如果您的API有多个入口点,那么将版本传递给它们中的每一个都会感觉有点难看。你可以通过一些全局设置来解决它但是不要去那里......

Twitter's Cassandra gem有一个有趣的方法,而不是传递版本号,你需要一个不同的子库(docs):

require 'cassandra' # default version
require 'cassandra/1.0' # 1.0 version

这与Bundler一起使用时特别有用,因为您可以选择像这样的版本

gem "cassandra", require: "cassandra/1.0"

您已完成整个申请。