Rails - 扩展Ruby Gem

时间:2013-07-27 21:56:44

标签: ruby-on-rails ruby rubygems activemerchant

我想在ActiveMerchant gem中添加一些功能以测试PayPal Express网关,已经尝试了拉取请求,但在Github上被拒绝了。

我想在ActiveMerchant Billing模块中添加一个类:

module ActiveMerchant #:nodoc:
  module Billing #:nodoc:
    class PaypalBogusGateway < BogusGateway

      # some codes here

    end
  end
end

我通过在本地下载并将gem拉入我的项目并在那里完成我的新文件来成功完成此任务:

#Gemfile
gem 'activemerchant', '1.34.1', path: "vendor/gems/activemerchant-1.34.1", require: 'active_merchant'

但当然,这不是最好的主意,因为如果我需要,我必须手动提取任何更新。

有没有办法可以使用从RubyGems源中提取的gem将类添加到模块中?

由于

修改

将它放在lib文件夹中应该可以工作,但是我的代码需要gem继承的一些类,例如:

require File.dirname(__FILE__) + '/paypal/paypal_common_api'
require File.dirname(__FILE__) + '/paypal/paypal_express_response'
require File.dirname(__FILE__) + '/paypal_express_common'

将gem.dirname( FILE )替换为安装gem的位置......这在服务器环境中会有所不同吗?

2 个答案:

答案 0 :(得分:6)

将activemerchant添加到Gemfile,捆绑安装

config/application.rb中确保lib包含在自动加载路径中

# need to uncomment or add this to the configuration
config.autoload_paths += %W(#{config.root}/lib)

使用嵌套目录将您的类放在一个文件中以匹配模块

# lib/active_merchant/billing/paypal_bogus_gateway.rb

不要在你的虚假网关中包含任何require语句,rails(通过bundler应该需要Gemfile中的所有内容)

重新启动rails

答案 1 :(得分:1)

您可能只想在GitHub上分叉项目并将更改添加到它。即使它只是一个单一的课程。然后,在Gemfile中,执行此操作:

gem "active_merchant", :git => "git://github.com/<your-user-name-here>/active_merchant.git"