Как обезопасить существующий гем (движок Rails)? - PullRequest
3 голосов
/ 10 апреля 2011

Я начинаю работать с Ruby и Rails 3. Есть Rails Engine (упакованный как Gem), который я хотел бы использовать, но он не работает точно так, как мне бы хотелось. Я хочу внести небольшие изменения, но не хочу создавать свою собственную разветвленную версию. Я думаю, что именно здесь исправление обезьян становится полезным.

Будучи новичком в Ruby (и пришедшим из PHP), патчи для обезьян - это новая концепция для меня. Как бы я пошёл, чтобы обезьяна исправила существующий драгоценный камень, и как бы я организовал свои модификации? Я ищу подходы "передового опыта" к этому.

1 Ответ

1 голос
/ 10 апреля 2011

Это очень широкий вопрос, потому что вы не упомянули, что такое драгоценный камень или как вы хотели изменить поведение, но ...

В общем, способ подойти к этому (один из способов подойти к этому) открыть драгоценный камень.Используйте редактор, который может открыть все файлы, чтобы вы могли легко переключаться с одного на другой.Когда вы посмотрите на этот драгоценный камень, выясните, какой класс содержит функциональность, которую вы хотите изменить.

Итак, вы идете в свой каталог test или spec и пишете такой тест:запустить ваши тесты.Конечно, они терпят неудачу, потому что ваша новая функциональность отсутствует.

Теперь, скажем, ваше изменение входит в spit_out_error_message в классе AwesomeAuthentication.Вы можете создать класс в своем проекте - возможно, в lib / awesome_auth.rb или что-то в этом роде.В нем вы делаете, как описано здесь: Rails 3: alias_method_chain все еще используется? .Вы также захотите прочитать это: http://yehudakatz.com/2009/03/06/alias_method_chain-in-models/,, как описано, как модифицировать существующий класс, используя эту технику (прокрутите вниз).

Итак, вы создаете новый spit_out_error_message, булыжниккак описано выше и повторите тесты.

...