2009-04-01 8 views
3

J'ai une petite application ruby ​​que j'ai écrite qui est un chercheur d'anagrammes. C'est pour apprendre le rubis, mais je voudrais le mettre en ligne pour un usage personnel. J'ai un peu d'expérience avec Rails, et beaucoup ici ont recommandé Sinatra. Je vais bien avec l'un ou l'autre, mais je ne trouve aucune information sur la façon d'utiliser un fichier texte au lieu d'une base de données.Quel est le meilleur moyen de mettre en ligne une petite application ruby?

L'application est assez simple, valide contre un fichier texte d'une liste de mots, puis trouve tous les anagrammes. J'ai supposé que cela devrait être assez simple, mais je suis coincé sur l'importation de ce fichier texte dans Rails (ou Sinatra si je choisis de cette façon). Dans le projet Rails, j'ai placé le fichier texte dans le répertoire lib.

Malheureusement, même si le chemin semble être correct dans Rails, je reçois une erreur:

no such file to load -- /Users/court/Sites/cvtest/lib/english.txt 

(cvtest est le nom du projet rails)

Voici le code. Cela fonctionne très bien par lui-même:

file_path = '/Users/court/Sites/anagram/dictionary/english.txt' 

input_string = gets.chomp 


# validate input to list 
if File.foreach(file_path) {|x| break x if x.chomp == input_string} 

    #break down the word 
    word = input_string.split(//).sort 

    # match word 
    anagrams = IO.readlines(file_path).partition{ 
    |line| line.strip! 
    (line.size == word.size && line.split(//).sort == word) 
    }[0] 

    #list all words except the original 
    anagrams.each{ |matched_word| puts matched_word unless matched_word == input_string } 


#display error if 
else 
    puts "This word cannot be found in the dictionary" 
end 

Répondre

5

Factor la fonctionnalité réelle (trouver les anagrammes) dans une méthode. Appelez cette méthode depuis votre application Web.

Dans Rails, vous créez une action de contrôleur qui appelle cette méthode au lieu de ActiveRecord. Dans Sinatra, vous créez simplement un itinéraire qui appelle la méthode. Voici un exemple Sinatra:

get '/word/:input' 
    anagrams = find_anagrams(params[:input]) 
    anagrams.join(", ") 
end 

Ensuite, lorsque vous accédez au http://yourapp.com/word/pool, il imprime "boucle, polo".

3

Avec Sinatra, vous pouvez tout faire. Ces exemples ne nécessitent même pas sinatra, vous pouvez rouler votre propre chose de l'interface rack.

require 'rubygems' 
require 'sinatra' 
require 'yaml' 

documents = YAML::load_file("your_data.yml") 

Ou:

require 'rubygems' 
require 'sinatra' 
content = Dir[File.join(__DIR__, "content/*.textile)].map {|path| 
    content = RedCloth(File.read(path)).to_html 
} 

Etcetera.

5

Je sais que la question est marqué comme ayant été, mais je préfère ce qui suit, car il utilise des paramètres de requête plutôt que des paramètres à base de chemin, ce qui signifie que vous pouvez passer les paramètres à l'aide d'une présentation régulière de formulaire GET:

require 'rubygems' 
require 'sinatra' 

def find_anagrams word 
    # your anagram method here 
end 

get '/anagram' do 
    @word = params['word'] 
    @anagrams = find_anagrams @word if @word 
    haml :anagram 
end 

Et le haml suivant (vous pouvez utiliser n'importe quel langage de modèle que vous préférez). Cela vous donnera un formulaire de saisie, et affichera la liste des anagrammes si un mot a été fourni et qu'une liste d'anagrammes a été générée:

Questions connexes