在红宝石中,确保仅某些方法可用

时间:2019-04-16 09:27:00

标签: ruby dsl

我正在阅读article,内容涉及如何构建简单的DSL和解析文件,但确实如此(正确地如此),指出了这样做的危险性,因为您无法真正相信评估的结果。

这让我开始思考,是否有可能使其变得安全?

为此,是否可以确保在执行上下文中,仅DSL的方法(以及明确允许的方法)可用,并且对其他事物的调用不会执行任何操作或发生错误?

示例中使用的代码是:

class OrdersDsl
  def initialize
    @orders = { to_perform: [], to_schedule: [] }.freeze
  end

  def parse(order_filename)
    instance_eval File.read(order_filename)
  end

  private

  def order_now(order_name, *order_options)
    @orders[:to_perform] << serialize_order(order_name, *order_options)
  end

  def schedule(order_name, *order_options)
    @orders[:to_schedule] << serialize_order(order_name, *order_options)
  end

  def serialize_order(name, *options)
    [name, *options]
  end

  def OrdersDsl.run(order_filename = 'Orders')
    OrdersDsl.new.parse(order_filename)
  end
end

0 个答案:

没有答案