Forum: Rails-ES llamar funcion desde un modelo

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jhon K. (Guest)
on 2008-11-05 18:11
BUenas amigos tengo una duda y agradeceria cualquier ayuda.

Tengo en un modelo una validacion con expresion regular pero tengo esa
expresion en varios archivos y me gustaria es desde el modelo invocar
una funcion que este por ejemplo en el helper y hay se haga la
validacion y asi evitar modificar la expresion en todos los archivos si
no modificarla en alguna funcion.


Si no e sido claro por favor diganme y tratare de hacerme entender
Fernando G. (Guest)
on 2008-11-05 18:43
(Received via mailing list)
El día 5 de noviembre de 2008 17:11, Jhon K.
<removed_email_address@domain.invalid>
escribió:> BUenas amigos tengo una duda y agradeceria cualquier ayuda.
>
> Tengo en un modelo una validacion con expresion regular pero tengo esa
> expresion en varios archivos y me gustaria es desde el modelo invocar
> una funcion que este por ejemplo en el helper y hay se haga la
> validacion y asi evitar modificar la expresion en todos los archivos si
> no modificarla en alguna funcion.

Puedes crearte una clase Utils en la carpeta /lib

Rollo /lib/utils.rb

class Utils
  def self.is_valid( string )
    return string ~= /que siii/
  end
end

La requieres en el /config/environment.rb con

require 'utils'

Y la usas donde quieras con

Utils.is_valid( "que siii es válido" )

Todo esto al vuelo.. seguro que hay errores.

f.
Sergio Cambra .:: entreCables - Symbol Servicios (Guest)
on 2008-11-06 10:40
(Received via mailing list)
El Wednesday 05 November 2008 17:11:03 Jhon K.
escribió:> BUenas amigos tengo una duda y agradeceria cualquier ayuda.
>
> Tengo en un modelo una validacion con expresion regular pero tengo esa
> expresion en varios archivos y me gustaria es desde el modelo invocar
> una funcion que este por ejemplo en el helper y hay se haga la
> validacion y asi evitar modificar la expresion en todos los archivos si
> no modificarla en alguna funcion.
>
>
> Si no e sido claro por favor diganme y tratare de hacerme entender

Igual lo mejor es que tengas la expresion regular como una constante en
el
modelo por ejemplo. Y la usas con Modelo::CONSTANTE

--
Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
Andrés G. (Guest)
on 2008-11-06 10:47
(Received via mailing list)
A mi me suena mejor la solucion de fernando. Pero es solo una
opinión
Un saludo

2008/11/6 Sergio Cambra .:: entreCables - Symbol Servicios
Informáticos S.L. ::. <removed_email_address@domain.invalid>:
Fernando C. (Guest)
on 2008-11-06 13:20
Jhon K. wrote:
> BUenas amigos tengo una duda y agradeceria cualquier ayuda.
>
> Tengo en un modelo una validacion con expresion regular pero tengo esa
> expresion en varios archivos y me gustaria es desde el modelo invocar
> una funcion que este por ejemplo en el helper y hay se haga la
> validacion y asi evitar modificar la expresion en todos los archivos si
> no modificarla en alguna funcion.
>
>
> Si no e sido claro por favor diganme y tratare de hacerme entender

Yo lo que hago muchas veces es, en vez de meterlo en forma de función
independiente, lo meto como método que extiende a una clase. Por
ejemplo, una función para sacar números con separador de miles, o una
que permite aceptar URLs con o sin el http:// , serían así:

class String
  # Si una URL no lleva delante el http://, se lo pone
  def pon_http
    result = "http://#{self}".sub("http://http://", "http://")
  end
end

class Fixnum
  def separar_miles
    self.to_s.gsub(/(.)(?=.{3}+$)/, %q(\1.))
  end
end

Y se llamarían, tanto desde el modelo como desde la vista o el
controller, de la misma forma:

objeto.url.pon_http
objeto.veces_leido.separar_miles

Las extensiones de las clases las meto en lib/aplicacion.rb, y luego
meto un
require 'aplicacion.rb'
en el archivo de configuración config/environment.rb

s2
Sergio Cambra .:: entreCables - Symbol Servicios (Guest)
on 2008-11-06 14:29
(Received via mailing list)
El Thursday 06 November 2008 09:46:33 Andrés gutiérrez
escribió:> A mi me suena mejor la solucion de fernando. Pero es solo una opinión
>
> Un saludo

Depende de si lo que necesita reutilizar es el metodo o la expresion
regular

> >> no modificarla en alguna funcion.
> > T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
> > _______________________________________________
> > Ror-es mailing list
> > removed_email_address@domain.invalid
> > http://lists.simplelogica.net/mailman/listinfo/ror-es
>
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es



--
Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
Jhon K. (Guest)
on 2008-11-06 18:34
Fernando G. wrote:
> El d�a 5 de noviembre de 2008 17:11, Jhon K.
> <removed_email_address@domain.invalid>
> escribi�:> BUenas amigos tengo una duda y agradeceria cualquier ayuda.
>>
>> Tengo en un modelo una validacion con expresion regular pero tengo esa
>> expresion en varios archivos y me gustaria es desde el modelo invocar
>> una funcion que este por ejemplo en el helper y hay se haga la
>> validacion y asi evitar modificar la expresion en todos los archivos si
>> no modificarla en alguna funcion.
>
> Puedes crearte una clase Utils en la carpeta /lib
>
> Rollo /lib/utils.rb
>
> class Utils
>   def self.is_valid( string )
>     return string ~= /que siii/
>   end
> end
>
> La requieres en el /config/environment.rb con
>
> require 'utils'
>
> Y la usas donde quieras con
>
> Utils.is_valid( "que siii es v�lido" )
>
> Todo esto al vuelo.. seguro que hay errores.
>
> f.

Gracias por responder, e seguido los pasos o consejos que me has dado
pero me muestra unos errores por ejemplo
- si hago lo cambios que mencionas me muestra el siguiente error
undefined method `is_valid' for WEBrick::Utils:Module

- si hago lo cambios que mencionas y detengo el servidor y lo pongo a
correr otra vz el sistema no corre, vueleve a correr cuando quito esta
linea
require 'utils' de /config/environment.rb

si me puedes dar otro consejo lo agradeceria
Jhon K. (Guest)
on 2008-11-06 18:40
>
> Yo lo que hago muchas veces es, en vez de meterlo en forma de función
> independiente, lo meto como método que extiende a una clase. Por
> ejemplo, una función para sacar números con separador de miles, o una
> que permite aceptar URLs con o sin el http:// , serían así:
>
> class String
>   # Si una URL no lleva delante el http://, se lo pone
>   def pon_http
>     result = "http://#{self}".sub("http://http://", "http://")
>   end
> end
>
> class Fixnum
>   def separar_miles
>     self.to_s.gsub(/(.)(?=.{3}+$)/, %q(\1.))
>   end
> end
>
> Y se llamarían, tanto desde el modelo como desde la vista o el
> controller, de la misma forma:
>
> objeto.url.pon_http
> objeto.veces_leido.separar_miles
>
> Las extensiones de las clases las meto en lib/aplicacion.rb, y luego
> meto un
> require 'aplicacion.rb'
> en el archivo de configuración config/environment.rb
>
> s2

Gracias por responder amigos
una pregunta o duda q tengo con lo que me sugieres es que en la carpeta
lib/
no tengo un archivo llamado aplicacion.rb , un archivo con ese nombre lo
tengo el la carpeta app/controllers
Fernando G. (Guest)
on 2008-11-06 18:44
(Received via mailing list)
El día 6 de noviembre de 2008 17:40, Jhon K.
<removed_email_address@domain.invalid>
escribió:>> end
>> objeto.url.pon_http
> una pregunta o duda q tengo con lo que me sugieres es que en la carpeta
> lib/
> no tengo un archivo llamado aplicacion.rb , un archivo con ese nombre lo
> tengo el la carpeta app/controllers
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>

Haz un pequeño esfuerzo, busca por el árbol de directorios de tu proyecto
rails.

f.
Jhon K. (Guest)
on 2008-11-06 18:55
Fernando G. wrote:
> El d�a 6 de noviembre de 2008 17:40, Jhon K.
> <removed_email_address@domain.invalid>
> escribi�:>> end
>>> objeto.url.pon_http
>> una pregunta o duda q tengo con lo que me sugieres es que en la carpeta
>> lib/
>> no tengo un archivo llamado aplicacion.rb , un archivo con ese nombre lo
>> tengo el la carpeta app/controllers
>> --
>> Posted via http://www.ruby-forum.com/.
>> _______________________________________________
>> Ror-es mailing list
>> removed_email_address@domain.invalid
>> http://lists.simplelogica.net/mailman/listinfo/ror-es
>>
>
> Haz un peque�o esfuerzo, busca por el �rbol de directorios de tu proyecto
> rails.
>
> f.

e corregido algubos errores y me muestra este nuevo error

A regular expression must be supplied as the :with option of the
configuration hash

seguire probando para solucionarlo.. gracias por sus segerencias
Fernando C. (Guest)
on 2008-11-06 19:04
Jhon K. wrote:
> Fernando G. wrote:
>
> Gracias por responder, e seguido los pasos o consejos que me has dado
> pero me muestra unos errores por ejemplo
> - si hago lo cambios que mencionas me muestra el siguiente error
> undefined method `is_valid' for WEBrick::Utils:Module
>
> - si hago lo cambios que mencionas y detengo el servidor y lo pongo a
> correr otra vz el sistema no corre, vueleve a correr cuando quito esta
> linea
> require 'utils' de /config/environment.rb
>
> si me puedes dar otro consejo lo agradeceria

En vez de
require 'utils'

prueba con
require 'utils.rb'

y reinicia el servidor

s2
Fernando C. (Guest)
on 2008-11-06 19:08
Jhon K. wrote:
>
> Gracias por responder amigos
> una pregunta o duda q tengo con lo que me sugieres es que en la carpeta
> lib/
> no tengo un archivo llamado aplicacion.rb , un archivo con ese nombre lo
> tengo el la carpeta app/controllers

La carpeta lib/ es para que pongas tu librería; no necesitas que exista
ya el archivo aplicacion.rb , puedes crearlo tú mismo, o puedes crearlo
con otro nombre (kaka.rb), siempre que en la configuración metas el
require 'kaka.rb'

No confundas con app/controllers/application.rb, que es el controlador
del que heredan todos los demás... lo que metas en
app/controllers/application.rb será accesible para todos los
controllers, pero no para los modelos!!

s2
Fernando G. (Guest)
on 2008-11-06 19:11
(Received via mailing list)
Creo que se están mezclando las varias soluciones propuestas.

f.

El día 6 de noviembre de 2008 18:08, Fernando C.
Xavier N. (Guest)
on 2008-11-06 19:39
(Received via mailing list)
En general no es recomendable dos archivos con el mismo nombre en
paths donde Rails busca. En particular application.rb si solo hay uno
mejor.

El directorio lib esta en ese path. Si llamas al fichero

   lib/my_app_utils.rb

y en el defines una clase o modulo que se llame MyAppUtils no es
necesario tampoco ningun require ya que la carga automatica de
clases/modulos la encontrara.

Tener un lugar asi para utilidades "transversales" es una practica
comun.
Jhon K. (Guest)
on 2008-11-07 15:48
Fernando C. wrote:
> Jhon K. wrote:
>> Fernando G. wrote:
>>
>> Gracias por responder, e seguido los pasos o consejos que me has dado
>> pero me muestra unos errores por ejemplo
>> - si hago lo cambios que mencionas me muestra el siguiente error
>> undefined method `is_valid' for WEBrick::Utils:Module
>>
>> - si hago lo cambios que mencionas y detengo el servidor y lo pongo a
>> correr otra vz el sistema no corre, vueleve a correr cuando quito esta
>> linea
>> require 'utils' de /config/environment.rb
>>
>> si me puedes dar otro consejo lo agradeceria
>
> En vez de
> require 'utils'
>
> prueba con
> require 'utils.rb'
>
> y reinicia el servidor
>
> s

Hola amigos e estado probando su sugerencias, tengo los archivos de esta
manera
-en el environment.rb
   coloque esto require 'utils.rb'

-en el modelo
  validates_format_of :nombre, :with => Utils.is_valid(:nombre),
:message   =>"debe ser valido"

- en lib/utils.rb
  class Utils
     def self.is_valid( string )
  num_expr = /\A[
,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@\/\t\r\n\._-]*\z/
  salida = num_expr.match(string)
  return salida
    end
  end


luego de reiniciar el servidor me muestra este error
can't convert Symbol into String
cual pregunta sobre el codigo o sugerencia por favor diganme
Fernando G. (Guest)
on 2008-11-07 16:09
(Received via mailing list)
El día 7 de noviembre de 2008 14:48, Jhon K.
<removed_email_address@domain.invalid>
escribió:
>  class Utils
>     def self.is_valid( string )
>  num_expr = /\A[
> ,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@\/\t\r\n\._-]*\z/
>  salida = num_expr.match(string)
>  return salida
>    end
>  end
>

El método Regexp.match devuelve 'nil' o un objeto 'MatchData' y no
true/false como tu quieres:
http://ruby-doc.org/core/classes/Regexp.html#M001226

Puedes modificar el return
así:return not salida.nil?

O cambiar todo el método si lo que quieres es sólo saver si coincide
con la regexp o no.. y no recuperar todas las ocurrencias mejor
así:
return string ~= num_expr

y yastá..

Ah¡... un consejo de nomenclatura cambia el nombre del método de
is_valid a is_valid? que se suele usar cuando la función devuelve un
booleano.

(Ya sé que yo te lo dije mal)

Suerte
f.

f.
Jhon K. (Guest)
on 2008-11-07 16:21
Fernando G. wrote:
> El d�a 7 de noviembre de 2008 14:48, Jhon K.
> <removed_email_address@domain.invalid>
>escribi�:
>  class Utils
>>     def self.is_valid( string )
>>  num_expr = /\A[
>> ,�&%;:="(){}?�'|$#����������a-zA-Z0-9@\/\t\r\n\._-]*\z/
>>  salida = num_expr.match(string)
>>  return salida
>>    end
>>  end
>>
>
> El m�todo Regexp.match devuelve 'nil' o un objeto 'MatchData' y no
> true/false como tu quieres:
> http://ruby-doc.org/core/classes/Regexp.html#M001226
>
> Puedes modificar el return
> as�:return not salida.nil?
>
> O cambiar todo el m�todo si lo que quieres es s�lo saver si coincide
> con la regexp o no.. y no recuperar todas las ocurrencias mejor
> as�:
return string ~= num_expr
>
> y yast�..
>
> Ah�... un consejo de nomenclatura cambia el nombre del m�todo de
> is_valid a is_valid? que se suele usar cuando la funci�n devuelve un
> booleano.
>
> (Ya s� que yo te lo dije mal)
>
> Suerte
> f.
>
> f.

yo habia probado con un simple  return true o false pero me da el mismo
error
can't convert Symbol into String

otra cosa si coloco esto return string ~= num_expr
el servidor no arranca cuando quiero reiniciarlo no se si sera por el
caracter  ~ , bueno la verdad es q noc como trabaja esa instruccion
Fernando G. (Guest)
on 2008-11-07 16:26
(Received via mailing list)
El día 7 de noviembre de 2008 15:21, Jhon K.
<removed_email_address@domain.invalid>
escribió:> Fernando G. wrote:
>
> yo habia probado con un simple  return true o false pero me da el mismo
> error
> can't convert Symbol into String
>
> otra cosa si coloco esto return string ~= num_expr
> el servidor no arranca cuando quiero reiniciarlo no se si sera por el
> caracter  ~ , bueno la verdad es q noc como trabaja esa instruccion

Cagüen.. en primer lugar es al revés: =~ sorry:
http://ruby-doc.org/core/classes/String.html#M000792

En segundo lugar creo que el error está en el modelo, prueba
así:
validates_format_of :nombre, :with => Utils.is_valid( self.nombre ),
:message   =>"debe ser valido"

Suerte
f.
Fernando G. (Guest)
on 2008-11-07 16:32
(Received via mailing list)
El día 7 de noviembre de 2008 15:26, Fernando G.
<removed_email_address@domain.invalid>
escribió:>
> Cagüen.. en primer lugar es al revés: =~ sorry:
> http://ruby-doc.org/core/classes/String.html#M000792
>
> En segundo lugar creo que el error está en el modelo, prueba así:
>
> validates_format_of :nombre, :with => /\A[
,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@\/\t\r\n\._-]*\z/,
> :message   =>"debe ser valido"

O igual mejor directamente:
validates_format_of :nombre, :with =>
/\A[,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@\/\t\r\n\._-]*\z/ , :message
  =>"debe ser valido"

Es que creo que el validates_format_of requiere una expresión regular
no un booleano:

http://ar.rubyonrails.com/classes/ActiveRecord/Val...

Lo que intentas es implementar un nuevo método de validación y eso no
sé como se hace sorry.

f,
Jhon K. (Guest)
on 2008-11-07 17:09
Fernando G. wrote:
> El d�a 7 de noviembre de 2008 15:26, Fernando G.
> <removed_email_address@domain.invalid>
>escribi�:>
> Cag�en.. en primer lugar es al rev�s: =~ sorry:
>> http://ruby-doc.org/core/classes/String.html#M000792
>>
>> En segundo lugar creo que el error est� en el modelo, prueba as�:
>
>> validates_format_of :nombre, :with => /\A[
> ,�&%;:="(){}?�'|$#����������a-zA-Z0-9@\/\t\r\n\._-]*\z/,
>> :message   =>"debe ser valido"
>
> O igual mejor directamente:
> validates_format_of :nombre, :with =>
> /\A[,�&%;:="(){}?�'|$#����������a-zA-Z0-9@\/\t\r\n\._-]*\z/ , 
:message
>   =>"debe ser valido"
>
> Es que creo que el validates_format_of requiere una expresi�n regular
> no un booleano:
>
> http://ar.rubyonrails.com/classes/ActiveRecord/Val...
>
> Lo que intentas es implementar un nuevo m�todo de validaci�n y eso no
> s� como se hace sorry.
>
> f,

Tienes razon pana con respecto a q requiere una expresion y no un
booleano, yo queria declarar una variable global q contenga la cadena
con la expresion pero me da error, pero con tu ayuda e solucionado de
esta manera
-en el environment.rb
   coloque esto require 'utils.rb'

-en el modelo
  validates_format_of :nombre, :with => Utils.is_valid(:nombre),
:message   =>"debe ser valido"

- en lib/utils.rb
  class Utils
     def self.is_valid( string )
        return num_expr = /\A[
,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
    end
  end

de esta forma retorno la expresion, y si tengo que modificar la
expresion solo la modifico en este archivo y no tengo q ir a todos los
archivos actualizando la expresion.
Hasta ahora me funciona, cualquier cosa te avisare si la actualizo a
hago alguna modificacion.

Muchas gracias por la ayuda, que bueno es este foro
Sergio Cambra .:: entreCables - Symbol Servicios (Guest)
on 2008-11-07 17:24
(Received via mailing list)
El Friday 07 November 2008 16:09:36 Jhon K. escribió:
> >> validates_format_of :nombre, :with => /\A[
> > Es que creo que el validates_format_of requiere una expresi�n regular
> Tienes razon pana con respecto a q requiere una expresion y no un
>
> archivos actualizando la expresion.
> Hasta ahora me funciona, cualquier cosa te avisare si la actualizo a
> hago alguna modificacion.
>
> Muchas gracias por la ayuda, que bueno es este foro

para eso en vez de usar un metodo usa una constante, por ejemplo cambia
lib/utils.rb:
module Utils
  CONSTANTE =  /\A[,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
end
o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
Yo lo
veo mejor así si esa expresion regular solo se usa para ese modelo.

--
Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
Jhon K. (Guest)
on 2008-11-07 17:38
Sergio Cambra .:: entreCables - Symbol Servicios
  wrote:
> El Friday 07 November 2008 16:09:36 Jhon K. escribió:
>> >> validates_format_of :nombre, :with => /\A[
>> > Es que creo que el validates_format_of requiere una expresi�n regular
>> Tienes razon pana con respecto a q requiere una expresion y no un
>>
>> archivos actualizando la expresion.
>> Hasta ahora me funciona, cualquier cosa te avisare si la actualizo a
>> hago alguna modificacion.
>>
>> Muchas gracias por la ayuda, que bueno es este foro
>
> para eso en vez de usar un metodo usa una constante, por ejemplo cambia
> lib/utils.rb:
> module Utils
>   CONSTANTE =  /\A[,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
> end
> o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
> Yo lo
> veo mejor así si esa expresion regular solo se usa para ese modelo.
>
> --
> Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
> Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
> T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid

La uso para todos los modelos mas de 50 archivos por eso quiero que sea
algo global y que modifique en un solo archivo
Sergio Cambra .:: entreCables - Symbol Servicios (Guest)
on 2008-11-07 17:55
(Received via mailing list)
El Friday 07 November 2008 16:38:53 Jhon K. escribió:
> >> archivos actualizando la expresion.
> > o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
> > Yo lo
> > veo mejor así si esa expresion regular solo se usa para ese modelo.
> >
> > --
> > Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
> > Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
> > T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
>
> La uso para todos los modelos mas de 50 archivos por eso quiero que sea
> algo global y que modifique en un solo archivo

Entonces puedes ponerla en lib, dentro del modulo Utils, como una
constante.

--
Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
Jhon K. (Guest)
on 2008-11-07 18:03
Sergio Cambra .:: entreCables - Symbol Servicios
  wrote:
> El Friday 07 November 2008 16:38:53 Jhon K. escribió:
>> >> archivos actualizando la expresion.
>> > o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
>> > Yo lo
>> > veo mejor así si esa expresion regular solo se usa para ese modelo.
>> >
>> > --
>> > Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
>> > Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
>> > T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
>>
>> La uso para todos los modelos mas de 50 archivos por eso quiero que sea
>> algo global y que modifique en un solo archivo
>
> Entonces puedes ponerla en lib, dentro del modulo Utils, como una
> constante.
>
> --
> Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
> Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
> T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid

eso se me olvido preguntarte te refieres a esto

module Utils
>   CONSTANTE =  /\A[,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
> end


esto seria loq va en el archivo lib/utils.rb en lugar de la funcion?

en lugar de esto
class Utils
  def self.is_valid(string)
    return num_expr = /\A[ ,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
  end
end

colocaria esto
class Utils
  module Utils
   CONSTANTE =  /\A[,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/
  end
end

??
Francesc E. (Guest)
on 2008-11-07 19:27
(Received via mailing list)
Modelo ...

    # app/models/user.rb
    class User < ActiveRecord::Base

      validates_format_of :email, :with => EMAIL_FORMAT

    end

Donde EMAIL_FORMAT es una expresion regular que la hemos definido en
un initializer.

    # config/initializers/defaults.rb
    EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

Creo que así queda más limpio. No?


2008/11/7 Jhon K. <removed_email_address@domain.invalid>:

...
Guillermo Álvarez Fernández (Guest)
on 2008-11-08 21:32
(Received via mailing list)
El 07/11/2008, a las 18:27, Francesc E.
escribió:
> un initializer.
>
>    # config/initializers/defaults.rb
>    EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
>


Cuidado con esa expresión regular, que es muy peligrosa y ya la he
visto en varias aplicaciones.

El siguiente texto es un email válido para esa misma
expresión > bad_text = <<-END
 > removed_email_address@domain.invalid
 > <script>location.href = "http://mypersonalphisingandsexweb.com/
web"</script>
 > END
 >
 > bad_text =~ EMAIL_FORMAT
0

Como vemos la expresión es váldia para el texto anterior, ya que es
verdad que le estamos diciendo si existe alguna linea que empiece y
termine con una dirección de correo electrónico. El resto de lineas da
igual.
Lo correcto, salvo que me equivoque, sería substituir ^(principio de
linea) por \A(principio de texto) y $(final de linea) por \z(fin de
texto)

>    EMAIL_FORMAT = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i

Yo suelo usar esta: La anterior, ve validaría cosas como
"Guillermo.Áremoved_email_address@domain.invalid
" al permitirme incluir tildes en el user del email.
/\A([\w\.\-\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i


Un Saludo
Francesc E. (Guest)
on 2008-11-08 21:43
(Received via mailing list)
Ostras, no se me habia ocurrido que alguien pudier hacer eso. ;)

La verdad es que de momento con esa expresion regular nunca he visto
nada raro en la base de datos, sobretodo cuando mandas un email para
validar la direccion, pero es bueno saberlo.

On 08/11/2008, at 20:32, Guillermo Álvarez Fernández
<guillermo@cientifico.n
Jhon K. (Guest)
on 2008-11-10 15:04
Esta es la que estoy utilizando
/\A[ ,º&%;:="(){}?¿'|$#a-zA-Z0-9@\/\t\r\n\._-]*\z/

y tienes razon, la utilizo de esta manera por que asi no me da problemas
Francesc E. (Guest)
on 2008-11-10 15:14
(Received via mailing list)
Si, funciona correctamente aunque le hagan marranadas, cuando tenga un
momento subo unos tests.

On 10/11/2008, at 14:04, Jhon K. <removed_email_address@domain.invalid>
Jhon K. (Guest)
on 2008-11-10 15:32
Francesc E. wrote:
> Modelo ...
>
>     # app/models/user.rb
>     class User < ActiveRecord::Base
>
>       validates_format_of :email, :with => EMAIL_FORMAT
>
>     end
>
> Donde EMAIL_FORMAT es una expresion regular que la hemos definido en
> un initializer.
>
>     # config/initializers/defaults.rb
>     EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
>
> Creo que así queda más limpio. No?
>
>
> 2008/11/7 Jhon K. <removed_email_address@domain.invalid>:
>
> ...

en mi proyecto tengo una carpeta llamada config pero en ella no tengo
una carpeta llamada initializers por lo tanto tampo el archivo
defaults.rb

Deberias estar ahi a los creo qpara probar lo q me estas diciendo?
Francesc E. (Guest)
on 2008-11-10 15:38
(Received via mailing list)
A partir de Rails 2.0 hay una carpeta llamada initializers donde hay
varios archivos. Cualquier cosa que metas alli se cargará
automáticamente cuando Rails arranque.

Si no lo tienes, puede ser porque todavia este ls en Rails 1.x o
porque la hayas borrado. Siempre puedes meter un require en el fichero
'environment.rb'.

On 10/11/2008, at 14:32, Jhon K. <removed_email_address@domain.invalid>
Jhon K. (Guest)
on 2008-11-10 15:46
Francesc E. wrote:
> A partir de Rails 2.0 hay una carpeta llamada initializers donde hay
> varios archivos. Cualquier cosa que metas alli se cargará
> automáticamente cuando Rails arranque.
>
> Si no lo tienes, puede ser porque todavia este ls en Rails 1.x o
> porque la hayas borrado. Siempre puedes meter un require en el fichero
> 'environment.rb'.
>
> On 10/11/2008, at 14:32, Jhon K. <removed_email_address@domain.invalid>

Si estoy utilizando la version 1.2.6 por requirimientos que me pidieron,
entoncs por eso no tengo esa carpeta y archivos, ya habia intentado
hacerlo en el
environment.rb de esat manera por ejemplo:

ENV['cadena_validacion'] ||= /\A[
,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@\/\t\r\n\._-]*\z/

pero al reiniciar el servidor no arranca, por esto solucione de la
manera que ya explique antes y me a funcionado pero estoy de acuerdo
contigo con una constante  queda más limpio.
Francesc E. (Guest)
on 2008-11-10 15:57
(Received via mailing list)
Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. <removed_email_address@domain.invalid>
Jhon K. (Guest)
on 2008-11-10 16:29
Francesc E. wrote:
> Al menos una constante da un warning si la modificas en algun sitio de
> tu aplicación. Lo de meterlo como variable de entorno no lo habia
> visto antes.
>
> On 10/11/2008, at 14:46, Jhon K. <removed_email_address@domain.invalid>

Gracias e aclarado muchas dudas
Jhon K. (Guest)
on 2008-11-10 18:11
Francesc E. wrote:
> Al menos una constante da un warning si la modificas en algun sitio de
> tu aplicación. Lo de meterlo como variable de entorno no lo habia
> visto antes.
>
> On 10/11/2008, at 14:46, Jhon K. <removed_email_address@domain.invalid>

tengo una pregunta ,con lo que me has sugerido y con la solucion que yo
e encontrado, tienes alguna idea de por que si coloco las letras con
acentos la expresion no las validas, por ejemplo áÁ ...etc? pero si la
coloco de una vz en el modelo lo valida corectamente
Jhon K. (Guest)
on 2008-11-11 16:31
Francesc E. wrote:
> Al menos una constante da un warning si la modificas en algun sitio de
> tu aplicación. Lo de meterlo como variable de entorno no lo habia
> visto antes.
>
> On 10/11/2008, at 14:46, Jhon K. <removed_email_address@domain.invalid>

tengo una pregunta ,con lo que me has sugerido y con la solucion que yo
e encontrado, tienes alguna idea de por que si coloco las letras con
acentos la expresion no las validas, por ejemplo áÁ ...etc? pero si la
coloco de una vz en el modelo lo valida corectamente
Jhon K. (Guest)
on 2008-11-17 18:21
Francesc E. wrote:
> Al menos una constante da un warning si la modificas en algun sitio de
> tu aplicación. Lo de meterlo como variable de entorno no lo habia
> visto antes.
>
> On 10/11/2008, at 14:46, Jhon K. <removed_email_address@domain.invalid>

Ya solucione el problema, con el que tu y otros compa-eros me ayudaron
El problemas era por el encoding del fichero
los q no tenian problemas eran UTF-8 y los q daban error eran ANSI
lo que hic fue cambiar el encoding a UTF-8  y ya puedo tener mi
expresion en una variable global en el environment.rb

Gracias.
This topic is locked and can not be replied to.