2013-07-12 120 views
1

我需要覆蓋寶石「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 

我使用導軌2和紅寶石1.8.7

+0

你把你的文件與猴子補丁放在哪裏? –

+0

我需要全文後在初始化程序中放入 –

+0

您是否重新啓動了您的應用程序? –

回答

0

你確定你的猴子補丁是在寶石之後加載的嗎?因爲如果它在寶石之前加載,寶石的實現將覆蓋你的。

+0

是的,我把它放在了寶石之後。我更新了上面的代碼。 –

0

我將文件lib/omnicontacts/parse_utils.rb添加到我的項目中,並從gem覆蓋此文件。它解決了問題,但它似乎並不是很好的解決方案,因此我只是分叉了寶石並在那裏添加了必要的更改。