0

Ich arbeite auf Event-Maschine (Übergänge gem) in Schienen 4.2, schrieb ich eine Methode mit dem Namen send_data und wenn Status von ausstehend zu liefern geändert wird, wird die send_data ausgelöst.Wie Fehler in Event Machine mit Übergängen Gem auf Schienen umgehen?

def send_data 
    data = { 'remote_id' => order.remote_id, 
      'items' => order.line_items 
      } 
    SendLineItemsToWebshop.call(data)   
    end 

SendLineItemsToWebshop ist eine andere Klasse, die für einige Antwort call Verfahren und wartenden Anrufe, wenn Reaktion kommen, dann wird Ereignis ausgelöst werden (Zustand geändert werden wird), ansonsten Zustand gleich sein wird.

require 'bunny' 
require 'thread' 
class SendLineItemsToWebshop 
    def self.call(data) 
    conn = Bunny.new(automatically_recover: false) 
    conn.start 
    channel = conn.create_channel 
    response = call_client(channel, data) 
    channel.queue(ENV['BLISS_RPC_QUEUE_NAME']).pop 
    channel.close 
    conn.close 
    self.response(response) 
    end 

    def self.call_client(channel, data) 
    client = RpcClient.new(channel, ENV['BLISS_RPC_QUEUE_NAME']) 
    client.call(data) 
    end 

    def self.response(response) 
    return response 
    JSON.parse response 
    end 
end 

Aber Problem ist, dass, wenn ein Ereignis deliver genannt wird, ist es nicht send_data ‚s Antwort überprüfen kommt oder nicht, ändert er den Staat. Hier ist mir liefern Veranstaltung:

event :deliver do 
     transitions :to => :delivered, :from => [:editing, :pending] , on_transition: [ :send_data ] 
    end 

Aber ich möchte, dass, wenn Antwort falsch oder gleich Null ist, Übergangszustand wird nicht verändert. Der Zustand wird nur geändert, wenn die Antwort wahr wird. Bitte helfen Sie mir zu diesem Problem.

Antwort

1

Das Transitions-Juwel hat eine nette guard Funktion. Fügen Sie einen einfachen logischen Test wie can_be_delivered? und versuchen Sie es mit:

event :deliver do 
    transitions :to => :delivered, :from => [:editing, :pending], guard: [:can_be_delivered?] 
end 
+0

Dank @MIKE K, es funktioniert. –

Verwandte Themen