Commits

shl...@52c325ad-5fd0-0310-8a0f-c43feede02cc  committed 76d52e2

Implemented the JSON::Writer.

  • Participants
  • Parent commits bf2f78b

Comments (0)

Files changed (3)

File File-Dir-Dumper/MANIFEST

 lib/File/Dir/Dumper/Base.pm
 lib/File/Dir/Dumper.pm
 lib/File/Dir/Dumper/Stream/JSON/Reader.pm
+lib/File/Dir/Dumper/Stream/JSON/Writer.pm
 Makefile.PL
 MANIFEST
 META.yml

File File-Dir-Dumper/lib/File/Dir/Dumper/Stream/JSON/Writer.pm

+package File::Dir::Dumper::Stream::JSON::Writer;
+
+use warnings;
+use strict;
+
+use base 'File::Dir::Dumper::Base';
+
+use Carp;
+
+use JSON;
+
+__PACKAGE__->mk_accessors(qw(_out));
+
+=head1 NAME
+
+File::Dir::Dumper::Stream::JSON::Writer - writer for a stream of JSON data.
+
+=head1 VERSION
+
+Version 0.0.1
+
+=cut
+
+our $VERSION = '0.0.1';
+
+=head1 SYNOPSIS
+
+    use File::Dir::Dumper::Stream::JSON::Writer;
+
+    my $writer = File::Dir::Dumper::Stream::JSON::Writer->new(
+        {
+            output => $output_file_handle,
+        }
+    );
+
+    $writer->put($token);
+
+    $writer->put($another_token);
+
+    .
+    .
+    .
+    
+    $writer->close();
+
+=head1 METHODS
+
+=head2 $self->new({ output => $output_filehandle})
+
+Initializes a new object that writes to the filehandle $output_filehandle.
+
+=head2 $self->put($token)
+
+Outputs the next token as serialized.
+
+=head2 $self->close()
+
+Closes the output filehandle.
+
+=cut
+
+sub _init
+{
+    my $self = shift;
+    my $args = shift;
+
+    $self->_out($args->{output});
+
+    $self->_init_stream();
+
+    return;
+}
+
+sub _print
+{
+    my $self = shift;
+    my $line = shift;
+
+    print {$self->_out()} $line, "\n";
+}
+
+sub _init_stream
+{
+    my $self = shift;
+
+    $self->_print("# JSON Stream by Shlomif - Version 0.2.0");
+
+    return;
+}
+
+sub put
+{
+    my $self = shift;
+    my $token = shift;
+
+    $self->_print(to_json($token));
+    $self->_print("--/f");
+
+    return;
+}
+
+sub close
+{
+    my $self = shift;
+
+    return close($self->_out());
+}
+
+=head1 AUTHOR
+
+Shlomi Fish, C<< <shlomif@cpan.org> >>
+
+=head1 BUGS
+
+Please report any bugs or feature requests to C<bug-file-dir-dumper at rt.cpan.org>, or through
+the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Dir-Dumper>.  I will be notified, and then you'll
+automatically be notified of progress on your bug as I make changes.
+
+
+
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc File::Dir::Dumper
+
+
+You can also look for information at:
+
+=over 4
+
+=item * RT: CPAN's request tracker
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=File-Dir-Dumper>
+
+=item * AnnoCPAN: Annotated CPAN documentation
+
+L<http://annocpan.org/dist/File-Dir-Dumper>
+
+=item * CPAN Ratings
+
+L<http://cpanratings.perl.org/d/File-Dir-Dumper>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/File-Dir-Dumper>
+
+=back
+
+
+=head1 ACKNOWLEDGEMENTS
+
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2008 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT/X11 Licence.
+
+=cut
+
+1; # End of File::Dir::Dumper

File File-Dir-Dumper/t/test-stream.t

 use strict;
 use warnings;
 
-use Test::More tests => 8;
+use Test::More tests => 12;
 
 use IO::String;
 
-# use File::Dir::Dumper::Stream::JSON::Writer;
+use File::Dir::Dumper::Stream::JSON::Writer;
 use File::Dir::Dumper::Stream::JSON::Reader;
 
 {
     ok(!defined($reader->fetch), "No more tokens");
 }
 
+{
+    my $buffer = "";
+
+    my $buf_out = IO::String->new($buffer);
+
+    my $writer = File::Dir::Dumper::Stream::JSON::Writer->new(
+        {
+            output => $buf_out,
+        }
+    );
+
+    $writer->put({type => "FooType", place => "home"});
+
+    $writer->put({type => "BarType", array => [qw(the perl gods help them that help themselves)],});
+
+    $writer->close();
+
+    my $in = IO::String->new($buffer);
+
+    my $reader = File::Dir::Dumper::Stream::JSON::Reader->new(
+        {
+            input => $in,
+        }
+    );
+
+    # TEST
+    ok ($reader, "Reader was initialised");
+
+    # TEST
+    is_deeply(scalar($reader->fetch()),
+        {type => "FooType", place => "home"},
+        "->fetch() reads what writer wrote",
+    );
+
+    # TEST
+    is_deeply(scalar($reader->fetch()),
+        {
+            type => "BarType",
+            array => [qw(the perl gods help them that help themselves)],
+        },
+        "->fetch works for second token (containing a hashref)",
+    );
+
+    # TEST
+    ok(!defined($reader->fetch), "No more tokens");
+}
+