Создание простого рубинового драгоценного камня, который позволяет пользователю вызывать определенный метод? - PullRequest
0 голосов
/ 04 октября 2011

Я искал несколько уроков по созданию рубиновых самоцветов, но все они кажутся слишком сложными.По сути, все, что я хочу, - это создать гем, который ( тривиальный пример оповещения ) позволяет пользователю размещать метод add_one(x) в своем коде после установки гема.

Многие учебные пособия объясняют, как вы можете вызывать методы гема с помощью Classname.method(), но на самом деле это не то, что я хочу.RyanB имеет хороший пример здесь , но, опять же, я не могу заставить его работать - в основном из-за 3 строк кода в нижней части uniquify.rb, которые читают.

class ActiveRecord::Base
  include Uniquify
end

В моем случае мой основной модуль называется AddOne, так как мне поступить так?Опять же, извините за тривиальный пример, я просто хочу начать, чтобы мои гемы позволяли пользователю вызывать обычные методы без указания модулей или классов.В примере Райана он может просто позвонить uniquify() в коде.

1 Ответ

1 голос
/ 04 октября 2011

В приведенном примере он может вызвать uniquify как метод, потому что он вызывает его внутри класса, который включает ActiveRecord::Base.(Он звонит uniquify внутри блока class Product < ActiveRecord::Base ... end) Здесь нет никакой настоящей магии.

Насколько я понимаю, то, что вы желаете, легко достижимо, но не является хорошей идеей, считается "наилучшей практикой".Вы можете определить все, что вы хотите в своем драгоценном камне.Например, я мог бы упаковать файл с именем say_hello.rb внутри гема с именем salutations.

say_hello.rb

def say_hello
  puts "Hello everybody"
end

Если мне понадобится упакованный камень salutations, я получу доступ ко всему, что там определено.Однако это может привести к неожиданным последствиям.Делайте то, что вам нужно, но просто понимайте, что это может быть не самой лучшей идеей.Следовательно, вы встраиваете вещи в классы или модули, чтобы содержать их и предотвращать конфликты с другим кодом.Удачи.

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