Permalink
Browse files

* ext/psych/parser.c (parse): parse method can take an option file

  name for use in exception messages.
* test/psych/test_parser.rb: corresponding tests.
  • Loading branch information...
1 parent 9d43114 commit 7aad593c5e6e37e5b5f218b51a91cc005d10a3ac @tenderlove tenderlove committed Dec 6, 2011
Showing with 25 additions and 9 deletions.
  1. +6 −0 CHANGELOG.rdoc
  2. +1 −1 Rakefile
  3. +11 −8 ext/psych/parser.c
  4. +7 −0 test/psych/test_parser.rb
View
@@ -1,3 +1,9 @@
+Wed Nov 30 09:09:37 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): parse method can take an option file
+ name for use in exception messages.
+ * test/psych/test_parser.rb: corresponding tests.
+
Tue Nov 22 04:46:22 2011 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych.rb: remove autoload from psych
View
@@ -11,7 +11,7 @@ end
gem 'rake-compiler', '>= 0.4.1'
require "rake/extensiontask"
-Hoe.plugin :debugging, :doofus, :git, :gemspec, :isolate
+Hoe.plugin :doofus, :git, :gemspec, :isolate
$hoe = Hoe.spec 'psych' do
developer 'Aaron Patterson', 'aaron@tenderlovemaking.com'
View
@@ -84,8 +84,9 @@ static VALUE make_exception(yaml_parser_t * parser, VALUE path)
*
* See Psych::Parser and Psych::Parser#handler
*/
-static VALUE parse(VALUE self, VALUE yaml)
+static VALUE parse(int argc, VALUE *argv, VALUE self)
{
+ VALUE yaml, path;
yaml_parser_t * parser;
yaml_event_t event;
int done = 0;
@@ -96,6 +97,13 @@ static VALUE parse(VALUE self, VALUE yaml)
#endif
VALUE handler = rb_iv_get(self, "@handler");
+ if (rb_scan_args(argc, argv, "11", &yaml, &path) == 1) {
+ if(rb_respond_to(yaml, id_path))
+ path = rb_funcall(yaml, id_path, 0);
+ else
+ path = rb_str_new2("<unknown>");
+ }
+
Data_Get_Struct(self, yaml_parser_t, parser);
if (OBJ_TAINTED(yaml)) tainted = 1;
@@ -114,12 +122,7 @@ static VALUE parse(VALUE self, VALUE yaml)
while(!done) {
if(!yaml_parser_parse(parser, &event)) {
- VALUE path, exception;
-
- if(rb_respond_to(yaml, id_path))
- path = rb_funcall(yaml, id_path, 0);
- else
- path = rb_str_new2("<unknown>");
+ VALUE exception;
exception = make_exception(parser, path);
yaml_parser_delete(parser);
@@ -392,7 +395,7 @@ void Init_psych_parser()
rb_require("psych/syntax_error");
ePsychSyntaxError = rb_define_class_under(mPsych, "SyntaxError", rb_eSyntaxError);
- rb_define_method(cPsychParser, "parse", parse, 1);
+ rb_define_method(cPsychParser, "parse", parse, -1);
rb_define_method(cPsychParser, "mark", mark, 0);
rb_define_method(cPsychParser, "external_encoding=", set_external_encoding, 1);
@@ -32,6 +32,13 @@ def setup
@handler.parser = @parser
end
+ def test_filename
+ ex = assert_raises(Psych::SyntaxError) do
+ @parser.parse '--- `', 'omg!'
+ end
+ assert_match 'omg!', ex.message
+ end
+
def test_line_numbers
assert_equal 0, @parser.mark.line
@parser.parse "---\n- hello\n- world"

0 comments on commit 7aad593

Please sign in to comment.