squelette de script ruby pour command line

Vendredi 20 novembre 2009
Par carlpelletier

ruby_logoDepuis que je fais de la programmation Ruby, je n’arrête pas d’apprendre plein de petits trucs vraiment intéressants. Propulsé par un désir de partager, voici un « squelette » de script que je réutilise à chaque fois que l’occasion se présente. Je n’oserais jamais prendre le mérite d’avoir bâti ce script. J’ai pris le du code sur le site suivant. J’ai changé quelques parties, mais j’ai surtout fait la version française. Si vous avez du crédit à donner en utilisant le script, donnez-le au développeur original.

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
#!/usr/bin/env ruby

# == Synopsis
# TODO: Entrer la description de l'application ou du script.
#
# == Examples
#   TODO: Cette commande fait...
#     ruby_cl_skeleton foo.txt
#
#   Autres exemples:
#     ruby_cl_skeleton -q bar.doc
#     ruby_cl_skeleton --verbose foo.html
#
# == Usage
#   ruby_cl_skeleton [options] source_file
#
#   For help use: ruby_cl_skeleton -h
#
# == Options
#   -h, --help          Affiche l'aide
#   -v, --version       Affiche la version courante
#   -q, --quiet         Affiche le minimum possible, surpasse verbose
#   -V, --verbose       Affiche détaillé
#   TODO: Ajouter les options que vous avez besoin
#
# == Author
#   Votre_nom
#
# == Copyright
#   Copyright (c) 2007 YourName. Licensed under the MIT License:
#   http://www.opensource.org/licenses/mit-license.php
# TODO: remplacer toute les mentions ruby_cl_skeleton avec le nom de votre applicatoin
# TODO: Remplacer Votre_nom avec votre vrai nom
# TODO: Mettre à jour le  Synopsis, Examples, etc
# TODO: Changer la license si nécessaire

require 'optparse'
require 'rdoc/usage'
require 'ostruct'
require 'date'


class App
  VERSION= '0.0.1'

  attr_reader :options

  def initialize(arguments, stdin)
    @arguments = arguments
    @stdin = stdin

    # On affecte les valeurs par défaut
    @options = OpenStruct.new
    @options.verbose = false
    @options.quiet = false
    #TODO: - Si vous avez d'autre option(s) vous devez les initialiser içi
  end

  # Parse options, check arguments, then process the command
  def run

    if parsed_options? && arguments_valid?

      puts "Start at #{DateTime.now}\n\n" if @options.verbose

      output_options if @options.verbose # [Optional]

      process_arguments            
      process_command

      puts "\nFinished at #{DateTime.now}" if @options.verbose

    else
      output_usage
    end

  end

  protected

  def parsed_options?

    # Specify options
    opts = OptionParser.new
    opts.on('-v', '--version')    { output_version ; exit 0 }
    opts.on('-h', '--help')       { output_help }
    opts.on('-V', '--verbose')    { @options.verbose = true }  
    opts.on('-q', '--quiet')      { @options.quiet = true }
    # TO DO - add additional options

    opts.parse!(@arguments) rescue return false

    process_options
    true      
  end

  # Performs post-parse processing on options
  def process_options
    @options.verbose = false if @options.quiet
  end

  def output_options
    puts "Options:\n"

    @options.marshal_dump.each do |name, val|        
      puts "  #{name} = #{val}"
    end
  end

  # True if required arguments were provided
  def arguments_valid?
    # TO DO - implement your real logic here
    true if @arguments.length == 1
  end

  # Setup the arguments
  def process_arguments
    # TO DO - place in local vars, etc
  end

  def output_help
    output_version
    RDoc::usage() #exits app
  end

  def output_usage
    RDoc::usage('usage') # gets usage from comments above
  end

  def output_version
    puts "#{File.basename(__FILE__)} version #{VERSION}"
  end

  def process_command
    # TO DO - do whatever this app does

    #process_standard_input # [Optional]
  end

  def process_standard_input
    input = @stdin.read      
    # TO DO - process input

    # [Optional]
    # @stdin.each do |line|
    #  # TO DO - process each line
    #end
  end
end


# Lance le script
app = App.new(ARGV, STDIN)
app.run
Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Identi.ca
  • LinkedIn
  • Technorati
  • Tumblr
  • Twitter

Tags: , , , , ,

Laisser un commentaire