2011-06-07 53 views
2

我正在使用Datamapper ORM的基于Sinatra的项目。我希望能够在外部YAML文件中为DM验证定义标准,以便系统经验不足的用户可以轻松调整设置。作为一个概念验证,我的工作非常好,但我怀疑可能会有一个更容易或更少的处理器密集型方法来解决这个问题。动态生成ORM类

现在,脚本加载YAML文件,并用一系列eval语句生成DM类(我知道这已经使我处于薄冰中)。问题在于这个过程必须随着每个请求而发生。我最好的想法是检查YAML的变化,重新生成类并在检测到变化时将其导出为静态源,如果未检测到更改,则包括静态文件。

这比我预想的要困难得多,因为将代码块导出到串行化字符串并不像我预期的那样微不足道。

这是荒谬的吗?我是以一种完全错误的方式来解决这个问题的吗?

我是Ruby的新手和ORM的世界,所以请原谅我的无知。

谢谢!

+0

我以为在Ruby中你不需要_生成任何东西。所有的事情都只是一个。 – 2011-06-07 04:38:55

回答

0

把所有内容放在YAML中看起来有点疯狂,因为这只比在Ruby中编写验证更简单。你可以做的是在Ruby中制作一个DSL,使定义验证变得容易得多,然后将其暴露给用户而不是整个班级。

+0

感谢您的回复。我同意我可能会使情况与我目前的策略形成不必要的复杂关系。我想我会退回到这个画板上。再次感谢。 – Daniel 2011-06-07 15:22:08

1

在外部YAML文件DM验证,使得系统的经验较少的用户可以轻松地调整设置

一种用于DSL DSL。没有看到你的YAML我仍然想知道它比DM验证真的能得到多少容易?

require 'dm-validations' 
class User 
    include DataMapper::Resource 

    property :name, String 
    # Manual validation 
    validates_length_of :name, :max => 42 

    # Auto-validation 
    property :bio, Text, :length => 100..500 
end 

而不是去为YAML我将提供经验不足用户提供了几个相关的验证例子,可能也是基于dm-validations documentation短的指引。

+0

这绝对有道理,但我确实认为在这种情况下我有很好的理由来屏蔽用户的来源。尽管如此,你的回应以及我收到的其他回复让我确信,我的确在树错了树! – Daniel 2011-06-07 15:20:29