adjusting tokenizer regex again

Oleg committed Nov 03, 2010
commit 5f9eceb812b5d25d035d62c078b78e27214f9eb9
Showing 4 changed files with 22 additions and 6 deletions
README.md +1 -1
@@ @@ -14,7 +14,7 @@ Add gem definition to your Gemfile:
config.gem 'comfortable_mexican_sofa'
Then from the Rails project's root run:
-
+
bundle install
rails g cms
rake db:migrate
comfortable_mexican_sofa/cms_tag.rb b/lib/comfortable_mexican_sofa/cms_tag.rb +1 -1
@@ @@ -6,7 +6,7 @@
# end
module CmsTag
- TOKENIZER_REGEX = /(\{\{\s*cms:.*?\}\})|((?:[^\{\{]|\{\{(?!\s*cms:.*?\}\}))+)/
+ TOKENIZER_REGEX = /(\{\{\s*cms:[^{}]*\}\})|((?:\{?[^{])+|\{+)/
attr_accessor :params,
:parent
test/unit/cms_tag_test.rb +16 -4
@@ @@ -5,13 +5,25 @@ class CmsTagTest < ActiveSupport::TestCase
def test_tokenizer_regex
regex = CmsTag::TOKENIZER_REGEX
+ tokens = 'text { text } text'.scan(regex)
+ assert_equal nil, tokens[0][0]
+ assert_equal 'text { text } text', tokens[0][1]
+
tokens = 'content<{{cms:some_tag content'.scan(regex)
- assert_equal nil, tokens[0][0]
- assert_equal 'content<{{cms:some_tag content', tokens[0][1]
+ assert_equal nil, tokens[0][0]
+ assert_equal 'content<', tokens[0][1]
+ assert_equal nil, tokens[1][0]
+ assert_equal '{{', tokens[1][1]
+ assert_equal nil, tokens[2][0]
+ assert_equal 'cms:some_tag content', tokens[2][1]
tokens = 'content<{{cms some_tag}}>content'.scan(regex)
- assert_equal nil, tokens[0][0]
- assert_equal 'content<{{cms some_tag}}>content', tokens[0][1]
+ assert_equal nil, tokens[0][0]
+ assert_equal 'content<', tokens[0][1]
+ assert_equal nil, tokens[1][0]
+ assert_equal '{{', tokens[1][1]
+ assert_equal nil, tokens[2][0]
+ assert_equal 'cms some_tag}}>content',tokens[2][1]
tokens = 'content<{{cms:some_tag}}>content'.scan(regex)
assert_equal nil, tokens[0][0]
test/unit/cms_tags/partial_test.rb +4 -0
@@ @@ -32,6 +32,10 @@ class PartialTest < ActiveSupport::TestCase
assert_equal "<%= render :partial => 'path/to/partial' %>", tag.content
assert_equal "<%= render :partial => 'path/to/partial' %>", tag.render
+ tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial:param1}}')
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1'} %>", tag.content
+ assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1'} %>", tag.render
+
tag = CmsTag::Partial.initialize_tag(cms_pages(:default), '{{cms:partial:path/to/partial:param1:param2}}')
assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1', :param_2 => 'param2'} %>", tag.content
assert_equal "<%= render :partial => 'path/to/partial', :locals => {:param_1 => 'param1', :param_2 => 'param2'} %>", tag.render