Commander
S i m o n C O U R T O I S
   ( @ h a p p y n o f f )
Commander ?

Solution complète pour créer des outils en
ligne de commande

github.com/visionmedia/commander

gem install commander
Exemple Basique
# prog
#!/usr/bin/env

require 'rubygems'
require 'commander/import'

program :name, 'Prog'
program :version, '1.0.0'
program :description, 'Exemple pour Paris.rb'

command :parisrb do |c|
  c.syntax = 'foobar parisrb'
  c.description = 'Dis bonjour'
  c.action do |args, options|
    say 'Bonjour Paris.rb'
  end
end
Exemple Basique

$ prog parisrb
Bonjour Paris.rb



$ prog help parisrb
NAME:
  parisrb

DESCRIPTION:
  Dis bonjour

SYNOPSIS:
  prog parisrb
Avec Options

command :parisrb do |c|
  c.syntax = 'foobar parisrb'
  c.description = 'Dis bonjour’

  c.option '--prefix STRING', String, 'Ajouter un prefix'
  c.option '--suffix STRING', String, 'Ajouter un suffix'

  c.action do |args, opts|
    opts.default :prefix => '(', :suffix => ')'
    say “#{opts[:prefix]}Bonjour Paris.rb #{opts[:suffix]}”
  end
end
Avec Options
$ prog parisrb
(Bonjour Paris.rb)



$ prog parisrb --prefix ‘!’ --suffix ‘!’
!Bonjour Paris.rb!



$ prog help parisrb
...
OPTIONS:
    --prefix STRING
         Ajouter prefix
    --suffix STRING
         Ajouter suffix
Plusieurs
            Commandes

command :parisrb do |c|
  # ...
end

command :plop do |c|
  # ...
end

command :hello do |c|
  # ...
end
Highline +
       Améliorations
ask “Your name:”
# Your name:
# (prompt)

ask “Your name: ”
# Your name: (prompt)

password “Your password: ”
# Your password: ********

agree("Do something ? ")
# Do something ? (prompt: yes/no)

choice = choose("Favorite language?", :ruby, :perl, :js)
# Favorite language?
# 1. ruby
# 2. perl
# 3. js
? (prompt: 1/2/3)
Highline +
       Améliorations
speak “Hello Paris.rb”
# -- synthèse vocale --

names = ask_for_array 'Names: '   # Array
bday = ask_for_date 'Birthday ? ' # Date

times = [1, 2, 3]
progress times do |time|
  sleep(time)
end
# Progress |.........................| 0% complete
# Progress |========.................| 33% complete
# Progress |================.........| 66% complete
# Process complete
What else ?

Customisation facile

Aliasing de commandes

Commande par défaut

Interaction avec growl (notify, notify_ok)

github.com/visionmedia/terminal-table
MERCI !

Commander

  • 1.
    Commander S i mo n C O U R T O I S ( @ h a p p y n o f f )
  • 2.
    Commander ? Solution complètepour créer des outils en ligne de commande github.com/visionmedia/commander gem install commander
  • 3.
    Exemple Basique # prog #!/usr/bin/env require'rubygems' require 'commander/import' program :name, 'Prog' program :version, '1.0.0' program :description, 'Exemple pour Paris.rb' command :parisrb do |c| c.syntax = 'foobar parisrb' c.description = 'Dis bonjour' c.action do |args, options| say 'Bonjour Paris.rb' end end
  • 4.
    Exemple Basique $ progparisrb Bonjour Paris.rb $ prog help parisrb NAME: parisrb DESCRIPTION: Dis bonjour SYNOPSIS: prog parisrb
  • 5.
    Avec Options command :parisrbdo |c| c.syntax = 'foobar parisrb' c.description = 'Dis bonjour’ c.option '--prefix STRING', String, 'Ajouter un prefix' c.option '--suffix STRING', String, 'Ajouter un suffix' c.action do |args, opts| opts.default :prefix => '(', :suffix => ')' say “#{opts[:prefix]}Bonjour Paris.rb #{opts[:suffix]}” end end
  • 6.
    Avec Options $ progparisrb (Bonjour Paris.rb) $ prog parisrb --prefix ‘!’ --suffix ‘!’ !Bonjour Paris.rb! $ prog help parisrb ... OPTIONS: --prefix STRING Ajouter prefix --suffix STRING Ajouter suffix
  • 7.
    Plusieurs Commandes command :parisrb do |c| # ... end command :plop do |c| # ... end command :hello do |c| # ... end
  • 8.
    Highline + Améliorations ask “Your name:” # Your name: # (prompt) ask “Your name: ” # Your name: (prompt) password “Your password: ” # Your password: ******** agree("Do something ? ") # Do something ? (prompt: yes/no) choice = choose("Favorite language?", :ruby, :perl, :js) # Favorite language? # 1. ruby # 2. perl # 3. js ? (prompt: 1/2/3)
  • 9.
    Highline + Améliorations speak “Hello Paris.rb” # -- synthèse vocale -- names = ask_for_array 'Names: ' # Array bday = ask_for_date 'Birthday ? ' # Date times = [1, 2, 3] progress times do |time| sleep(time) end # Progress |.........................| 0% complete # Progress |========.................| 33% complete # Progress |================.........| 66% complete # Process complete
  • 10.
    What else ? Customisationfacile Aliasing de commandes Commande par défaut Interaction avec growl (notify, notify_ok) github.com/visionmedia/terminal-table
  • 11.

Editor's Notes