2012-02-23 11 views
8

Estoy desarrollando un plugin de Jenkins en Ruby. Se supone que debe poder configurar cada nodo que se conecta al servidor para que se envíe un correo electrónico a una dirección específica cuando el nodo pierde su conexión con el maestro. EmailNodeProperty añade un campo para introducir una dirección de correo electrónico:Validación de formularios de plugins de Jenkins con Ruby

# 
# Save an email property for every node 
# 
class EmailNodeProperty < Jenkins::Slaves::NodeProperty 
    require 'java' 
    import 'hudson.util.FormValidation' 

    display_name "Email notification" 

    attr_accessor :email 

    def initialize(attrs = {}) 
     @email = attrs['email'] 
    end 

    def doCheckEmail value 
     puts " ENP.doCheckEmail:#{value}" 
    end 
end 

Al configurar un nodo, hay un campo denominado email donde se puede introducir una dirección de correo electrónico. Quiero que este campo sea validado cuando ingresas una dirección.

Al guardar la configuración, se crea un EmailNodeProperty desde donde (es correcto) puede acceder a la dirección de correo electrónico.

MyComputerListener 's offline se llama cuando un nodo pierde su conexión:

class MyComputerListener 
    include Jenkins::Slaves::ComputerListener 
    include Jenkins::Plugin::Proxy 

    def online(computer, listener) 
    end 

    def offline(computer) 
     #Do nothing when the Master shuts down 
     if computer.to_s.match('Master') == nil 
      list = computer.native.getNode().getNodeProperties() 
      proxy = list.find {"EmailNodeProperty"} 
      if proxy.is_a?(Jenkins::Plugin::Proxy) 
       rubyObject = proxy.getTarget() 
       email = rubyObject.email #<= Accesses the email from EmailNodeProperty 
       [...] 
      end 
     end 
    end 
end 

MyComputerListener encuentra la dirección de correo electrónico y envía un correo electrónico.

¿Alguien sabe si es posible validar el formulario en Ruby? De acuerdo con la Jenkins wiki, esto es lo que se supone que debe ser implementado (se supone campo para ser cambiado por el nombre del campo, así que supongo que debe ser doCheckEmail):

public FormValidation doCheckFIELD(@QueryParameter String value) { 
    if(looksOk(value)) 
     return FormValidation.ok(); 
    else 
     return FormValidation.error("There's a problem here"); 
} 

¿cómo hacer esto en Ruby? ¿Dónde debería implementarse el método? En EmailNodeProperty o en MyComputerListener? ¿Cómo se maneja el QueryParameter? El @ lo convertiría en una variable de intstance en Ruby. (¿Qué es un parámetro Query?)

¡Cualquier ayuda sería muy apreciada!

/Jonatan

Respuesta

1

Esto simplemente no existe hoy en día, y que tienen gran necesidad de agregarlo. Esto ya se ha mencionado un par de veces en Thursday morning's hack session, por lo que ocupa un lugar destacado en la lista de TODO. Pero a partir del ruby-runtime plugin 0.10, esto simplemente no es posible. Perdón por defraudarlo.

Cuestiones relacionadas