2013-07-12 4 views
1

보석 "omnicontacts"의 "email_to_name"메소드를 루비 1.8.7에서 작동하지 않으므로 오버라이드해야합니다. 나는이 메소드를 오버라이드 (override)하려고젬 모듈의 메소드 오버라이드

require "omnicontacts/parse_utils" 
require "omnicontacts/middleware/oauth2" 
require "json" 

module OmniContacts 
    module Importer 
    class Gmail < Middleware::OAuth2 
     include ParseUtils 
    end 
    end 
end 

나는이 방법

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 

그런 다음 다른 모듈에 필요, 하지만 작동하지 않습니다 :

#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

omnicontacts가 필요하면 이니셜 라이저에 넣습니다. –

+0

앱을 다시 시작 했습니까? –

답변

0

원숭이 패치가 보석 뒤에 있는지 확인합니까? 왜냐하면 보석 앞에로드되어 있다면, 보석의 구현은 당신을 덮어 쓸 것이기 때문입니다.

+0

예, 나는 그것을 보석 뒤에 넣었습니다. 위의 코드를 업데이트합니다. –

0

내 프로젝트에 lib/omnicontacts/parse_utils.rb 파일을 추가했으며 gem에서이 파일을 덮어 씁니다. 그것은 문제를 해결하지만, 아주 좋은 해결책은 아닌 것 같습니다. 왜냐하면 저는 이것을 보석으로 갈아서 거기에 필요한 변화를 추가하기 때문입니다.

관련 문제