Репозитории Ruby DSL (Domain Specific Language), примеры - PullRequest
16 голосов
/ 22 мая 2009

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

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

Ответы [ 6 ]

12 голосов
/ 22 мая 2009

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

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

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

3 голосов
/ 27 октября 2010

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

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

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

2 голосов
/ 31 октября 2012

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

2 голосов
/ 09 июня 2009

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

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

Некоторые хорошие рубиновые DSL, о которых я могу думать, Hpricot а также Синатра

0 голосов
/ 15 января 2013

Активная запись Ruby on Rails - это 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, который работает внутри некоторого существующего кода.

...