1 # Installs gems that are slightly broken
2 # As a name it expects the name of the gem.
3 # If you want to want to install a certain version
4 # you have to append the version to the gem name:
6 # install a version of mime-types:
7 # rubygems::gem{'mime-types': }
9 # install version 0.0.4 of ruby-net-ldap:
10 # rubygems::gem{'ruby-net-ldap-0.0.4': }
12 # uninstall polygot gem (until no such gem is anymore installed):
13 # rubygems::gem{'polygot': ensure => absent }
15 # uninstall ruby-net-ldap version 0.0.3
16 # rubygems::gem{'ruby-net-ldap-0.0.3': ensure => absent }
18 # You can also set your own buildlfags, which will then install
19 # the gem in question by the gem command.
21 # You can also enforce to use the gem command to manage the gem
22 # by setting provider to `exec`.
24 define rubygems::brokengem(
26 $provider = 'default',
27 $buildflags = 'absent',
32 if $name =~ /\-(\d|\.)+$/ {
33 $real_name = regsubst($name,'^(.*)-(\d|\.)+$','\1')
34 $gem_version = regsubst($name,'^(.*)-(\d+(\d|\.)+)$','\2')
39 if $source != 'absent' {
40 if $ensure != 'absent' {
41 require rubygems::brokengem::cachedir
43 command => "/usr/bin/wget -O ${rubygems::brokengem::cachedir::dir}/$name.gem $source",
44 creates => "${rubygems::brokengem::cachedir::dir}/$name.gem",
47 file{"${rubygems::brokengem::cachedir::dir}/$name.gem":
53 if ($buildflags != 'absent') or ($provider == 'exec') {
55 $gem_version_str = "-v ${gem_version}"
56 $gem_version_check_str = $gem_version
58 $gem_version_check_str = '.*'
61 if $ensure == 'present' {
64 $gem_cmd = 'uninstall -x'
67 if $buildflags != 'absent' {
68 $buildflags_str = "-- --build-flags ${buildflags}"
73 exec{"manage_gem_${name}":
74 command => "gem ${gem_cmd} ${real_name} ${gem_version_str} ${buildflags_str}",
77 $gem_cmd_check_str = "gem list | egrep -q '^${real_name} \\(${gem_version_check_str}\\)\$'"
78 if $ensure == 'present' {
79 Exec["manage_gem_${name}"]{
80 unless => $gem_cmd_check_str
83 Exec["manage_gem_${name}"]{
84 onlyif => $gem_cmd_check_str
91 default => $gem_version ? {
93 default => $gem_version
98 if $source != 'absent' {
100 source => "${rubygems::brokengem::cachedir::dir}/$name.gem"