diff --git a/lib/ruby-handlebars/parser.rb b/lib/ruby-handlebars/parser.rb index 997534a..4a9c855 100644 --- a/lib/ruby-handlebars/parser.rb +++ b/lib/ruby-handlebars/parser.rb @@ -22,6 +22,7 @@ class Parser < Parslet::Parser rule(:as_kw) { str('as') } rule(:identifier) { (else_kw >> space? >> dccurly).absent? >> match['@\-a-zA-Z0-9_\?'].repeat(1) } + rule(:directory) { (else_kw >> space? >> dccurly).absent? >> match['@\-a-zA-Z0-9_\/\?'].repeat(1) } rule(:path) { identifier >> (dot >> (identifier | else_kw)).repeat } rule(:nocurly) { match('[^{}]') } @@ -96,7 +97,7 @@ class Parser < Parslet::Parser docurly >> gt >> space? >> - identifier.as(:partial_name) >> + directory.as(:partial_name) >> space? >> dccurly } diff --git a/spec/handlebars_spec.rb b/spec/handlebars_spec.rb index f47dc3b..141c331 100644 --- a/spec/handlebars_spec.rb +++ b/spec/handlebars_spec.rb @@ -57,6 +57,16 @@ def evaluate(template, args = {}) expect(evaluate("Hello {{> plic}}")).to eq("Hello Plic") end + it 'using a name with a slash' do + hbs.register_partial('parent/plic', "Plic") + expect(evaluate("Hello {{> parent/plic}}")).to eq("Hello Plic") + end + + it 'using a name that begins with a slash' do + hbs.register_partial('/parent/plic', "Plic") + expect(evaluate("Hello {{> /parent/plic}}")).to eq("Hello Plic") + end + it 'using context' do hbs.register_partial('brackets', "[{{name}}]") expect(evaluate("Hello {{> brackets}}", {name: 'world'})).to eq("Hello [world]")