Module de recherche cgi en Ruby
Un programme CGI en Ruby de recherche par mots clefs sur un site web en html statique ou généré par compilation. Ce module est composé des fichiers suivants :
yann@berder:recherche_web$ ls cgi* cgi-bin: cgi_look_for.rb index.txt template.erb cgi-lib: index.rb search.rb words_with_files_in_index.rb
Les éléments qui sont décrits ici sont les fichiers :
- index.rb qui implémentent la classe Index
- cgi_look_for.rb pour le programme cgi de recherche.
- Un exemple de formulaire pour utiliser le module de recherche dans une page HTML.
La classe Index
Première partie d'un ensemble de classes, modules et scripts qui vont composer ce module de recherche, la classe Index qui me permet d'instancier un objet index qui représente l'index dans un ou plusieurs fichiers des mots qui y sont contenus :
class Index attr_reader :index def initialize @index = {} end def add_file_to_index(file_to_index) # pour chaque ligne du fichier, extraction des mots et indexation. File.open(file_to_index, "r") do |file| file.each_line do |line| line.scan(/\w[-\w]+\w/) do |word| # Recherche des mots dans 1 ligne. word.downcase! @index[word] = [] if @index[word].nil? @index[word].push(file_to_index) unless @index[word].include?(file_to_index) end end end end def search(word) @index[word.downcase] end end
Le programme cgi de recherche
Le programme ruby /cgi-bin/cgi_look_for.rb récupère la chaine de recherche expr du formulaire et va chercher dans le fichier index, index_tuxcoffee.txt, les fichiers répondants à cette expression.
require 'erb' require 'cgi' require 'words_with_files_in_index' cgi = CGI.new("html4Tr") # Get cgi entry parameter expr = cgi['expr'] template = "" File.open("./template_search_result.erb", "r") do |file| file.each_line { |line| template += line } end rhtml = ERB.new(template) # setup the template data words_with_files = WordsWithFilesInIndex.new("./index_tuxcoffee.txt", expr) # Produce result. out = rhtml.result(words_with_files.get_binding) # HTML view cgi.out { out }
Un exemple de formulaire de recherche
Une autre partie du module de recherche CGI en langage Ruby, le programme d'appel, appelé à partir d'un formulaire HTML. Le formulaire de recherche ressemble à ceci :
<form action="/cgi-bin/cgi_look_for.rb"> <input type="text" name="expr" /> <input type="submit" value="Rechercher" /> </form>
Archive d'un exemple complet
- Archive search_module_cgi_ruby.tgz



Discussion