Forum: Rails France Insertion de code dans un fichier ruby (pas a la fin)

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.
ben *. (Guest)
on 2009-05-14 16:05
Bonjour,

J'ai un problème avec l'insertion de texte dans un fichier ruby. J'ai
besoin d'intégrer une ligne dans mon fichier "routes.rb" afin de lui
ajouter des relations (has_many, belongs...) ou autre.

Au début, j'utilisais un template
(http://www.bounga.org/post/2009/01/30/Rails-Templates) et je n'avais
qu'à faire un => route "map.root :controller => 'news'" par exemple.

Maintenant pour diverses raison, je n'en utilise plus et je souhaiterais
pouvoir ouvrir mon fichier ruby et insérer une ligne contenant du code.

J'ai testé plusieurs solutions trouvées sur le forum mais en vain!
Comment dois-je procéder ?

Merci
Cyril M. (Guest)
on 2009-05-14 17:00
(Received via mailing list)
Le 14 mai 09 à 14:05, Encore lui a écrit :

>
> Maintenant pour diverses raison, je n'en utilise plus et je
> souhaiterais
> pouvoir ouvrir mon fichier ruby et insérer une ligne contenant du
> code.
>
> J'ai testé plusieurs solutions trouvées sur le forum mais en vain!
> Comment dois-je procéder ?

vim route.rb
i
map.resource xxx

--
Cyril M.
http://blog.shingara.fr
ben *. (Guest)
on 2009-05-14 17:32
En fait, j'ai un long script de génération de mon application rails qui
contient plusieurs commandes "système". Dans ce script, j'ai besoin
d'intégrer une commande qui va modifier le contenu d'un fichier ruby et
lui ajouter du texte. Par exemple, insérer une ligne après la première
et placer mon texte. A la fin, les modifs sont enregistrées et d'autres
commandes vont être executées par la suite.


Structure exemple :

rm -r fichier
...
#traitement des modifications d'un fichier
...
mkdir rep
Jean-Philippe M. (Guest)
on 2009-05-14 20:44
(Received via mailing list)
Encore lui a écrit :
> rm -r fichier
> ...
> #traitement des modifications d'un fichier
> ...
> mkdir rep
>
Il y a les templates rails pour ca.
Julien R. (Guest)
on 2009-05-14 20:45
(Received via mailing list)
Encore lui a écrit :
> rm -r fichier
> ...
> #traitement des modifications d'un fichier
> ...
> mkdir rep
>

Si c'est simplement pour ajouter le texte à la fin :

echo "map.resource xxx" | cat >> route.rb


--
Julien.
ben *. (Guest)
on 2009-05-15 12:01
Oui je sais qu'il y a des templates merci pour l'info mais je ne
souhaite pas les utiliser dans ce cas la.

Sinon, je ne veux pas ajouter le texte à la fin mais au centre ou à la
seconde ligne par exemple en insérant un nouveau texte...
Tony C. (Guest)
on 2009-05-15 12:13
Encore lui wrote:
> Oui je sais qu'il y a des templates merci pour l'info mais je ne
> souhaite pas les utiliser dans ce cas la.
>
> Sinon, je ne veux pas ajouter le texte à la fin mais au centre ou à la
> seconde ligne par exemple en insérant un nouveau texte...

Une petite fonction bien utile :

def file_inject(file_name, sentinel, string, before_after=:after)
  gsub_file file_name, /(#{Regexp.escape(sentinel)})/mi do |match|
    if :after == before_after
      "#{match}\n#{string}"
    else
      "#{string}\n#{match}"
    end
  end
end

Source :
http://github.com/pixels-and-bits/strappy/blob/1d0...
ben *. (Guest)
on 2009-05-15 12:33
C'est normal qu'il ne trouve pas la méthode 'gsub_file' ?

./essai.rb:4:in `file_inject': undefined method `gsub_file' for
main:Object (NoMethodError)
        from ./essai.rb:13
Julien R. (Guest)
on 2009-05-19 20:54
(Received via mailing list)
Encore lui a écrit :
> Sinon, je ne veux pas ajouter le texte à la fin mais au centre ou à la
> seconde ligne par exemple en insérant un nouveau texte...
>

En plus c'était dans le sujet.. Désolé.
ben *. (Guest)
on 2009-05-20 11:58
Sérieusement, dans ce magnifique langage qu'est ruby, il n'y a pas moyen
de faire une simple ouverture de fichier et d'y integrer du texte non à
la fin du code mais au coeur du fichier ou à la seconde ligne ou en
inserant une ligne ?
Fabien J. (Guest)
on 2009-05-20 12:50
(Received via mailing list)
2009/5/20 Babiben ***** <removed_email_address@domain.invalid>

>
> Sérieusement, dans ce magnifique langage qu'est ruby, il n'y a pas moyen
> de faire une simple ouverture de fichier et d'y integrer du texte non à
> la fin du code mais au coeur du fichier ou à la seconde ligne ou en
> inserant une ligne ?
>
>
C'est disponible dans tous les langages, ou presque : open, seek, write
...

--
http://fabien.jakimowicz.com
Tony C. (Guest)
on 2009-05-20 12:52
Babiben ***** wrote:
> Sérieusement, dans ce magnifique langage qu'est ruby, il n'y a pas moyen
> de faire une simple ouverture de fichier et d'y integrer du texte non à
> la fin du code mais au coeur du fichier ou à la seconde ligne ou en
> inserant une ligne ?

Je pensais que tu aurais cherché un peu...
La fonction est juste au dessus. Si tu bloques sur le gsub_file c'est
que tu n'as même pas pris la peine d'aller voir ce dont il s'agit.

C'est pas uniquement du copier/coller, il faut au minimum lire et
comprendre pour adapter a ton besoin.

Mais bon...pour ton information, une simple recherche sur gsub_file sur
ton ami google t'aurais indiqué qu'il s'agit d'une méthode de
Rails::Generator::Commands::Base.
2 solutions :
- l'inclure pour pouvoir l'utiliser
- la refaire à l'identique
ben *. (Guest)
on 2009-05-20 14:22
Contrairement aux apparences, j'ai bien fait des recherches sur la
fonction gsub_file. N'ayant pas compris une partie des arguments à
entrer et étant très blond, j'ai décidé de me pencher sur une autre
solution et rechercher comme dans la plupart des langages une fonction
seek...
Fabien J. (Guest)
on 2009-05-20 15:01
(Received via mailing list)
On 20 mai 2009, at 12:22, Babiben ***** <removed_email_address@domain.invalid>
wrote:

>
> Contrairement aux apparences, j'ai bien fait des recherches sur la
> fonction gsub_file. N'ayant pas compris une partie des arguments à
> entrer et étant très blond, j'ai décidé de me pencher sur une aut
> re
> solution et rechercher comme dans la plupart des langages une fonction
> seek...
>

Google : ruby+file+open+seek premier lien blindé d'exemples

Sinon RubyDoc ...
Romain Goyet (Guest)
on 2009-06-07 21:37
(Received via mailing list)
le "cat" ne sert à rien ^^echo "map.resource xxx" >> route.rb

 - Romain

2009/5/14 Julien R. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.