Ruby on Rails: как создать строку в кавычках в заголовке запроса? - PullRequest
0 голосов
/ 23 мая 2018

Я пишу с нуля клиент Twitter и один из реквизитов - , а не , использующий самоцветы Twitter, поэтому я должен создать свои собственные запросы.

Документация по API Twitter гласит здесь что у меня должен быть заголовок авторизации, подобный этому:

Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"

Как видите, у меня должно быть что-то вроде oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog" со второй частью в кавычках.Я попытался использовать% Q, как в

["oauth_consumer_key",%Q( Figaro.env.TWITTER_ACCESS_TOKEN )].join('=')

, предполагая, что% Q вернет строку в кавычках.но когда я проверяю значение, все, что я получаю, это

oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog

, что, очевидно, отличается от требуемого результата.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

1.Мое решение:

'oauth_consumer_key="#{Figaro.env.TWITTER_ACCESS_TOKEN}"'

2.Почему:

%Q() в основном заменяет переменную двойными кавычками "", это буквально то же самое, как если бы вы написали "Figaro.env.TWITTER_ACCESS_TOKEN"

Фактически, чтобы отобразить содержимое переменной, вы должны использовать интерполяция вместо самого имени, используя "#{var}".

Вы также можете использовать %Q напрямую с интерполяцией, используя %Q{var} (примечание {} вместо ()).

Ваша проблема в другом месте: с помощью метода join () .Это избавление от двойных кавычек.В этом случае выполнение ["var", var].join('=') и ["var", %Q{var}].join('=') заканчивается тем же, но более сложным.

@ Решение Артема Игнатьева должно работать .Но если вам нужно быть более читабельным, вам даже не нужно присоединяться, imho, это имеет смысл только тогда, когда вы используете более двух переменных.

Например, я буду использовать что-то вроде 'oauth_consumer_key="#{var}"'смешивая одинарные и двойные кавычки, чтобы убедиться, что это не вызывает путаницы.

Если вам do нужно использовать %Q() и join, вы все равно можете использовать ["oauth_consumer_key", %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN})].join('=').

  • Обратите внимание, что из-за join вы можете использовать интерполяцию с одинарными кавычками %q или интерполяцию с двойными кавычками %Q без влияния на конечные результаты:

например

['oauth_consumer_key', %q("#{var}")].join('=') == ["oauth_consumer_key", %Q("#{var}")].join('=')
0 голосов
/ 23 мая 2018

%Q(x) в основном совпадает с "x".

Чтобы достичь желаемого результата, вы должны вручную ввести кавычки в выражение %Q, например: %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN}")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...