Created
January 15, 2010 00:36
-
-
Save tsommer/277659 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
grammar Promo | |
rule root | |
empty rules:(trigger_or_effect empty)* { | |
def triggers | |
rules.elements.select { |r| r.elements.first.respond_to?(:trigger) }.map { |r| r.elements.first.trigger } | |
rescue NameError # nil for some object | |
[] | |
end | |
def effect | |
rules.elements.find { |r| r.elements.first.respond_to?(:effect) }.elements.first.effect | |
rescue NameError # nil for some object | |
nil | |
end | |
} | |
end | |
rule trigger_or_effect | |
"spend $" amount_in_cents " on product group " name { | |
def trigger | |
PromotionTrigger.new(:test_type => "MinimumValueSpendOnProductGroup", | |
:test_data => { :value_in_cents => amount_in_cents.value, :group => name.text_value }) | |
end | |
} | |
/ | |
"spend $" amount_in_cents { | |
def trigger | |
PromotionTrigger.new(:test_type => "MinimumShoppingCartValue", | |
:test_data => amount_in_cents.value) | |
end | |
} | |
/ | |
"and get $" amount_in_cents " off" { | |
def effect | |
PromotionEffect.new(:effect_type => "AddDiscount", | |
:effect_data => amount_in_cents.value) | |
end | |
} | |
/ | |
"and get free shipping" { | |
def effect | |
PromotionEffect.new(:effect_type => "SetFreightCost", | |
:effect_data => 1199) | |
end | |
} | |
end | |
rule amount_in_cents | |
[0-9]+ ("\." [0-9]+)? { | |
def value | |
(text_value.to_f * 100).round | |
end | |
} | |
end | |
rule name | |
[a-zA-Z0-9 -_]+ | |
end | |
rule empty | |
[\n\t\r]* | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment