在REPL或irb中重用Ruby DSL?

时间:2011-06-10 01:09:06

标签: ruby dsl irb read-eval-print-loop instance-eval

我在jruby的UniVerse数据库上开发了一个简单的DSL用于任务。它看起来像这样

support = { 
    :host => 'localhost', 
    :account => 'SUPPORT'
}

uni_task support do 
    connect
    exec "LIST FILE A1"
    disconnect
end

并像这样实施

def uni_task(config, &block)
    session = UniSession.new
    session.instance_eval &block
end

我知道你可以在像this

这样的ruby脚本中使用irb

但有没有办法放到命令行并更改范围以默认执行对象的实例方法?

例如

irb> uni_commandline support
uni> connect
uni> exec "LIST FILE A1"

     .... output .....

uni> disconnect

1 个答案:

答案 0 :(得分:3)

在irb中,您可以使用irb命令在对象范围内移动:

irb> irb some_object

从那时起,任何命令都将在该对象的范围内执行(因此您可以直接调用其实例方法)。