【发布时间】:2012-04-08 21:04:18
【问题描述】:
我想制作交互式应用程序,用户可以在其中启动它并可以通过键入命令(某种 shell)来完成各种任务
示例:
./myapp.rb
App says Hi
Commands:
help - display help about command
open - open task
do - do action
Start>help open
open <TaskName>
opens specified task
Start>open Something
Something>do SomeAction
Success!
Something> (blinking cursor here)
我搜索了但找不到任何可以专门用于控制台交互的 ruby gem,所以我将自己制作...
我查看了Thor,但这并不是我想要的,也许我可以使用它,但不确定......
它可能看起来像:
class Tasks
attr_reader :opened_task
desc "open <TaskName>", "opens specified task"
def open(params)
end
desc "do <ActionName>", "do specified action"
def do(params)
end
end
tasks = Tasks.new
# theoretical Console class
console = Console.new
console.addCommand("open",tasks.method(:open),"open task")
console.addCommand("do",tasks.method(:do),"do action")
console.start("%s>",[*tasks.opened_task])
所以我的问题是,我可以使用哪些宝石来制作这样的控制台类?也许有人已经做了类似的东西? 我计划使用HighLine 进行输入/输出,但我还能使用什么其他建议?
【问题讨论】:
-
应该是ruby还是你自己的语法?
-
你所说的 ruby 或自己的语法是什么意思? :|如果您的意思是使用 IRB,那么这不是一个选项...
-
为什么不呢?它免费为您提供图灵完备性。
-
因为它执行 ruby 代码,但在我的情况下,只允许一些特定的“命令”,键入不正确的语法不应引发异常,也不应该有重新定义或覆盖这些命令的方法...
-
是安全问题吗?您可以连接到
pry以查找语法错误。重新定义应该不是问题,因为您需要知道它是如何工作的。当您希望您的用户在当前敏感的东西时代使用命令行而不是 GUI 时,我会相信他们有一点权力。但这是你的选择,重新实现很多东西而不是在对象上调用 pry 会很有趣。您还可以免费获得一个 API。
标签: ruby console interactive