Documentation
Astuces
|
if objet.nil?
puts "texte #{variable} " + variable.to_s
exit
if objet.respond_to?("methode")
variable = 'V'
puts "#{variable} \n"
puts '#{variable} \n'
|
Boucle each
|
tableau = ["A", "B", "C"]
tableau.each do |lettre|
puts "#{lettre}"
end
|
Boucle for
|
for i in 0..5
puts i.to_s
end
|
Manipulation de chaînes de caractères
|
maChaine = "un,deux.trois"
puts maChaine.gsub(/(,|\.)/, " ")
sousChaine = maChaine[4..maChaine.length]
if maChaine.include? 'deux'
<kode lang=ruby>
[http://ruby-doc.org/core/classes/String.html String]
= Méthodes =
<kode lang=ruby>
def methode(parametreDefaut = "defaut")
puts "parametre : #{parametre}"
end
methode("parametre")
methode "parametre"
methode()
|
Variables globales
|
$variableGlobale = "VG"
def methode()
puts "#{$variableGlobale}"
end
|
Fichiers et dossiers
Lecture et écriture dans les fichiers
|
File.foreach('fichier.txt') do |line|
puts line
end
contenu = File.read('fichier.txt')
puts contenu
fichier = File.open("fichier.txt", 'w')
fichier.write("texte")
<kode lang=ruby>
[http://ruby-doc.org/core/classes/File.html File]<br>
[http://ruby-doc.org/core/classes/IO.html IO]
== Fichiers ==
<kode lang=ruby>
File.basename('/dossier/fichier.txt')
if File.exist?('fichier.txt')
File.delete 'fichier.txt'
FileUtils.mv('fichier.txt', 'fichier ou dossier')
FileUtils.cp('fichier.txt', 'fichier ou dossier')
|
File
Dossiers
|
require 'fileutils'
Dir.mkdir 'Nom du répertoire'
Dir.pwd
Dir.chdir("Dossier")
if File.directory?('dossier')
FileUtils.rm_rf 'dossier'
FileUtils.cp_r('source', 'destination', :verbose => true)
pathToAllFiles=File.join("Dossier", "*")
files = Dir[pathToAllFiles]
lyricFiles = files.select { |file| /(.+\.lrc)$/ =~ file }
|
Dir
FileUtils
Classe Find
|
Find.find('chemin') do |file|
puts file
end
|
Arguments du script
|
ARGV
ARGV[0]
ARGV.size
|
If..else, unless
|
if var == 1
puts "1"
elsif var == 2
puts "2"
else
puts "3"
end
debug = 1
print "debug\n" if debug
unless var == 1
puts "1"
else
puts "2"
end
|
Lancer un exécutable
method
|
stdout
|
stderr
|
stdin
|
real-time
|
comments
|
process id
|
exit code
|
exec("command") |
no |
no |
no |
yes
|
Simple, non-interactive invocation; replaces current process with new process (in other words, any Ruby code after the exec will not be executed!)
|
NA |
NA
|
system("command") |
no |
no |
no |
yes
|
Simple, non-interactive invocation; waits till execution is done; outputs both stdout and stderr as normal
|
NA |
$?.exitstatus
|
result = `command` |
yes |
no, unless you do 2>&1 |
no
|
Buffered - output is returned only when the command has finished/exited
|
Same, only it capture the output of that process.
|
NA |
$?.exitstatus
|
pipe = IO.popen("command", "r") |
yes |
no, unless you do 2>&1 |
no
|
Yes - can even read a char or a line at a time, if you want
|
Interactive control of other process (write to its stdin, and then read from its stdout)
|
pipe.pid |
$?.exitstatus
|
pipe = IO.popen("command", "w+") |
yes |
no, unless you do 2>&1 |
yes |
"" |
"" |
"" |
""
|
Open3.popen3("command") |
yes |
yes |
yes |
yes |
Very similar to IO.popen.
|
|
`exécutable`
`exécutable &> sortie.txt`
resultat = system 'exécutable'
sortie = %x[exécutable]
|
Fork
Sous Windows il faut préalablement installer la bibliothèque Win32Utils. (compatible ruby 1.8.x)
(gem install win32-process)
|
require 'rubygems'
require 'win32/process'
`exécutable` if Process.fork.nil?
|
Hash (Dictionnaire)
|
dictionnaire = { clé => valeur }
puts dictionnaire[clé]
dictionnaire.default = valeur
if dictionnaire.key?(clé)
|
Expressions rationnelles
|
regex = Regexp.new('expression rationnelle')
if regex.match("string")
if "string".match(regex)
if "string".match =~ /expression rationnelle/
if /expression rationnelle/.match("string")
if /expression rationnelle/i =~ "string"
regex.source.to_s
puts $&
|
[1]
[2]
[3]
Test en ligne
Classes
|
class MaClasse
attr_accessor :texte
def initialize(texte = "...")
@texte = texte
end
def affiche
puts "#{@texte}"
end
end
maClasse = MaClasse.new
maClasse = MaClasse.new "MonTexte"
maClasse.texte = "Nouveau texte"
puts "attribut texte : #{maClasse.texte}"
maClasse.affiche
|
Ftp
|
require 'net/ftp'
Net::FTP.open('adresse ftp', 'identifiant', 'mot de passe') do |ftp|
ftp.debug_mode=true
ftp.passive=true
ftp.chdir('dossier')
ftp.putbinaryfile('fichier local', 'nom du fichier distant')
ftp.close
end
ftp = Net::FTP.new'adresse ftp', 'identifiant', 'mot de passe')
ftp.puttextfile('fichier local', 'nom du fichier distant')
ftp.close
|
[4]
Permet d'afficher des interfaces graphiques. Installer libtcltk-ruby
|
require 'tk'
root = TkRoot.new { title "Titre" }
TkLabel.new(root) do
text 'Message'
pack { padx 150 ; pady 15; side 'left' }
end
Tk.mainloop
|
Ruby Console vs Ruby Window
Il existe 2 interpréteurs ruby :
- ruby.exe affiche la console
- rubyw.exe lance un script ruby sans la console
Installer highline
|
require 'rubygems'
require 'highline/import'
choose do |menu|
menu.prompt = "Votre choix > "
menu.choice(:'Bonjour') { say("Bonjour!") }
menu.choice(:'Quitter') { say("Au revoir!") }
end
|
REXML
Outils de parsing XML inclut dans l'installation de Ruby depuis la version 1.8.
|
require 'rexml/document'
include REXML
file = File.open('fichier.xml')
doc = Document.new(file)
file.close()
puts XPath.first(doc, '/Noeud1/Noeud2/text()' )
doc.root.elements['Noeud2'].text = "NouveauTexte"
formatter = REXML::Formatters::Default.new
File.open('fichier.xml', 'w') do |newFile|
formatter.write(doc, newFile)
end
<kode lang=ruby>
[http://www.germane-software.com/software/XML/rexml/doc]
= Script Nautilus =
La sortie standard est redirigée vers {{boxx|~/.xsession-errors}}
<kode lang=ruby>
require 'tk'
ENV['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'].split("\n").each do |path|
...
end
|
Installation
Archlinux
|
sudo pacman -S ruby
|
Per-user
~/.bashrc
|
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
|
 |
gem installées dans ~/.gem/ruby/ |
System wide
/etc/gemrc
|
gem: --no-user-install
|
 |
gem installées dans /usr/lib/ruby/gems/ |
Ruby installer
Installation des exécutables de base pour Ruby.
Version 1.9.1 n'est pas compatible avec la Gem win32-process.
Version 1.8.7 OK.
One-click installer
Seulement disponible pour la version 1.8.6
Binaire
 |
Déconseillé. |
- Installer RubyGems : télécharger et dé-zipper l'archive
- Exécuter
ruby setup.rb
|
gem search REGEX
gem install paquet
gem uninstall paquet
gem install -l fichier.gem
gem list
gem update
|
IronRuby
Projet permettant d'utiliser le Framework .NET dans les script Ruby, mais aussi d'intégrer des script Ruby dans le code .NET.
Pour utiliser une version de ruby préalablement installée, modifier les chemins de la balise <options><set> dans le fichier « ir.exe.config ».
WinForm
|
require 'mscorlib'
require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089'
require 'System.Drawing, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'
require 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll'
Application = System::Windows::Forms::Application
Form = System::Windows::Forms::Form
MessageBox = System::Windows::Forms::MessageBox
Button = System::Windows::Forms::Button
Point = System::Drawing::Point
class MyForm < Form
def initialize
self.text = "My .NET Form from Ruby"
@button = Button.new
@button.location = Point.new 150, 150
@button.text = "Click Me!"
my_click_handler = Proc.new {|sender, e| MessageBox.show 'Hello from Ruby!'}
@button.click(&my_click_handler)
self.controls.add @button
end
end
my_form = MyForm.new
Application.run my_form
|
Regex
|
require 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll'
Regex = System::Text::RegularExpressions::Regex
regex = Regex.new('(?<=(?<!// )\[assembly: AssemblyVersion\(\")([0-9]+\.){2,3}([0-9]+|\*)(?=\"\)\])')
match = regex.Match(texte_a_tester)
match.Success
match.Value
texte_remplacé = regex.Replace(texte_original, texte_de_remplacement)
|
Netbeans
Il existe un pack Netbeans pour Ruby.
Il est possible d'utiliser JRuby ou bien Ruby.
Impossible de l'installer sur Windows!!!
Faire l'installation à la main. Télécharger ruby-debug-base-0.10.3.1-java.gem puis l'installer :
|
jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
jruby -S gem install --ignore-dependencies -v 0.4.6 ruby-debug-ide
|
Bug : Don't know how to build task '2>&1'
Building native extensions. This could take a while...
rake aborted!
Don't know how to build task '2>&1'
Problème rencontré avec jruby 1.4
Correction : set rake=jruby -S rake
Bug : 'cl' n'est pas reconnu en tant que commande
Ajouter au path :
- c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;
- c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;
- c:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;
- c:\Windows\Microsoft.NET\Framework\v3.5;
- c:\Windows\Microsoft.NET\Framework\v2.0.50727;
- c:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;
Source : C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
Autres IDE
- RubyMine (jetbrain IntellJ, payant, Windows et Linux)
- Ruby In Steel (Visual Studio, payant)
- Aptana (impossible de créer un projet ruby)
- Eclipse (impossible d'installer plugin Ruby Development Tool)
- Ruby Developement Environment (2007, gratuit, pas d'auto-complétion)