10
votes

Comment puis-je couper des rails 3 avertissements de dépréciation sélectivement?

Je mettant la mise à niveau des rails 2 à Rails 3 Application (code non écrit par moi). Le (Code bien testé) utilise le devoir et le test :: unité de test et utilise de manière approfondi les macros 13.Create and dilge_change.

Je comprends de Cette discussion que les responsables souhaitent se débarrasser des deux méthodes, mais que les personnes utilisant des tests :: L'unité ne trouvait pas nécessaire (pas sûr de Sois saisir toute la discussion). P>

Anaway, existe-t-il un moyen de tourner sélectivement les avertissements de dépréciation des macros spécifiées? Je sais déjà de Cet article sur que vous pouvez éteindre les avertissements de dépréciation dans le Test de râteau de sortie entièrement en paramétrage: p> xxx pré>

dans votre fichier d'environnement de test et je sais aussi que vous pouvez mettre des pièces de code spécifiques dans un bloc pour les mettre au silence: P>

ActiveSupport::Deprecation.silence do
# no warnings for any use of deprecated methods here
end


0 commentaires

4 Réponses :


0
votes

Je pense avoir trouvé une solution: dans test / test_helper.rb j'ai rouvert le module et écrasé la définition de la macro avec une définition identique, mais l'avertissement de dépréciation a commenté. Il existe probablement beaucoup plus de façons élégantes de le faire si ...

# modif pvh DEPREC
# reopen the module and silence the deprecation statement to avoid 
# having my results overflown by these deprecation warnings...
module Shoulda # :nodoc:
  module Macros
    def should_create(class_name)
      ##::ActiveSupport::Deprecation.warn
      should_change_record_count_of(class_name, 1, 'create')
    end
  end
end   


0 commentaires

3
votes

En fait, j'habille beaucoup d'autres avertissements d'amortissement du code qui se trouvaient dans des plugins ou des gemmes que j'avais installé. Afin d'éviter la majeure partie de cela, j'ai écrasé la dépréciation :: Méthode de l'avertissement dans Test_Helper.rb. Donc, au lieu du code précédent, utilisez:

module ActiveSupport
  module Deprecation
    class << self
      def warn(message = nil, callstack = caller)
        # modif pvh the following lines make sure no deprecation warnings are sent 
        # for code that is
        # not by my but in some gem or plugin...
        return if silenced  || callstack.grep(/myrailsappname/).blank?
        # return if silenced 
        deprecation_message(callstack, message).tap do |m|
          behavior.each { |b| b.call(m, callstack) }
        end
      end
    end
  end
end  


0 commentaires

6
votes

Une ancienne question - mais si vous avez de nouvelles amortissements, vous souhaitez ignorer sélectivement: xxx

ceci est pour ActiveSupport 3 .


0 commentaires

2
votes

Puis-je recommander une alternative?

module ActiveSupport
  class Deprecation
    module Reporting
      # Mute specific deprecation messages
      def warn(message = nil, callstack = nil)
        return if message.match(/Automatic updating of counter caches/)

        super
      end
    end
  end
end


0 commentaires