2017-12-06 1 views
1

Ruby에서 응용 프로그램을 개발 중입니다. 명령 줄에서 사용되며 많은 옵션이 있으며 그 중 일부는 상당히 복잡합니다. 웹 인터페이스를 통해 응용 프로그램을 사용할 수있는 기능을 제공하고 싶습니다.명령 행 응용 프로그램 용 웹 인터페이스

나는 이것을 수행하는 가장 좋은 방법에 대해 일반적인 질문을하고 있습니다. 또는이를 수행 할 수있는 더 좋은 방법이 있는지 물어볼 것입니다.

내가 현재 작업하고있는 아이디어는 응용 프로그램 자체가 포크 (fork)하고 WEBrick을 사용하여 1024+ 포트에서 http 서버를 만드는 것입니다. 그런 다음 상위 프로세스에서 현명한 브라우저를 사용하여 사용자의 웹 브라우저를 시작하고 브라우저를 localhost : port로 보냅니다.

사용자가 웹 응용 프로그램을 사용합니다. 그들이 특정 버튼 (아마 "save")을 클릭하면 서버는 최종 페이지를 보내고 스스로 종료합니다. 마지막 메시지에는 사용자에게 브라우저를 닫으라는 메시지가 포함됩니다.

부모 프로세스는 브라우저 및 서버 프로세스가 닫히고 일부 로컬 파일에 저장된 정보를 사용하는 것으로 간주합니다.

나는 다소 복잡해 보입니다. 그래서 나는 그 아이디어에 미치지 않습니다. 그러나, 나는 정말 쉬운 인터페이스를 만들려고하는데, 이는 사용자가 명령 줄 매개 변수를 배울 필요가 없다는 것을 의미한다.

커서 기반 양식을 제공하는 보석을 찾을 수 없기 때문에 웹 브라우저 개념을 고려하고 있습니다.

의견?

+0

대부분의 GUI 툴킷에 바인딩이 있습니다. 질문은 또한 조금 있습니다 : 사용자는 누구이며, 어떤 시스템을 실행하고 프로그램에 어떻게 액세스합니까? 배포 방법은 무엇입니까? – Felix

답변

0

제가 모든 것을 제대로 이해하고 있다면 명령 줄 인터페이스와 웹 기반 (또는 데스크탑 GUI 기반) 인터페이스를 분리하는 것이 좋습니다. 따라서, 예를 들어, 당신이

$ myscript -a 2 3 

-a의 방식으로 사용하는 계산기 CLI를 만드는거야 경우하면 "추가"기능을위한 것입니다 그리고 당신은 -s, -d-m (빼기가있을 수 있습니다 , 나누기, 곱하기) ... 평균적인 조 사용자에게는 그다지 기억하지 않아도됩니다. 또한 그냥 호출하는 그것을 위해 인터페이스를 당신은

class Calculator 
    class<<self 
    def perform(operation, left_side, right_side) 
     # figure out from operation what I need to do and do it or delegate it 
    end 
    end 
end 

같은 클래스를 만들 수 있습니다 다음은 CLI 스크립트를

#!/usr/bin/env ruby 
require 'calculator' 

# parse options, couple ways to do this, you probably already have one in mind 
operation_option = ... # check for -a or -s or -d or -m 
left_side_option = ... 
right_side_option = ... 

Calculator.perform(operation_option, left_side_option, right_side_option) 

을 만들고 지금 당신은 또한 기반 (또는 데스크탑 기반) 웹을 만들 수 있습니다 계산기 클래스 :

require 'calculator' 

# read from text fields/drop downs/whatever 
operation_option = ... 
left_side_option = ... 
right_side_option = ... 

Calculator.perform(operation_option, left_side_option, right_side_option) 

이 방법은 중복의 작은 조금이지만, 정말 ... 당신이 쓰기의 단지 대신 인터페이스에서 텍스트 필드를 구문 분석 할 필요가 어느 쪽이든 이 파일들을 CLI가 읽는 중간 파일로 보내면 CLI를 무시하고 바로 실행하려는 코드로 바로갑니다. 따라서 특정 인터페이스를 표시하고 (해당되는 경우) 해당 인터페이스를 읽고 공통 형식으로 "작업 말"클래스에 데이터를 전달하는 역할을 담당하는 2 개 (또는 그 이상)의 인터페이스 파일이 있습니다.

두 번째 인터페이스를 만들면 어떤 점에서 Ruby는 curses을 지원합니다 (나는 그 이름으로 보석을 설치했습니다). 폼과 상호 작용을 스스로 구축해야합니다. 나는 루비가 꽤 많은 GUI 보석을 갖고 있지만, 웹 기반의 것을 작성하는 것보다는 데스크톱 기반의 것이 더 낫다. ve는 curses 하나를 제외하고는 전혀 사용하지 않았습니다.)하지만이 시점에서 모든 것이 "귀하의 프로젝트에 옳은 것"입니다.

관련 문제