1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
---
category: tool
tool: ruby ecosystem
contributors:
- ["Jon Smock", "http://github.com/jonsmock"]
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
translators:
- ["Xuan-thi Nguyen", "http://github.com/mellenguyen"]
lang: fr-fr
---
Les gens utilisant Ruby adoptent généralement un gestionnaire pour installer
différentes versions de Ruby, gérer leurs paquets (ou gems), et gérer les
dépendances des gems.
## Ruby Managers
Quelques plateformes possèdent Ruby pré-installé ou disponible en tant que
paquet. La plupart des rubyists ne les utilisent pas, ou si c'est le cas, ne
les utilise que pour faire démarrer un autre installateur ou implémentation de
Ruby. Les rubyists tendent plutôt à installer un manager Ruby pour installer
et changer entre les différentes et nombreuses versions de Ruby et les
environnements de leurs projets Ruby.
Les gestionnaires d'environnement Ruby les plus populaires sont :
* [RVM](https://rvm.io/) - Installe et navigue entre les rubies. RVM possède
églement le concept des gemsets pour isoler les environnements de projets
complètement.
* [ruby-build](https://github.com/sstephenson/ruby-build) - Installe seulement
les rubies. Utilisez-le pour un contrôle plus fin des installations des
rubies.
* [rbenv](https://github.com/sstephenson/rbenv) - Navigue seulement entre les
rubies. Utilisé avec ruby-build. Utilisez-le pour un contrôle plus fin des
chargements des rubies.
* [chruby](https://github.com/postmodern/chruby) - Navigue seulement entre les
rubies. Similaire à rbenv. Neutre sur comment les rubies sont installés.
## Versions de Ruby
Ruby a été créé par Yukihiro "Matz" Matsumoto, qui reste quelque peu un
[BDFL](https://fr.wikipedia.org/wiki/Benevolent_Dictator_for_Life), bien que
cela soit récemment en changement. Jusqu'à la standardisation du langage en
2011, l'implémentation de référence de Ruby était appelé MRI (Matz' Reference
Implementation).
Les trois versions majeures de Ruby actuellement utilisées sont :
* 2.0.0 - Sortie en février 2013. La plupart des librairies et frameworks
gèrent la versions 2.0.0.
* 1.9.3 - Sortie en octobre 2011. Il s'agit de la version que la majorité des
rubyists utilisent actuellement. [Fin de vie](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
* 1.8.7 - Sortie en juin 2006. [Fin de vie](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
Les changements entre 1.8.7 à 1.9.x sont bien plus grands qu'entre 1.9.3
jusqu'à 2.0.0. Par exemple, les versions 1.9 ont introduit le support des
encodages et d'une VM bytecode ([YARV](https://fr.wikipedia.org/wiki/YARV)).
Il y a toujours des projets sur 1.8.7, mais ils deviennent minoritaires, étant
donné que la majorité de la communauté a migré vers au moins 1.9.2 ou 1.9.3.
## Implémentations Ruby
L'écosystème Ruby comprend de nombreuses implémentations de Ruby, chacune avec
des points forts uniques et différents degrés de compatibilité. Les différentes
implémentations sont écrites dans différents languages.
Chaque implémentation a des "hooks" et des fonctionnalités spécifiques, elles
exécutent cependant très bien des fichiers Ruby classiques.
Par exemple, JRuby est écrit en Java, mais vous n'avez pas besoin de connaître
le Java pour l'utiliser.
Très mature/compatible:
* [MRI](https://github.com/ruby/ruby) - Ecrite en C, c'est l'implémentation de
référence de Ruby. Elle est par définition 100% compatible (avec elle-même).
Tous les autres rubies maintiennent la compatibilité avec MRI
(voir [RubySpec](#rubyspec) à la suite).
* [JRuby](http://jruby.org/) - Écrite en Java et Ruby, cette robuste
implémentation est assez rapide.
La force de JRuby réside surtout sur l'interopérabilité JVM/Java, faisant
levier sur des outils JVM, des projets et des langages existants.
* [Rubinius](http://rubini.us/) - Ecrite principalement en Ruby avec une VM
bytecode en C++. Egalement mature et rapide. Etant donné qu'elle est
implémentée en Ruby, elle couvre beaucoup de fonctionnalités de la
VM dans Ruby.
Mpyennement mature/compatible:
* [Maglev](http://maglev.github.io/) - Basée sur Gemstone, une VM Smalltalk.
Smalltalk possède quelques outils impressionnants, et ce projet tente
de les apporter dans le développement Ruby.
* [RubyMotion](http://www.rubymotion.com/) - Ruby pour développement iOS.
* [Opal](http://opalrb.org/) - Compile le Ruby en Javascript
Les implémentations de Ruby peuvent avoir leurs propres numéros de versions,
mais elles ciblent toujours une versions spéficique de MRI pour la
compatibilité.
Beaucoup d'implémentations ont la capacité d'entrer dans différents modes
(par exemple, la version 1.8 ou 1.9) afin de spécifier quelle version de MRI
cibler.
Une liste non exhaustive d'implémentations peut être trouvée [ici (EN)](https://github.com/cogitator/ruby-implementations/wiki/List-of-Ruby-implementations).
## RubySpec
La plupart des implémentations Ruby s'appuient fortement sur [RubySpec](http://rubyspec.org/).
Ruby n'a pas de spécification officielle, c'est pourquoi la commaunité a écrit
des spécifications exécutables en Ruby pour tester la compatibilité de leur
implémentation avec MRI.
## RubyGems
[RubyGems](http://rubygems.org/) est un gestionnaire de paquets communautaire
pour Ruby.
RubyGems est livré avec Ruby, il n'y a donc pas besoin de le télécharger
séparément.
Les paquets Ruby sont appelés des "gems", et peuvent être hébergés par la
communauté à RubyGems.org. Chaque gem contient son code source et quelques
métadatas, includant des choses comme la version, les dépendances,
l(es) auteur(s) et la/les licence(s).
## Bundler
[Bundler](http://bundler.io/) est un résolveur de dépendances des gems. Il
utilise le Gemfile d'un projet ppur trouver les dépendances, et récupère
ensuite les dépendances de ces dépendances récursivement. Il déroule cet
algorithme jusqu'à ce que toutes les dépendances soient résolues et
téléchargées, ou s'arrête si un conflit est trouvé.
Bundler lèvera une erreur s'il trouve des conflits de dépendances. Par exemple,
si la gem A recquiert la version 3 ou plus de gem Z, mais que gem B recquiert
seulement la version 2, Bundler vous notifiera ce conflict. Cela devient
extrêmement utile, étant donné que beaucoup de gems font référence à d'autres
gems (qui se réfèrent à d'autres gems), ce qui peut former un large graphe de
dépendance à résoudre.
# Les tests
Tester fait partie intégrante de la culture Ruby. Ruby fournit son propre
framework de tests unitaires appelé minitest (ou TestUnit pour Ruby
version 1.8.x). Il existe beaucoup de librairies de tests avec des buts
différents.
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Framework de tests intégré de Ruby version 1.8 style "Unit"
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Framework de tests intégré de Ruby version 1.9/2.0
* [RSpec](http://rspec.info/) - Un framework de tests qui se focalise sur l'expressivité
* [Cucumber](http://cukes.info/) - Un framework de tests BDD ([behaviour-driven development](https://fr.wikipedia.org/wiki/Behavior_driven_development)) qui parse les tests formatés de Gherkin.
## Soyez gentil
La communauté Ruby est fière d'être une communauté ouverte, riche et
accueillante. Matz lui-même est extrêmement sociable, et la générosité des
rubyists est généralement remarquable.
|