Rails & "rename convention"

Eil,

vedendo la mail di Cluter V. sul rinominare una app rails m’
venuto in mente di chiedere di nuovo se qualcuno si fatto una
gem/rake task/script awk per rinominare qualcosa dentro una app rails
in modo furbo.

Ovvero, una cosa tipo

rails rename foo bar

che faccia

.1 un rename di file e directory “convenzionali”

app/models/foo.rb → bar.rb
app/controllers/foos_controller.rb → bars.rb
app/views/foos/ → /views/bars/
test/unit…

.2 un replace dentro il resto dei file delle occorrenze di Foo,
‘foo/bar’, FooController, @foo etc

.3 una bella migrazioncina che rinomini la tabella foos in bars e i
riferimenti foo_id in bar_id

Premesso che nn funzioner nel 100% dei casi etc etc… io avevo uno
script che faceva una parte del lavoro,
ed era comodo. Ma era due hard-drive-non-backuppati fa …


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com

C’è GitHub - galkn/Rename: Plugin for easily renaming your Rails3 app che non ho mai provato perché
normalmente uso 2 script one-liner fatti con egrep, ma che adesso non ho
a portata di mano

Sulla CLI propongo:

  • rails rename old new
    Che fa vedere file e riga di dove verrà la sostituzione

  • rails rename old new -f
    Che procede effettivamente

Luigi

grep -lr -e ‘OldApp:’ * | xargs sed -i ‘s/OldApp:/NewApp:/g’

Trovato, “questo trenino” di script per me ha funzionato (su Linux), su
mac la seconda parte non va e ottengo

sed: 1: “Rakefile”: invalid command code R

Luigi

Grazie, confermo questo funziona anche su mac.

Luigi

Duilio R. wrote in post #1059394:

grep -lr -e ‘OldApp:’ * | xargs sed -i ‘’ ‘s/OldApp:/NewApp:/g’

Maurizio

My profile https://plus.google.com/100973969013103507046/about

2012/5/3 Luigi M. - grigio.org [email protected]

Che procede effettivamente
e

  • rails rename old new -i
    che procede interattivamente (mostrando ogni occorrenza la scelta di
    conferma/skip) :wink:

Luigi M. - grigio.org wrote in post #1059392:

grep -lr -e ‘OldApp:’ * | xargs sed -i ‘s/OldApp:/NewApp:/g’

Trovato, “questo trenino” di script per me ha funzionato (su Linux), su
mac la seconda parte non va e ottengo

sed: 1: “Rakefile”: invalid command code R

Luigi

Ciao Luigi,
su Mac quando usi sed devi specificare l’estensione per i backup.

Ti incollo la risposta che ho dato su stackoverwlow a una domanda
simile:

If you use the -i option you need to provide an extension for your
backups.

If you have:

File1.txt
File2.cfg
The command:

sed -i ‘.original’ ‘s/old_link/new_link/g’ *
create 2 backup files like:

File1.txt.original
File2.cfg.original
You can use

sed -i ‘’ ‘s/old_link/new_link/g’ *
to ignore backups.

Quindi il comando da usare è:

grep -lr -e ‘OldApp:’ * | xargs sed -i ‘’ ‘s/OldApp:/NewApp:/g’


Duilio R.
http://sinetris.info

Ho creato una gem che può essere integrata facilmente in qualsiasi app e
si usa tramite rake. Testate, forkate, aggiungete pure se volete
rinominare modelli e/o migration.

Per rinominare un progetto basta aggiungere gem ‘rails_rename’ al
Gemfile, bundle install ed eseguire:

rake rails:rename[NewAppName]

Ciao
Luigi