Как переопределить метод рубинового камня для определенных условий? - PullRequest
0 голосов
/ 15 ноября 2018

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

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

module Net
  class FTP
    def makepasv
      if condition
        @sock.peeraddr[0] == 'AF_INET' ? parse229(sendcmd('EPSV')) : parse227(sendcmd('EPSV'))
      else
        super
      end
    end
  end
end

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете prepend переопределить класс и затем использовать условный. Таким образом, ваш модуль будет последним в цепочке предков и сможет вызывать super, чтобы использовать поведение по умолчанию

* например, 1005 *

module Override 
  def to_s(*) 
    if self == 'a'
      "===a===" 
    else 
      super 
    end
  end 
end
String.prepend(Override)

[9] pry(main)> String.new("a")
=> "a"                                                                                                            
[10] pry(main)> String.new("a").to_s
=> "===a==="
[11] pry(main)> String.new("b").to_s
=> "b"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...