Question

J'ai une petite application Ruby j'ai écrit c'est un chercheur anagram. Il est pour Ruby apprendre, mais je voudrais le mettre en ligne pour un usage personnel. J'ai une certaine expérience avec Rails, et beaucoup ici ont recommandé Sinatra. Je suis très bien avec soit, mais je ne peux trouver aucune information sur la façon d'utiliser un fichier de texte au lieu d'une base de données.

L'application est assez simple, valide contre un fichier texte d'une liste de mots, trouve alors tous les anagrammes. Je suis en supposant que cela devrait être assez simple, mais je suis coincé sur l'importation que dans Rails textfile (ou Sinatra, si je choisis de cette façon). Dans le projet Rails, je l'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 sur les rails)

Voici le code. Il 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
Était-ce utile?

La solution

Facteur la fonctionnalité réelle (trouver les anagrammes) dans un procédé. Appelez cette méthode à partir de votre application Web.

Dans Rails, vous allez pouvoir créer une action de contrôleur qui appelle cette méthode au lieu de ActiveRecord. Dans Sinatra, vous voulez juste créer 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 à la http://yourapp.com/word/pool , il sera print "boucle, polo".

Autres conseils

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 la haml suivante (vous pouvez utiliser quel que soit la langue modèle que vous préférez). Cela vous donnera une forme d'entrée et afficher la liste des anagrammes si un mot a été fourni et une liste anagram a été générée:

%h1 
  Enter a word
  %form{:action => "anagram"}
    %input{:type => "text", :name => "word"}
    %input{:type => "submit"}
- if @word
  %h1 
    Anagrams of 
    &= @word
  - if @anagrams
    %ul
      - @anagrams.each do |word|
        %li&= word
  - else
    %p No anagrams found

Avec sinatra, vous pouvez faire quoi que ce soit. Ces exemples ne nécessite même pas sinatra, vous pouvez rouler votre propre chose 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top