Обезьяна (может быть?), Исправляющая драгоценность в моих приложениях Rails - PullRequest
3 голосов
/ 12 июля 2011

Я на 100% уверен в терминологии, все еще относительно новой для мира рельсов, так что простите, что если я слишком далеко с патчем обезьяны, это может не сработать в этом случае.

Я использую драгоценный камень LongURL, который удлиняет сокращенные URL. По умолчанию гем использует longurl.org, но мы ежедневно просматриваем несколько сотен тысяч URL-адресов и думаем, что для всех было бы лучше, если бы этот сервис был внутренним. Мне просто нужно изменить 2 константы, чтобы они указывали на мой собственный URL.

module LongURL
  ShortURLMatchRegexp = /http:\/\/[\/\-_.a-z0-9]+/im

  # Urls for longurl
  EndPoint        = URI.parse("http://api.longurl.org/v1/expand")
  ServiceEndPoint = URI.parse("http://api.longurl.org/v1/services")
end

Не кажется, что такое незначительное изменение заслуживает разветвления, что хорошего, идиоматического рельса? Подходы к таким незначительным изменениям?

Спасибо

1 Ответ

6 голосов
/ 12 июля 2011

Когда вы переопределяете константы, вам нужно сначала удалить старые, а затем повторно применить новые.Ваш патч может выглядеть следующим образом:

module LongURL
  remove_const(:ShortURLMatchRegexp)
  ShortURLMatchRegexp = /http:\/\/[\/\-_.a-z0-9]+/im

  # ... (etc) ...
end

Это должно помочь избежать предупреждений о переопределении существующего константа.

Что касается создания Railsy, ​​поместите его в config/initializers и убедитесь, что онос четкой маркировкой, возможно, longurl_monkeypatch.rb, поэтому не возникает путаницы в отношении того, что за хакерство происходит.

...