vendredi, juin 23, 2006

Comment créer un gem ?

La manière simple: Créer un fichier googlecalendar.gemspec par exemple. Ajouter le code suivant (à modifier selon les besoins)

spec = Gem::Specification.new do |s|
  s.name = 'googlecalendar'
  s.version = '0.0.2'
  s.summary = "Google Calendar api for Ruby."
  s.description = %{The Google Calendar project provides: Export features (text file, simple html page or excel files), Ruby api's to connect to google calendars, A plugin for Ruby On Rails.}
  s.files = Dir['lib/**/*.rb'] + Dir['test/**/*.rb'] + Dir['plugins/googlecalendar/lib/**/*.rb']
  s.require_path = 'lib'
  s.autorequire = 'googlecalendar'
  s.has_rdoc = true
  s.extra_rdoc_files = Dir['[A-Z]*']
  s.rdoc_options << '--title' <<  'googlecalendar -- Google Calendar api for Ruby.'
  s.author = "Benjamin Francisoud"
  s.email = "cogito@rubyforge.org"
  s.homepage = "http://benjamin.francisoud.googlepages.com/googlecalendar"
end
Exécuter la ligne de commande:
gem build googlecalendar.gemspec

Automatiser avec Rake: Tout est déjà fait dans Rake pour faire des gems facilement, il suffit de mettre pratiquement le même code que ci-dessus dans un fichier Rakefile:

project_name = 'googlecalendar'
# Create compressed packages
spec = Gem::Specification.new do |s|
  s.name = project_name
  s.version = current_version
  s.summary = project_title
  s.description = %{The Google Calendar project provides: Export features (text file, simple html page or excel files), Ruby api's to connect to google calendars, A plugin for Ruby On Rails.}
  s.files = ["README", "CHANGELOG"] + Dir['lib/**/*.rb']
  s.require_path = 'lib'
  s.autorequire = project_name
  s.has_rdoc = true
  s.rubyforge_project = project_name
  s.author = "Benjamin Francisoud"
  s.email = "cogito@rubyforge.org"
  s.homepage = "http://benjamin.francisoud.googlepages.com/googlecalendar"
end
  
Rake::GemPackageTask.new(spec) do |p|
  p.gem_spec = spec
  puts "----------------------------------------------------------------------------"
  puts "WARNING: You need to install cygwin (Archive package) for this task to work!"
  puts "----------------------------------------------------------------------------"
  p.need_tar = true
  p.need_zip = true
end
Si on veut faire des zip et des tar en plus du gem, il faut pouvoir faire en ligne de commande sous windows >zip ...et >tar... donc installer cygwin est surement la meilleure solution ;)

Publier un gem: Il y a plein de manières différentes (voir la documentation de gem)...
Mais la plus simple reste de faire un projet sous rubyforge pour stocker son projet.
Après avoir créé son gem+zip+tar avec le Rakefile, il suffit dans rubyforge de publier des fichiers pour une certaine release et de spécifier que le .gem qu'on a uploadé est un gem (via une select box)
Automatiquement rubyforge va s'occuper de le publier sur le server de gem principale et le gem sera disponible peu de temps après en faisant:
gem list --remote --details googlecalendar

Aucun commentaire: