2009-05-22 18 views
16

Sto cercando esempi eccellenti di Ruby DSL (Domain Specific Languages). Quali repository, progetti sai che valgono una lettura? Perché sono (o: sono) grandi esempi?Repository Ruby DSL (Domain Specific Language), esempi

Sono particolarmente interessato a esempi più complessi che sono ben pensati e progettati.

risposta

1

Alcune buone DSL rubino mi vengono in mente sono hpricot e sinatra

+0

La struttura di sinatra è davvero bella. Ne avevo sentito parlare ma non l'ho guardato. Grazie del promemoria. – Demi

12

Rake e rack sono alcuni buoni esempi di DSL di. Se volete qualche altro esempio, controllare questi fuori:

  • Sinatra è un DSL molto popolare per la creazione di applicazioni web, ed è open source su GitHub.
  • Twibot è un nuovo DSL ispirato da Sinatra che consente di creare bot di Twitter che rispondono automaticamente a messaggi e risposte.

Se vuoi iniziare a crearne uno, ecco un eccellente tutorial chiamato Building a DSL in Ruby.

+0

Twibot è una scoperta interessante che vedrò. Grazie! – Demi

2

Un altro esempio, ovviamente, è Rake, il sistema di generazione Ruby. Che cosa rende un DSL "buono", a mio parere:

  1. notazione è conforme al significato, vale a dire se si legge una frase (dichiarazione) nel DSL, si ha una chiara, inequivocabile idea di ciò che fa.
  2. Specifico del dominio, ovvero il DSL non risolve tutti i problemi dell'universo, ma si concentra su un piccolo dominio (come la creazione di software, l'interrogazione di dati o la costruzione di interfacce utente)
  3. Alto livello di astrazione. Un DSL utilizza concetti di alto livello che il programmatore può utilizzare e li traduce in un'implementazione di livello inferiore (internamente). Nel caso di Rake, il concetto principale su cui si basa la lingua sono compiti e dipendenze tra di loro.
3

Nella zona di behavior-driven development è possibile controllare:

  • Cucumber - Descrivere BDD utilizzando scenari
  • RSpec - Sostituire il codice di prova con i comportamenti che specificano.

Anche se devo ammettere che il codice RSpec mi lascia graffiare la testa a volte perché sono ancora molto alle prime armi.

2

Avete controllato il Docile gem, potrebbe essere il modo più semplice e pulito per soddisfare le vostre esigenze?

0

Active Record di Ruby on Rails è un DSL!

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

Anche questo episodio della scuola di codice potrebbe essere interessante in quanto porta fino alla costruzione di un DSL (dove ho imparato attivo record è stato un DSL)

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

Il corso sopra parla anche su DSL esterni e interni. Cucumber è un esempio di DSL esterno in cui è necessario creare un parser e un compilatore, ecc. Active Record è un esempio di DSL interno eseguito all'interno di un codice esistente.