Репозитории Ruby DSL (Domain Specific Language), примеры

Я ищу отличные примеры Ruby DSL (Domain-Specific Languages). Какие репозитории, проекты, о которых вы знаете, которые стоит прочитать? Почему это (или: они) отличные примеры?

Меня особенно интересуют более сложные примеры, которые хорошо продуманы и разработаны.

6 ответов

Rake и Rack являются хорошими примерами DSL. Если вы хотите еще несколько примеров, проверьте их:

  • Sinatra - это очень популярный DSL для создания веб-приложений, и он с открытым исходным кодом на GitHub.
  • Twibot - это новый DSL, созданный по мотивам Sinatra, который позволяет создавать боты Twitter, которые автоматически отвечают на сообщения и ответы.

Если вы хотите начать создавать свои собственные, вот отличное руководство под названием Создание DSL в Ruby.

В области развития, управляемого поведением, вы можете проверить:

  • Огурец - Опишите BDD, используя сценарии
  • RSpec - Заменить тестовый код с указанием поведения.

Хотя я должен признать, что код RSpec иногда заставляет меня чесать голову, потому что я все еще новичок.

Вы проверили драгоценность Docile, это может быть самый простой и чистый способ удовлетворить ваши потребности?

Другой пример, конечно, Rake, система сборки Ruby. Что делает DSL "хорошим" на мой взгляд:

  1. Нотация соответствует значению, т.е. если вы читаете предложение (утверждение) в DSL, у вас есть четкое, однозначное представление о том, что оно делает.
  2. Специфичный для домена, т. Е. DSL не решает все проблемы во вселенной, а скорее фокусируется на одном маленьком домене (например, создание программного обеспечения, запрос данных или создание пользовательского интерфейса)
  3. Высокий уровень абстракции. DSL использует концепции высокого уровня, которые может использовать программист, и переводит их в низкоуровневую реализацию (внутренне). В случае Rake основной концепцией, на которой основан язык, являются задачи и зависимости между ними.

Некоторые хорошие рубиновые DSL, о которых я могу думать, это hpricot и sinatra

Активная запись Ruby on Rails - это DSL!

http://apidock.com/rails/Active Record/Base

Также этот эпизод школы кода может быть интересным, поскольку он ведет к созданию DSL (где я узнал, что Active Record был DSL)

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

Вышеупомянутый курс также говорит о внешних и внутренних DSL. Cucumber - это пример внешнего DSL, в котором вам нужно создать синтаксический анализатор и компилятор и т. Д. Active Record - это пример внутреннего DSL, который работает внутри некоторого существующего кода.

Другие вопросы по тегам