Come aggiungere un metodo alla classe String?


#1

Salve a tutti

Vorrei aggiungere un metodo “mio_metodo” alla classe String, in modo da
poter fare qualcosa tipo:

str = “Mia Stringa”.mio_metodo

Perciò nel controller ho messo:

class String
def mio_metodo

end
end

Ma non funziona.

Come si fa?

Grazie a tutti.


#2

On Mon, Nov 17, 2008 at 8:20 AM, Sam P. removed_email_address@domain.invalid wrote:

Salve a tutti

Vorrei aggiungere un metodo “mio_metodo” alla classe String, in modo da
poter fare qualcosa tipo:

[…]

Ma non funziona.

Come si fa?

devi ‘riaprire’ la classe. Dai un’occhiata a questo:
http://www.juixe.com/techknow/index.php/2007/01/17/reopening-ruby-classes-2/

michele.


#3

Sam P. wrote:

Salve a tutti

Vorrei aggiungere un metodo “mio_metodo” alla classe String, in modo da
poter fare qualcosa tipo:

str = “Mia Stringa”.mio_metodo

Perciò nel controller ho messo:

nel controller? Quindi vuoi farlo in Ruby on Rails… sarebbe stato
meglio specificarlo :wink:

class String
def mio_metodo

end
end

Ma non funziona.

Come si fa?

prova ad inserirlo nel file environment.rb (andrebbe messo in una
libreria, ma così è il modo più semplice)

Grazie a tutti.

Prego
Duilio R.


#4

Duilio R. wrote:
-cut-

nel controller? Quindi vuoi farlo in Ruby on Rails… sarebbe stato
meglio specificarlo :wink:
-cut-
prova ad inserirlo nel file environment.rb (andrebbe messo in una
libreria, ma così è il modo più semplice)

Non ho capito bene…

Forse vuoi dire che avendolo messo solo nel controller non funziona in
tutto il progetto?

Si, sono d’accordo, ma potrei metterlo nel controller application, no?

Grazie


#5

2008/11/17 Sam P. removed_email_address@domain.invalid:

Duilio R. wrote:

prova ad inserirlo nel file environment.rb (andrebbe messo in una
libreria, ma così è il modo più semplice)

Non ho capito bene…

Forse vuoi dire che avendolo messo solo nel controller non funziona in
tutto il progetto?

Si, sono d’accordo, ma potrei metterlo nel controller application, no?

se vuoi che sia disponibile ovunque, cioè controller, model, etc.,
allora devi metterlo nella configurazione di rails.

io di solito piazzo queste cose in /lib, dopo di che in
environments.rb faccio require ‘il_mio_file’.


#6

Michele F. wrote:
-cut-

devi ‘riaprire’ la classe. Dai un’occhiata a questo:
http://www.juixe.com/techknow/index.php/2007/01/17/reopening-ruby-classes-2/

michele.

OK, funziona, grazie!

Nel controller ho messo:

String.class_eval do
def mio_metodo

end
end


#7

lib/core_ext/string.rb
class String
def method
# implementation here
end
end

config/initializers/core_ext.rb
Dir["#{RAILS_ROOT}/lib/core_ext/*.rb"].each {|file| require file}

Luca