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.
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-14 14: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
2fd0206c71a1b22a9cc6293f38537461?d=identicon&s=25 Cyril Mougel (shingara)
on 2009-05-14 15: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 Mougel
http://blog.shingara.fr
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-14 15: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
53d6845ee2656b1ef581523da50834b8?d=identicon&s=25 Jean-Philippe Moal (Guest)
on 2009-05-14 18: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.
64b0ac2aff80ad5677b6611628f04d92?d=identicon&s=25 Julien Reitzel (Guest)
on 2009-05-14 18: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.
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-15 10: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...
79b719d7f060027f31511f43f030e5c7?d=identicon&s=25 Tony Chauveau (kusanar)
on 2009-05-15 10: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...
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-15 10: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
64b0ac2aff80ad5677b6611628f04d92?d=identicon&s=25 Julien Reitzel (Guest)
on 2009-05-19 18: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é.
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-20 09: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 ?
Be1e3ee645d23c95ba650c21bc885927?d=identicon&s=25 Fabien Jakimowicz (Guest)
on 2009-05-20 10:50
(Received via mailing list)
2009/5/20 Babiben ***** <list-incoming@andreas-s.net>

>
> 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
79b719d7f060027f31511f43f030e5c7?d=identicon&s=25 Tony Chauveau (kusanar)
on 2009-05-20 10: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
B1ad30497d30c983b8a9f4c6cf6fd509?d=identicon&s=25 ben ******* (babiben)
on 2009-05-20 12: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...
Be1e3ee645d23c95ba650c21bc885927?d=identicon&s=25 Fabien Jakimowicz (Guest)
on 2009-05-20 13:01
(Received via mailing list)
On 20 mai 2009, at 12:22, Babiben ***** <list-incoming@andreas-s.net>
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 ...
7cf8ed5c3a88e5cee2ce136fb3158cea?d=identicon&s=25 Romain Goyet (Guest)
on 2009-06-07 19:37
(Received via mailing list)
le "cat" ne sert à rien ^^echo "map.resource xxx" >> route.rb

 - Romain

2009/5/14 Julien Reitzel <julien@reitzel.info>
This topic is locked and can not be replied to.