2009-04-01 4 views
3

제가 작성한 작은 루비 응용 프로그램이 있습니다.이 문서는 anagram searcher입니다. 루비를 배우기위한 것이지만 개인적인 용도로 온라인에 올려 놓고 싶습니다. 나는 Rails에 대한 경험이 있으며, 많은 분들이 Sinatra를 추천했습니다. 나도 괜찮지 만 데이터베이스 대신 텍스트 파일을 사용하는 방법에 대한 정보는 찾을 수 없습니다.작은 루비 응용 프로그램을 온라인에 저장하는 가장 좋은 방법은 무엇입니까?

응용 프로그램은 매우 간단하며 단어 목록의 텍스트 파일에 대해 유효성을 확인한 다음 모든 분석표를 찾습니다. 나는 이것이 아주 간단해야한다고 생각해 왔지만, 나는 그 텍스트 파일을 Rails (또는 그 방법을 선택하면 Sinatra)로 임포트 할 수 밖에 없다. Rails 프로젝트에서 나는 lib 디렉토리에 텍스트 파일을 놓았다.

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

(cvtest은 레일 프로젝트의 이름입니다)

여기에 코드입니다 :

불행하게도, 경로가 레일에서 올바른 것으로 보인다에도 불구하고, 오류가 발생합니다. 그것은 그 자체로 훌륭하게 작동합니다 :

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 

답변

5

실제 기능 (분석기 찾기)을 방법으로 분석합니다. 웹 응용 프로그램에서 해당 메서드를 호출하십시오.

레일스에서는 ActiveRecord 대신 해당 메서드를 호출하는 컨트롤러 동작을 만듭니다. Sinatra에서는 메서드를 호출하는 경로를 만들뿐입니다. 다음은시나의 예입니다 :

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

을 그런 다음 http://yourapp.com/word/pool에 액세스 할 때, 그것은 "루프, 폴로"를 인쇄합니다.

3

sinatra를 사용하면 무엇이든 할 수 있습니다. 이러한 예제는 심지어 sinatra 필요하지 않습니다, 당신은 자신의 랙 인터페이스 물건 롤 수 있습니다.

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

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

또는 :

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

이렇게요.

5

나는 대답으로 질문이 표시되어 알아,하지만 당신이 정기적으로 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 

다음 haml (선호하는 템플릿 언어를 사용할 수 있음). 이렇게하면 입력 양식이 제공되고 단어가 제공되고 분석 차트 목록이 생성 된 경우 분석 차트 목록이 표시됩니다.

관련 문제