Comment puis-je modifier un fichier * .gem existant? Je souhaite modifier un Rakefile dans une gemme afin qu'il puisse être compilé sur Windows.
Vous pouvez gem unpack
, ajoutez votre modification, puis modifiez le gemspec si nécessaire et reconstruisez-le:
Téléchargez son code source dans un dossier séparé (peut-être depuis github). Modifiez ensuite votre Gemfile pour pointer directement vers la source afin de pouvoir l'éditer et tester vos modifications directement.
Par exemple, disons que vous souhaitez éditer la gemme secure_headers et que vous l'avez clonée dans ~/workspace/secureheaders. Ensuite, vous pouvez utiliser les éléments suivants dans votre Gemfile:
gem 'secure_headers', :path => "~/workspace/secureheaders"
Ensuite, modifiez simplement les fichiers source à l'intérieur de l'arborescence source et vous devriez pouvoir voir vos changements appliqués directement.
Les nouvelles versions de bundler vous permettent de le faire avec la commande suivante:
bundle open gem_to_edit
Cela ouvrira le code gem dans votre éditeur de texte par défaut.
(Astuce: si vous êtes sous Mac OSX/Linux, vous pouvez spécifier votre éditeur de texte par défaut en changeant la variable $ EDITOR. Dites que vous êtes sur bash, vous pouvez simplement ouvrir votre ~/.bash_profile
et ajouter: export EDITOR='subl -w'
pour configurer Sublime Text comme éditeur par défaut)
Peut-être qu'une façon plus acceptable et conviviale de faire cela serait de vérifier si la source de la gemme est disponible sur quelque chose comme github. Ensuite, créez un fork du code gem, apportez vos modifications et envoyez une demande d'extraction. Il y a de fortes chances que quelqu'un d'autre veuille aussi cette fonctionnalité et vous serez annoncé pour votre contribution.
Si vous manquez une spécification de gemme pour la gemme, extrayez-la avec cette commande:
gem spec my_gem --Ruby > my_gem.gemspec
Bien sûr, en remplaçant my_gem par le nom de gemme approprié. Modifiez le fichier résultant pour l'adapter (dans un exemple, j'ai dû supprimer une ligne qui a provoqué une erreur), et vous devriez être prêt à partir.