Method: Object::Syck::Parser#load_documents
- Defined in:
- ext/syck/rubyext.c
#load_documents(*args) ⇒ Object
YAML::Syck::Parser.load_documents( IO or String ) { |doc| }
873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 |
# File 'ext/syck/rubyext.c', line 873
VALUE
syck_parser_load_documents(int argc, VALUE *argv, VALUE self)
{
VALUE port, proc, v, input, model;
SyckParser *parser;
struct parser_xtra *bonus;
rb_scan_args(argc, argv, "1&", &port, &proc);
input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input );
model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model );
Data_Get_Struct(self, SyckParser, parser);
syck_set_model( self, input, model );
bonus = (struct parser_xtra *)parser->bonus;
bonus->taint = syck_parser_assign_io(parser, &port);
bonus->resolver = rb_attr_get( self, s_resolver );
bonus->proc = 0;
while ( 1 )
{
/* Reset hash for tracking nodes */
bonus->data = rb_hash_new();
/* Parse a document */
v = syck_parse( parser );
if ( parser->eof == 1 )
{
break;
}
/* Pass document to block */
rb_funcall( proc, s_call, 1, v );
}
return Qnil;
}
|