Как открыть модуль в Ruby / Rails - PullRequest
3 голосов
/ 04 мая 2011

У меня есть файл модуля, лежащий в папке vendor / plugins.

module Greetings
   def self.greet(message)
      return "good morning" if message=="gm"
      return "evening" if message=="ge"
      return "good afternoon" if message=="ga"
   end
end

Когда я делаю Greetings.greet("ge"), я получаю "вечер" в качестве вывода. Я хочу изменить это поведение без изменения вышеуказанного модуля Greetings (очевидная причина в том, что это внешний плагин).

Мой вопрос здесь прост. Что я должен делать, когда говорят, что я звоню Greetings.greet("ge"), должен возвращать мне «Очень хороший вечер», а для всех остальных входов он должен возвращать то, что возвращает исходный модуль.

И я бы написал это в папке config / initializers, так как я использую Rails.

PS: Я уже поднял аналогичный вопрос для классов. Но я действительно хочу знать, как это работает и для модулей.

1 Ответ

7 голосов
/ 04 мая 2011

Это работает для меня в Ruby 1.8.7 и Ruby 1.9.2

module Greetings
   def self.greet(message)
      return "good morning" if message=="gm"
      return "evening" if message=="ge"
      return "good afternoon" if message=="ga"
   end
end

p Greetings.greet("ge") # => "evening"

module Greetings
  class << self
    alias_method :old_greet, :greet

    def greet(message)
      return self.old_greet(message) unless message == "ge"
      return "A Very Good Evening"
    end
  end
end

p Greetings.greet("ge") # => "A Very Good Evening"
p Greetings.greet("gm") # => "good morning"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...