Ruby DSL(域特定语言)存储库,示例

我正在寻找Ruby DSLs(领域特定语言)的优秀示例。 您知道哪些存储库,项目值得一读? 为什么它(或者是它们)是很好的例子?

我对经过深思熟虑和设计的更复杂的例子特别感兴趣。

Rake和Rack是DSL的一些很好的例子。 如果您想要更多示例,请查看以下内容:

  • Sinatra是一种非常流行的用于构建Web应用程序的DSL,它是GitHub上的开源软件。
  • Twibot是一款受Sinatra启发的新型DSL,可让您创建自动响应消息和回复的Twitter机器人。

如果你想开始自己创建,这里有一个很棒的教程,叫做在Ruby中构建一个DSL 。

在行为驱动开发领域,您可以查看:

  • 黄瓜 – 使用场景描述BDD
  • RSpec – 用指定行为替换测试代码。

虽然我不得不承认RSpec代码有时会让我挠头,因为我还是一个新手。

另一个例子当然是Rake ,Ruby构建系统。 是什么让DSL在我看来“好”:

  1. 符号符合意义,即如果您在DSL中读取一个句子(语句),您就可以清楚,明确地了解它的作用。
  2. 特定于域,即DSL不能解决宇宙中的每个问题,而是关注一个小域(例如构建软件,查询数据或构建UI)
  3. 高级抽象。 DSL使用程序员可以使用的高级概念,并将其转换为较低级别的实现(内部)。 在Rake的情况下,语言所基于的主要概念是它们之间的任务和依赖关系。

你有没有检查过Docile gem ,它可能是最简单,最干净的方式来满足你的需求?

我能想到的一些好的rubyDSL是hpricot和sinatra

Ruby on Rails的Active Record是一个DSL!

http://apidock.com/rails/ActiveRecord/Base

此代码学校的这一集可能很有​​趣,因为它导致构建DSL(我在那里学习了Active Record是DSL)

http://www.codeschool.com/courses/ruby-bits-part-2

上述课程还讨论了外部和内部DSL。 Cucumber是一个外部DSL的示例,您需要构建解析器和编译器等.Active Record是在一些现有代码中运行的内部DSL的示例。