我正在使用Ruby开发应用程序。它在命令行中使用,有很多选项,其中一些相当复杂。我希望能够通过网络界面使用该应用程序。
所以我问一般性的问题是最好的方法,或者是否有更好的方法来做到这一点。
我目前正在使用的想法是应用程序将自行分叉并使用WEBrick在1024+端口上创建一个http服务器。然后,在父进程中,它将使用敏感浏览器启动用户的Web浏览器,将浏览器发送到localhost:port。
用户使用Web应用程序。当他们点击某个特定按钮(可能"保存")时,服务器将发送最终页面并自行关闭。最后一条消息将包含一条消息,告诉用户关闭浏览器。
父进程看到浏览器和服务器进程已关闭,并继续使用保存到某个本地文件的信息。
这一切听起来相当复杂,这就是为什么我对这个想法并不疯狂。但是,我打算创建一个非常简单的界面,这意味着不需要用户学习一堆命令行参数(虽然我也可能会提供这些参数)。
我无法找到任何提供基于游标的表单的宝石,这就是我考虑网络浏览器概念的原因。
评论
答案 0 :(得分:0)
如果我正确理解所有内容,您可能需要考虑的一件事是打破命令行界面和基于Web(或基于桌面GUI)的界面。所以,例如,如果我正在创建一个计算器CLI,你以
的方式使用它$ myscript -a 2 3
其中-a
用于“添加”功能,然后您可能有-s
,-d
和-m
(减去,除,乘)...不非常友好,必须记住普通的Joe用户。您可以创建一个类,如
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)
现在你也可以为它创建一个基于web(或基于桌面)的界面,它也只是调用计算器类:
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并直接转到要执行的代码即可。所以你有两个(或更多)接口文件负责显示(如果适用)并从他们的特定接口读取并以通用格式将数据传递给“work horse”类。
就制作第二个界面的内容而言,Ruby确实支持curses
(我有一个以该名称安装的gem),尽管你需要自己构建表单和交互(目前为止)正如我所知,我从来没有寻找过宝石来帮助使形式更容易诅咒)而基于桌面的宝石可能比编写一个基于web的东西更好,从你的描述(ruby确实有相当数量的GUI宝石,但我从来没有使用任何除了诅咒之外的任何一个),但在这一点上,它只是“什么是适合你的项目”。