This is an automated email from the git hooks/post-receive script. abe pushed a commit to tag alt-io-all-new-0.00 in repository libio-all-perl.
commit c6c1c345624bd249df4de62882e675c8c8f56453 Author: Ingy döt Net <i...@ingy.net> Date: Wed Jul 25 14:04:27 2012 -0700 ... --- README | 7 ++++--- lib/IO/All.pm | 13 +++++++------ lib/IO/All/File.pm | 16 ++++++++++++++++ lib/IO/All/Filesys.pm | 2 +- lib/IO/All/{Node.pm => IO.pm} | 4 ++-- lib/IO/All/OO.pm | 2 ++ t/file.t | 10 ++++++++++ t/hai.txt | 1 + 8 files changed, 43 insertions(+), 12 deletions(-) diff --git a/README b/README index 8cfd5b6..53fca74 100644 --- a/README +++ b/README @@ -47,7 +47,7 @@ Basic Principles of how IO::All should work * IO::All needs to be completely and consistently extensible * The extensions that ship with IO-All should be the same as third party extensions - * Extensions register capabilities with IO::All (tied to a scope) + * Plugins register capabilities with IO::All (tied to a scope) * IO::All operations can be strict or loose. Strict always throws errors on any possible error condition. Strict or loose should be determined by the presence of `use strict` in the scope (possibly). @@ -55,7 +55,7 @@ Basic Principles of how IO::All should work is loved by some and hated by others. It should probably be off by default for 2.0. -IO::All Extensions +IO::All Plugins Currently the extension API is fairly muddy. I would like the new API to require something like this: @@ -76,11 +76,12 @@ IO::All Extensions use IO::All -none; - Extensions can register 2 things: + Plugins can register 2 things: 1. Register a method (or methods) that will force a rebless in that class. 2. Register a regexp (or function) that will cause a rebless when the input to io(...) matches. + 3. Register overloads that the plugin responds to. These things are register according to the scope of the IO::All, so that the `io` function will do the right things. diff --git a/lib/IO/All.pm b/lib/IO/All.pm index 72cbd07..0e48c52 100644 --- a/lib/IO/All.pm +++ b/lib/IO/All.pm @@ -57,10 +57,9 @@ sub make_constructor { or $self->throw("Can't require $plugin_class: $@"); $self->register_methods($plugin_class); $self->register_overloads($plugin_class); - if (ref($self) eq $class) { - if ($plugin_class->can_upgrade($self)) { - $self->rebless($plugin_class); - } + if ($plugin_class->can_upgrade($self)) { + $self->rebless($plugin_class); + last; } } return $self; @@ -80,7 +79,7 @@ sub parse_args { unless $key =~ $arg_key_pattern; my $arg = [$1]; push @$arg, shift(@_) - while @_ and $_[0] !~ $arg_key_pattern; + while @_ and $_[0] !~ $arg_key_pattern; push @$args, $arg; } return $args; @@ -108,7 +107,9 @@ sub AUTOLOAD { my $self = shift; (my $method = $IO::All::AUTOLOAD) =~ s/.*:://; my $plugin_class = $self->methods->{$method} - or $self->throw("Can't locate object method '$method'"); + or $self->throw( + "Can't locate object method '$method' for '$self' object" + ); $self->rebless($plugin_class); $self->$method(@_); } diff --git a/lib/IO/All/File.pm b/lib/IO/All/File.pm index 57437c6..060b691 100644 --- a/lib/IO/All/File.pm +++ b/lib/IO/All/File.pm @@ -11,6 +11,8 @@ extends 'IO::All::Filesys'; option 'utf8'; +has handle => (); + # Upgrade from IO::All to IO::All::Dir use constant upgrade_methods => [qw(file print)]; @@ -33,6 +35,20 @@ sub file { return $self; } +sub open { + my $self = shift; + my $fh; + open $fh, '<', $self->name; + $self->handle($fh); + return $self; +} + +sub all { + my $self = shift; + my $fh = $self->open->handle; + return do { local $/; <$fh> } +} + sub print { my $self = shift; CORE::print(@_); diff --git a/lib/IO/All/Filesys.pm b/lib/IO/All/Filesys.pm index 119da43..15674d5 100644 --- a/lib/IO/All/Filesys.pm +++ b/lib/IO/All/Filesys.pm @@ -7,7 +7,7 @@ package IO::All::Filesys; use IO::All::OO; -extends 'IO::All::Node'; +extends 'IO::All::IO'; has name => (); option overload => (); diff --git a/lib/IO/All/Node.pm b/lib/IO/All/IO.pm similarity index 87% rename from lib/IO/All/Node.pm rename to lib/IO/All/IO.pm index ad818c7..46a43ea 100644 --- a/lib/IO/All/Node.pm +++ b/lib/IO/All/IO.pm @@ -1,11 +1,11 @@ ## -# name: IO::All::Node +# name: IO::All::IO # author: Ingy döt Net # abstract: Base Class for Various IO::All Objects # license: perl # copyright: 2012 -package IO::All::Node; +package IO::All::IO; use IO::All::OO; has upgrade_methods => ( default => sub { [] } ); diff --git a/lib/IO/All/OO.pm b/lib/IO/All/OO.pm index 882cdad..f9c4b51 100644 --- a/lib/IO/All/OO.pm +++ b/lib/IO/All/OO.pm @@ -63,6 +63,8 @@ sub field { }; } +package IO::All::OO::Object; + sub throw { my $self = shift; require Carp; diff --git a/t/file.t b/t/file.t new file mode 100644 index 0000000..6300e54 --- /dev/null +++ b/t/file.t @@ -0,0 +1,10 @@ +use Test::More tests => 3; + +use IO::All; + +is io('t/hai.txt')->all, "O HAI\n", + 'Implicit file works'; +is io->file('t/hai.txt')->all, "O HAI\n", + 'Explicit file works'; +is io('t/hai.txt')->file->all, "O HAI\n", + 'Implicit/Explicit file works'; diff --git a/t/hai.txt b/t/hai.txt new file mode 100644 index 0000000..d9fb8fe --- /dev/null +++ b/t/hai.txt @@ -0,0 +1 @@ +O HAI -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libio-all-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits