У меня есть приложение, которое использует гем LinkedIn, но мне нужно перейти к использованию реализации LinkedIn OAuth2, которая поставляется в другом геме.
Мне нужно поддерживать запросы на oAuth1 в начальном геме для существующих пользователей, но мне нужно поддерживать OAuth2 для новых пользователей в будущем.
Проблема в том, что оба этих гема используют пространство имен LinkedIn
для имен своих модулей, и в зависимости от того, в каком порядке я включаю их в свой Gemfile, один забивает другой.
Я попытался добавить require: false
в gemfile следующим образом:
gem 'linkedin', require: false
gem 'linkedin-oauth2', require: false
Но как ни странно, когда я иду к своей консоли, первый все еще требуется, а второй нет:
irb(main):001:0> require 'linkedin'
=> false
irb(main):002:0> require 'linkedin-oauth2'
=> true
Это как-то связано с тем, как работает require? Можно ли загрузить только один из этих драгоценных камней в отдельных файлах lib, не затирая друг друга?
ИЗМЕНИТЬ
Я понял, что мне требовался linkedin
в одном из моих файлов спецификаций, из-за чего он загружался автоматически, но это не решило проблему затирания вещей.
Когда у меня установлены оба драгоценных камня и я запускаю:
irb(main):001:0> require 'linkedin'
=> true
irb(main):002:0> ::LinkedIn::Client.new
NameError: uninitialized constant Api::QueryHelpers
from /Users/me/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/linkedin-1.1.0/lib/linked_in/client.rb:8:in `<class:Client>'
irb(main):004:0> require 'linkedin-oauth2'
=> true
Но если я удалю linkedin-oauth2
из моего gemfile, он будет работать нормально:
irb(main):002:0> require 'linkedin'
=> true
irb(main):004:0> ::LinkedIn::Client.new
=> #<LinkedIn::Client:0x007f9eef6d72a8 @consumer_token=nil, @consumer_secret=nil, @consumer_options={}>
Почему так, тем более что linkedin-oauth2
в первом примере не требуется, а ошибка возникает. Может ли это быть из-за того, что им требуются вспомогательные файлы в камне linkedin
? Вроде все же не должно влиять.