6
votes

Decorateur de module Spree

J'utilise Spree Commerce pour ma boutique en ligne. Je souhaite modifier un comportement pendant le processus de paiement, qui est défini dans app / modèles / serre / ordre / checkout.rb code> à l'intérieur de la gemme de la virée. J'ai donc fait un checkout_decorator.rb code> au même point de mon application.

Le problème est que mes modifications ne sont pas chargées. Et un autre problème est que tout à l'intérieur du module est à l'intérieur d'une méthode, la méthode def. def.fr (klass) code> méthode. Je pense donc que je dois remplacer le fichier entier, au lieu d'une seule méthode. Voici ce que mon décorateur ressemble à: p>

checkout_decorator.rb code> p> xxx pré>

le fichier d'origine checkout.rb de la gemme Spree ressemble à ceci: P>

module Spree
  class Order < ActiveRecord::Base
    module Checkout
      def self.included(klass)
        klass.class_eval do
          class_attribute :next_event_transitions
          class_attribute :previous_states
          class_attribute :checkout_flow
          class_attribute :checkout_steps

          def self.checkout_flow(&block)
            if block_given?
              @checkout_flow = block
              define_state_machine!
            else
              @checkout_flow
            end
          end

          def self.define_state_machine!
             # some code
          end

          # and other methods that are not shown here
        end
      end
    end
  end
end


0 commentaires

3 Réponses :



1
votes

La liste de noms n'est pas correcte.

Essayez Spree :: Commerce :: Checkout.class_eval Do


0 commentaires

0
votes

TL; DR: Ecraser la méthode que vous voulez dans la Spree :: Classe d'ordre au lieu de la SPARE :: Commandez :: Checkout Module.

Vous avez mentionné que dans le fichier d'origine (SPREE_CORE-3.2.0.RC3 / App / Modèles / Spree / Commander / Checkout.RB) Un procédé enveloppe le module entier. p> xxx pré>

Cette méthode est appelée lorsque le module est inclus dans une classe et fait son propre class_eval code> pour ajouter les méthodes du module aux instances de la classe. y compris cela. p>

de sorte que puist (SPREE_CORE-3.2.0.RC3 / APP / MODÈLES / SPARE / COMMANDE.RB) a cette ligne: P>

include Spree::Order::Checkout


0 commentaires