The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

WebService::GData - Base object to inherit from.

SYNOPSIS

    package 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;
        }
        return $this;
    }

    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; 

    #create an object
    my $object = new WebService::MyService(name=>'test');

    $object->name;#test

    #overloaded string will dump the object with Data::Dumper;
    print $object;#$VAR1 = bless( { 'name' => 'test' }, 'WebService::MyService' );

DESCRIPTION

This package is a blueprint that you should inherit and extend. It offers a basic hashed based object creation via the word new.

All sub classes should be hash based. 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.

The following classes extends WebService::GData to implement their feature:

WebService::GData::Base

Implements the base get/post/insert/update/delete methods

WebService::GData::ClientLogin

Implements the ClientLogin authorization system

WebService::GData::Error

Represents a Google data protocol Error

WebService::GData::Query

Implements the basic query parameters and create a query string.

WebService::GData::Feed

Represents the basic tags found in a Atom Feed (JSON format).

A service in progress:

WebService::GData::YouTube

Implements some of the YouTube API functionalities.

CONSTRUCTOR

new

    Takes an hash which keys will be attached to the instance. You can also use install_in_package() to create setters/getters for these parameters.

    Parameters

    parameters:RefHash

    Returns object:RefHash

    Example:

        use WebService::GData; 
    
        #create an object
        my $object = new WebService::GData(firstname=>'doe',lastname=>'john',age=>'123');
    
        $object->{firstname};#doe
            

METHODS

__init

    This 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.

OVERLOAD

__to_string

    Overload the stringification quotes and display a dump of the instance by using Data::Dumper. You should overwrite it should you need to create a specific output.

SUBS

install_in_package

    Install in the package the methods/subs specified. Mostly use to avoid writting boiler plate getter/setter methods.

    Parameters

    subnames:ArrayRef - Should list the name of the methods you want to install in the package.
    callback:Sub - The callback will receive the name of the function. This callback should itself send back a function.
    package_name:Scalar (optional) - Add functions at distance by specifying an other module.

    Returns void

    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

    function_name_with_sub:Hash - Accept an hash which key is the function name and value a sub.

    Returns void

    Throws error:Hash - an hash containing the code: 'forbidden_access' and the content:'private method called outside of its package'.

    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};
            }
            

CONFIGURATION AND ENVIRONMENT

none

DEPENDENCIES

none

INCOMPATIBILITIES

none

BUGS AND LIMITATIONS

If 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)!

AUTHOR

shiriru <shirirulestheworld[arobas]gmail.com>

LICENSE AND COPYRIGHT

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.