From 87e0a977e5b70ab22fba4eb7b309bd1c92ae8412 Mon Sep 17 00:00:00 2001 From: Ash Berlin Date: Fri, 19 Apr 2013 14:48:57 +0100 Subject: Allow _add_methods and _attach_spec_to_class to be subclassed. For instance I have plans to parse Google's discovery documents which have the right information but are in a different format to SPORE specs. --- lib/Net/HTTP/Spore.pm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'lib/Net') diff --git a/lib/Net/HTTP/Spore.pm b/lib/Net/HTTP/Spore.pm index d4fd8af..d3b2165 100644 --- a/lib/Net/HTTP/Spore.pm +++ b/lib/Net/HTTP/Spore.pm @@ -22,7 +22,7 @@ sub new_from_string { Class::MOP::Class->create_anon_class( superclasses => ['Net::HTTP::Spore::Core'] ); - my $spore_object = _attach_spec_to_class($string, \%args, $spore_class); + my $spore_object = $class->_attach_spec_to_class($string, \%args, $spore_class); return $spore_object; } @@ -42,7 +42,7 @@ sub new_from_strings { my $spore_object = undef; foreach my $string (@strings) { - $spore_object = _attach_spec_to_class($string, $opts, $spore_class, $spore_object); + $spore_object = $class->_attach_spec_to_class($string, $opts, $spore_class, $spore_object); } return $spore_object; } @@ -75,7 +75,7 @@ sub new_from_specs { } sub _attach_spec_to_class { - my ( $string, $opts, $class, $object ) = @_; + my ( $class, $string, $opts, $spore_class, $object ) = @_; my $spec; try { @@ -98,9 +98,9 @@ sub _attach_spec_to_class { } if ( !$object ) { - $object = $class->new_object(%$opts); + $object = $spore_class->new_object(%$opts); } - $object = _add_methods( $object, $spec->{methods} ); + $object = $class->_add_methods( $object, $spec->{methods} ); } catch { Carp::confess( "unable to create new Net::HTTP::Spore object: " . $_ ); @@ -136,13 +136,13 @@ sub _read_spec { } sub _add_methods { - my ($class, $methods_spec) = @_; + my ($class, $spore, $methods_spec) = @_; foreach my $method_name (keys %$methods_spec) { - $class->meta->add_spore_method($method_name, + $spore->meta->add_spore_method($method_name, %{$methods_spec->{$method_name}}); } - $class; + $spore; } 1; -- cgit 1.4.1