|
NAMEWebService::GData - Google data protocol v2.SYNOPSISpackage WebService::MyService; use WebService::GData;#strict/warnings turned on use base 'WebService::GData'; #this is the base implementation of the __init method in WebService::GData #it is call when new() is used. only overwrite it if necessary. sub __init { my ($this,%params) = @_; while(my ($prop,$val)=each %params){ $this->{$prop}=$val; } } WebService::GData::install_in_package([qw(firstname lastname age gender)],sub { my $func = shift; return sub { my $this = shift; return $this->{$func}; } }); #the above is equal to writing these simple getters: #sub firstname { # my $this = shift; # return $this->{firstname}; #} #sub lastname { # my $this = shift; # return $this->{lastname}; #} #sub age { # my $this = shift; # return $this->{age}; #} #sub gender { # my $this = shift; # return $this->{gender}; #} 1; use WebService::MyService; my $object = new WebService::MyService(name=>'test'); $object->name;#test #__set and __get are used to create automaticly getters and setters $object->age(24); $object->age();#24 $object->{age};#24 DESCRIPTIONWebService::GData module intends to implement the Google Data protocol and implements some services that use this protocol, like YouTube.This package is a blueprint that most packages in this module inherit from. It offers a simple hashed based object creation mechanism via the word new. If you want to pock into the instance, it's easy but everything that is not documented should be considered private. If you play around with undocumented properties/methods and that it changes,upgrading to the new version with all the extra new killer features will be very hard to do. so... dont. As an example, the following classes extend WebService::GData to implement their feature:
A service in progress:
CONSTRUCTORnewTakes an hash which keys will be attached to the
instance, $this. You can also use
"install_in_package()" to create
setters/getters or simply let the methods been redispatched automaticly.
Parameters
Returns
Example: my $object = new WebService::GData(firstname=>'doe',lastname=>'john',age=>'123'); $object->{firstname};#doe $object->firstname;#doe $object->firstname('billy'); $object->firstname;#billy METHODS__initThis method is called by the constructor
"new()". This function receives the
parameters set in "new()" and assign the
key/values pairs to the instance. You should overwrite it and add your own
logic if necessary.
Default implementation: sub __init { my ($this,%params) = @_; while(my ($prop,$val)=each %params){ $this->{$prop}=$val; } } OVERLOAD__to_stringOverload the stringification quotes and return the
object. You should overwrite it to create a specific output (Dump the object,
display a readable representation...).
equal Overload the comparison "==" by checking that
boch objects are hosted in the same memory slot.
AUTOLOADCalls to undefined methods on an instance are catched and dispatch to __get if the call does not contain any parameter or __set if parameters exist. You can overwrite these two methods in your package to meet your naming needs. For example, when you call $instance->dont_exist, you might want to look into $instance->{__DONT_EXIST} instead of the default $instance->{dont_exist}.__get This method catches all calls to undefined methods to
which no parameters are passed. If you call
$instance->unknown_method, the
"__get" method will return
$instance->{unknown_method} by default. The
"__get" method gets the instance and the
name of the function has parameters.
Below is the default implementation: sub __get { my ($this,$func) = @_; return $this->{$func}; } __set This method catches all calls to undefined methods to
which parameters are passed. If you call
$instance->unknown_method($val,$val2), the
"__set" method will set the parameters to
$instance->{unknown_method}
by default. When several parameters are passed, they are saved as an array
reference. The "__set" method gets the
instance,the name of the function and the parameters as its own arguments.
Below is the default implementation: sub __set { my ($this,$func,@args) = @_; $this->{$func}= @args == 1 ? $args[0] : \@args; return $this; } SUBSinstall_in_packageInstall in the package the methods/subs specified. Mostly
use to avoid writting boiler plate getter/setter methods and a bit more
efficient than AUTOLOAD methods as they are installed directly into the
package so it will not climb up a function chain call.
Parameters
Returns
Example: package Basic::User; use WebService::GData; use base 'WebService::GData'; #install simple setters; it could also be setter/getters WebService::GData::install_in_package([qw(firstname lastname age gender)],sub { my $func = shift;#firstname then lastname then age... return sub { my $this = shift; return $this->{$func}; } }); 1; #in user code: my $user = new Basic::User(firstname=>'doe',lastname=>'john',age=>100,gender=>'need_confirmation'); $user->age;#100 $user->firstname;#doe private Create a method that is private to the package. Calling a
private function from outside of the package will throw an error.
You can import the private method: use WebService::GData 'private'; Parameters
Returns
Throws
Example: package Basic::User; use WebService::GData 'private'; use base 'WebService::GData'; private my_secret_method => sub { }; #note the comma 1; #in user code: my $user = new Basic::User(); $user->my_secret_method();#throw an error eval { $user->my_secret_method(); }; if(my $error = $@){ #$error->{code}; #$error->{content}; } disable Overwrite a method so that it does nothing... Some
namespaces inherit from functionalities that are not required. The functions
will still be available but will just return the instance.
Parameters
Returns
Example: package Basic::User; use WebService::GData; use base 'WebService::GData::Feed'; WebService::GData::disable([qw(etag title)]); 1; #in user code: my $user = new Basic::User(); $user->etag("ddd")->title("dddd");#does nothing at all BUGS AND LIMITATIONSIf you do me the favor to _use_ this module and find a bug, please email me i will try to do my best to fix it (patches welcome)!AUTHORshiriru <shirirulestheworld[arobas]gmail.com>LICENSEThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Visit the GSP FreeBSD Man Page Interface. |