Нуждаюсь в помощи улучшая DSL Ruby для управления управляемым фармацевтом напитка Ардуино (обезьяна панели)

Похоже, что вместо того, чтобы связываться с «Счета: PastDueInvoices (Relation)», я связался непосредственно с «Счета-фактуры» и использовал следующую таблицу onAttach для таблицы.

var datasource = widget.datasource;
var accountName = widget.parent.datasource.item.account_name;
var totalPayments = datasource.item.Payments.reduce((b,a) => Number (a.payment_amount) + Number(b) , 0);

datasource.query.filters.Accounts.account_name._equals = accountName;
datasource.query.filters.invoice_due_date._lessThan = new Date;
datasource.query.filters.invoice_total._greaterThan = totalPayments;

datasource.load();

Я бы все еще любил слышать, есть ли лучший подход.

Благодаря

6
задан Gilles 'SO- stop being evil' 26 July 2011 в 11:22
поделиться

3 ответа

Не изучая детали реализации (или Ваши ссылки GitHub), я попробовал бы, пишут DSL как это:

(крадущий отсюда: http://supercocktails.com/1310/Long-Island-Iced-Tea-)

describe "Long Island Iced Tea" do
  serve_in 'Highball Glass'

  ingredients do
    half.ounce.of :vodka
    half.ounce.of :tequila
    half.ounce.of :light_rum
    half.ounce.of :gin
    1.dash.of :coca_cola
    #ignoring lemon peel as how can a robot peel a lemon?
  end

  steps do
    add :vodka, :tequila, :light_rum, :gin
    stir :gently
    add :coca_cola
  end
end

Надежда, которая помогает!

5
ответ дан 10 December 2019 в 02:55
поделиться

Если Вы хотите, чтобы рецепт выглядел более естественным, почему не (из того же рецепта используемый Orion Ewards, Спасибо!):

Recipe for Long Island Iced Tea #1
Ingredients:
  1/2 oz Vodka
  1/2 oz Tequila
  1/2 oz Light Rum
  1/2 oz Gin
  1 Dash Coca-Cola
  # ignored Twist of Lemon Peel (or Lime)

Затем добавьте Верхушку дерева к соединению. У Вас могли быть правила, такие как:

grammar Cocktail
  rule cocktail
    title ingredients
  end

  rule title
    'Recipe for' S text:(.*) EOF
  end

  rule ingredients
    ingredient+
  end

  rule ingredient
    qty S liquid
  end
# ...
end

Который компилятор верхушки дерева преобразует в хороший рубиновый модуль. Затем:

parser = CocktailParser.new
r = parser.parse(recipe)
3
ответ дан 10 December 2019 в 02:55
поделиться

DSL Orion выглядит очень хорошим. Единственное изменение я возможно предложил бы от Вас "обновленный" код,

  1. Замена description с recipe. Это - более описательный термин
  2. Так как набор компонентов и действий фиксируется, свяжите компоненты с переменными, а не символами, т.е. Вы имеете vodka = :vodka определенный где-нибудь. Легче сказать

    водка соединения, джин и triple_sec # вместо использования: водка: джин и: triple_sec.

так или иначе это - незначительная гнида.

1
ответ дан 10 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: