<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Carl Pelletier blog &#187; skeleton</title>
	<atom:link href="http://carlpelletier.ca/tag/skeleton/feed/" rel="self" type="application/rss+xml" />
	<link>http://carlpelletier.ca</link>
	<description>Une immertion dans mon esprit, un peu de tout et moins que rien...</description>
	<lastBuildDate>Fri, 20 Nov 2009 19:55:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>squelette de script ruby pour command line</title>
		<link>http://carlpelletier.ca/2009/11/20/squelette-de-script-ruby-pour-command-line/</link>
		<comments>http://carlpelletier.ca/2009/11/20/squelette-de-script-ruby-pour-command-line/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 19:49:51 +0000</pubDate>
		<dc:creator>carlpelletier</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[rdoc]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[skeleton]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[squelette]]></category>

		<guid isPermaLink="false">http://carlpelletier.ca/?p=199</guid>
		<description><![CDATA[Depuis que je fais de la programmation Ruby, je n&#8217;arrête pas d&#8217;apprendre plein de petits trucs vraiment intéressants. Propulsé par un désir de partager, voici un &#171;&#160;squelette&#160;&#187; de script que je réutilise à chaque fois que l&#8217;occasion se présente. Je n&#8217;oserais jamais prendre le mérite d&#8217;avoir bâti ce script. J&#8217;ai pris le du code sur [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-184" title="ruby_logo" src="http://carlpelletier.ca/wp-content/uploads/2009/11/ruby_logo-300x107.gif" alt="ruby_logo" width="300" height="107" />Depuis que je fais de la programmation Ruby, je n&#8217;arrête pas d&#8217;apprendre plein de petits trucs vraiment intéressants. Propulsé par un désir de partager, voici un &laquo;&nbsp;squelette&nbsp;&raquo; de script que je réutilise à chaque fois que l&#8217;occasion se présente. Je n&#8217;oserais jamais prendre le mérite d&#8217;avoir bâti ce script. J&#8217;ai pris le du code sur le site <a href="http://blog.infinitered.com/entries/show/5">suivant</a>. J&#8217;ai changé quelques parties, mais j&#8217;ai surtout fait la version française. Si vous avez du crédit à donner en utilisant le script, donnez-le au développeur original.</p>

<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby </span><br />
<br />
<span style="color:#008000; font-style:italic;"># == Synopsis </span><br />
<span style="color:#008000; font-style:italic;"># TODO: Entrer la description de l'application ou du script.</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># == Examples</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; TODO: Cette commande fait...</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; &nbsp; ruby_cl_skeleton foo.txt</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; Autres exemples:</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; &nbsp; ruby_cl_skeleton -q bar.doc</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; &nbsp; ruby_cl_skeleton --verbose foo.html</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># == Usage </span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; ruby_cl_skeleton [options] source_file</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; For help use: ruby_cl_skeleton -h</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># == Options</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; -h, --help &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Affiche l'aide</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; -v, --version &nbsp; &nbsp; &nbsp; Affiche la version courante</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; -q, --quiet &nbsp; &nbsp; &nbsp; &nbsp; Affiche le minimum possible, surpasse verbose</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; -V, --verbose &nbsp; &nbsp; &nbsp; Affiche détaillé</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; TODO: Ajouter les options que vous avez besoin</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># == Author</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; Votre_nom</span><br />
<span style="color:#008000; font-style:italic;">#</span><br />
<span style="color:#008000; font-style:italic;"># == Copyright</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; Copyright (c) 2007 YourName. Licensed under the MIT License:</span><br />
<span style="color:#008000; font-style:italic;"># &nbsp; http://www.opensource.org/licenses/mit-license.php</span><br />
<span style="color:#008000; font-style:italic;"># TODO: remplacer toute les mentions ruby_cl_skeleton avec le nom de votre applicatoin</span><br />
<span style="color:#008000; font-style:italic;"># TODO: Remplacer Votre_nom avec votre vrai nom</span><br />
<span style="color:#008000; font-style:italic;"># TODO: Mettre à jour le &nbsp;Synopsis, Examples, etc</span><br />
<span style="color:#008000; font-style:italic;"># TODO: Changer la license si nécessaire</span><br />
<br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'optparse'</span> <br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rdoc/usage'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ostruct'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'date'</span><br />
<br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> App<br />
&nbsp; VERSION= <span style="color:#996600;">'0.0.1'</span><br />
<br />
&nbsp; attr_reader <span style="color:#ff3333; font-weight:bold;">:options</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>arguments, stdin<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@arguments</span> = arguments<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@stdin</span> = stdin<br />
<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># On affecte les valeurs par défaut</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@options</span> = OpenStruct.<span style="color:#9900CC;">new</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span> = <span style="color:#0000FF; font-weight:bold;">false</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">quiet</span> = <span style="color:#0000FF; font-weight:bold;">false</span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;">#TODO: - Si vous avez d'autre option(s) vous devez les initialiser içi</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#008000; font-style:italic;"># Parse options, check arguments, then process the command</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> run<br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> parsed_options? <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> arguments_valid? <br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Start at #{DateTime.now}<span style="color:#000099;">\n</span><span style="color:#000099;">\n</span>&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span><br />
<br />
&nbsp; &nbsp; &nbsp; output_options <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span> <span style="color:#008000; font-style:italic;"># [Optional]</span><br />
<br />
&nbsp; &nbsp; &nbsp; process_arguments &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; process_command<br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>Finished at #{DateTime.now}&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; output_usage<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; protected<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> parsed_options?<br />
<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Specify options</span><br />
&nbsp; &nbsp; opts = OptionParser.<span style="color:#9900CC;">new</span> <br />
&nbsp; &nbsp; opts.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-v'</span>, <span style="color:#996600;">'--version'</span><span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#123;</span> output_version ; <span style="color:#CC0066; font-weight:bold;">exit</span> <span style="color:#006666;">0</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; opts.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-h'</span>, <span style="color:#996600;">'--help'</span><span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span> output_help <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; opts.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-V'</span>, <span style="color:#996600;">'--verbose'</span><span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span> = <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#006600; font-weight:bold;">&#125;</span> &nbsp;<br />
&nbsp; &nbsp; opts.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-q'</span>, <span style="color:#996600;">'--quiet'</span><span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">quiet</span> = <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TO DO - add additional options</span><br />
<br />
&nbsp; &nbsp; opts.<span style="color:#9900CC;">parse</span>!<span style="color:#006600; font-weight:bold;">&#40;</span>@arguments<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0000FF; font-weight:bold;">false</span><br />
<br />
&nbsp; &nbsp; process_options<br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">true</span> &nbsp; &nbsp; &nbsp;<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#008000; font-style:italic;"># Performs post-parse processing on options</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> process_options<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">verbose</span> = <span style="color:#0000FF; font-weight:bold;">false</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">quiet</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> output_options<br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Options:<span style="color:#000099;">\n</span>&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@options</span>.<span style="color:#9900CC;">marshal_dump</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>name, val<span style="color:#006600; font-weight:bold;">|</span> &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot; &nbsp;#{name} = #{val}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#008000; font-style:italic;"># True if required arguments were provided</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> arguments_valid?<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TO DO - implement your real logic here</span><br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@arguments</span>.<span style="color:#9900CC;">length</span> == <span style="color:#006666;">1</span> <br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#008000; font-style:italic;"># Setup the arguments</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> process_arguments<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TO DO - place in local vars, etc</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> output_help<br />
&nbsp; &nbsp; output_version<br />
&nbsp; &nbsp; RDoc::usage<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#008000; font-style:italic;">#exits app</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> output_usage<br />
&nbsp; &nbsp; RDoc::usage<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'usage'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#008000; font-style:italic;"># gets usage from comments above</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> output_version<br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{File.basename(__FILE__)} version #{VERSION}&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> process_command<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TO DO - do whatever this app does</span><br />
<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;">#process_standard_input # [Optional]</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> process_standard_input<br />
&nbsp; &nbsp; input = <span style="color:#0066ff; font-weight:bold;">@stdin</span>.<span style="color:#9900CC;">read</span> &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TO DO - process input</span><br />
<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># [Optional]</span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># @stdin.each do |line| </span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># &nbsp;# TO DO - process each line</span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;">#end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<br />
<span style="color:#008000; font-style:italic;"># Lance le script </span><br />
app = App.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>ARGV, STDIN<span style="color:#006600; font-weight:bold;">&#41;</span><br />
app.<span style="color:#9900CC;">run</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://carlpelletier.ca/2009/11/20/squelette-de-script-ruby-pour-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

