我需要覆盖gem“omnicontacts”的方法“email_to_name”,因为它不适用于ruby 1.8.7。 我在这个方法中使用命名正则表达式有错误
lib/omnicontacts/parse_utils.rb:32: undefined (?...) sequence: /(?<first>[a-z|A-Z]+)[\.|_](?<last>[a-z|A-Z]+)/ (SyntaxError)
此方法位于模块ParseUtils
中module OmniContacts
module ParseUtils
def email_to_name username_or_email
...
end
end
end
然后在其他模块中需要
require "omnicontacts/parse_utils"
require "omnicontacts/middleware/oauth2"
require "json"
module OmniContacts
module Importer
class Gmail < Middleware::OAuth2
include ParseUtils
end
end
end
我试图覆盖此方法,但它不起作用:
#config/initializer/omnicontacts.rb
require "omnicontacts"
module OmniContacts
module ParseUtils
def email_to_name username_or_email
p "test"
end
end
end
module OmniContacts
module Importer
class Gmail
module ParseUtils
def email_to_name username_or_email
p "test"
end
end
end
end
end
ActionController::Dispatcher.middleware.use OmniContacts::Builder do
importer :gmail, "test", "test", {:redirect_path => "/contacts/gmail/callback"}
importer :yahoo, "test", "test", {:callback_path => '/contacts/yahoo/callback'}
end
我使用rails 2和ruby 1.8.7
答案 0 :(得分:0)
你确定你的猴子补丁是在宝石后加载的吗?因为如果它在gem之前加载,gem的实现将覆盖你的。
答案 1 :(得分:0)
我将文件lib / omnicontacts / parse_utils.rb添加到我的项目中,它从gem覆盖了这样的文件。它解决了问题,但它似乎不是很好的解决方案,因为我只是分叉宝石并在那里添加所需的更改。