]> git.wincent.com - wikitext.git/commitdiff
Fix handling of parse-time overrides
authorWincent Colaiuta <win@wincent.com>
Thu, 24 Apr 2008 08:48:17 +0000 (10:48 +0200)
committerWincent Colaiuta <win@wincent.com>
Thu, 24 Apr 2008 08:48:17 +0000 (10:48 +0200)
Before pulling an override out of a hash we should first check that the
corresponding key actually exists; otherwise we end up getting a nil
value. This nil value was enough to make the old specs pass, but they
weren't really testing what I though they were testing, so fix the
specs up too.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/parser.c
spec/indentation_spec.rb
spec/wikitext_spec.rb

index 821a9a445462ecb0ed27c3a42ce279b2dc37ceae..25b52fce36c83e4940176244aa0c51b59f26df0c 100644 (file)
@@ -939,10 +939,13 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
     VALUE indent = Qnil;
     if (!NIL_P(options) && TYPE(options) == T_HASH)
     {
-        indent = rb_hash_aref(options, ID2SYM(rb_intern("indent")));
-        base_indent = NUM2INT(indent);
-        if (base_indent < 0)
-            base_indent = 0;
+        if (rb_funcall(options, rb_intern("has_key?"), 1, ID2SYM(rb_intern("indent"))) == Qtrue)
+        {
+            indent = rb_hash_aref(options, ID2SYM(rb_intern("indent")));
+            base_indent = NUM2INT(indent);
+            if (base_indent < 0)
+                base_indent = 0;
+        }
     }
 
     // set up scanner
index 292c590da8dadfad5eba58e2a4882264a6d66454..2724f8243632c793481d44f6536dfe0f0e1b428b 100755 (executable)
@@ -47,12 +47,12 @@ describe Wikitext::Parser, 'indentation' do
   end
 
   it 'should complain if the "indent" option is nil' do
-    lambda { @parser.parse('* foo', :default => nil) }.should raise_error(TypeError)
+    lambda { @parser.parse('* foo', :indent => nil) }.should raise_error(TypeError)
   end
 
   it 'should complain if the "indent" options is not an integer' do
-    lambda { @parser.parse('* foo', :default => 'bar') }.should raise_error(TypeError)
-    lambda { @parser.parse('* foo', :default => /baz/) }.should raise_error(TypeError)
+    lambda { @parser.parse('* foo', :indent => 'bar') }.should raise_error(TypeError)
+    lambda { @parser.parse('* foo', :indent => /baz/) }.should raise_error(TypeError)
   end
 
   it 'should treat a negative "indent" as though it were zero' do
index eefbd4e38e0d3c6fff9eea1a231a939a772b5a33..a61536192550277095e03cc89b0f3f55b46be3f2 100755 (executable)
@@ -88,6 +88,12 @@ describe Wikitext::Parser do
       Wikitext::Parser.new(:treat_slash_as_special => false).treat_slash_as_special.should == false
     end
   end
+
+  describe 'overriding defaults at parse time' do
+    it 'should ignore unknown options' do
+      @parser.parse('foo', :bar => 'baz').should == "<p>foo</p>\n"
+    end
+  end
 end
 
 describe Wikitext::Parser, 'parsing non-ASCII input' do