CanvasCloud

 view release on metacpan or  search on metacpan

lib/CanvasCloud/API.pm  view on Meta::CPAN

sub uri {
    my $self = shift;
    my $rest = inner() || '';
    $rest = '/' if ( defined $rest && $rest && $rest !~ /^\// );
    return sprintf('%s://%s/api/v1', $self->scheme, $self->domain) . $rest;
}


sub request {
    my ( $self, $method, $uri ) = @_;
    my $r = HTTP::Request->new( $method => $uri );
    $r->header( 'Authorization' => 'Bearer '.$self->token );
    return $r;
}


sub send {
    my ( $self, $request ) = @_;
    $request->header( 'Content-Type' => 'application/x-www-form-urlencoded' ) if ( $request->method eq 'POST' && $request->content_type eq '' );
    warn join("\n", 'REQUEST:--->',$request->as_string, 'REQUEST:<----'), "\n" if ( $self->debug );
    my $resp = $self->ua->request( $request );

lib/CanvasCloud/API.pm  view on Meta::CPAN

                $struct{$t} = $url;
                $TYPE = $t;
                last;
            }
        }
        die 'Bad Link: none of listed relation found - '.join(', ', keys %struct) unless ( $TYPE );
    }
    return \%struct;
}

## Taken from HTTP::Request::Common


sub encode_url {
   my ( $self, $content ) = @_;
   my $url = URI->new('http:');
   $url->query_form( ref($content) eq 'HASH' ? %$content : @$content );
   $content = $url->query;
   $content =~ s/(?<!%0D)%0A/%0D%0A/g if defined($content); ## html 4.01 line breaks CR LF
   return $content;
}

lib/CanvasCloud/API.pm  view on Meta::CPAN

LWP::UserAgent

=head1 METHODS

=head2 uri

Base uri for Canvas LMS

=head2 request( $method, $uri )

returns HTTP::Request;

request creates a HTTP::Request->new( $method => $uri ) it then sets the 'Authorization' header

=head2 send( $request )

Attempts to send request to Canvas recursively depending on return Link header.
Finally returns a hashref data structure as response from Canvas.

=head2 decode( 'jsonstring' );

returns results from from_json on jsonstring

t/100-site-api.t  view on Meta::CPAN

use Test::More;

require_ok( 'CanvasCloud::API' );

ok my $api = CanvasCloud::API->new( domain => 'localhost', token => '!wow!'  ), 'new object';

is $api->uri, 'https://localhost/api/v1', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

done_testing();

t/101-site-api-account.t  view on Meta::CPAN

use Test::More;

require_ok( 'CanvasCloud::API::Account' );

ok my $api = CanvasCloud::API::Account->new( domain => 'localhost', token => '!wow!', account_id => 1  ), 'new object';

is $api->uri, 'https://localhost/api/v1/accounts/1', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

done_testing();

t/102-site-api-account-term.t  view on Meta::CPAN

use Test::More;

require_ok( 'CanvasCloud::API::Account::Term' );

ok my $api = CanvasCloud::API::Account::Term->new( domain => 'localhost', token => '!wow!', account_id => 1  ), 'new object';

is $api->uri, 'https://localhost/api/v1/accounts/1/terms', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

TODO: {
    local $TODO = 'Implement local test server';
    ok $api->list, 'call list on reports object';
}

done_testing();

t/103-site-api-account-report.t  view on Meta::CPAN

use Test::More;

require_ok( 'CanvasCloud::API::Account::Report' );

ok my $api = CanvasCloud::API::Account::Report->new( domain => 'localhost', token => '!wow!', account_id => 1  ), 'new object';

is $api->uri, 'https://localhost/api/v1/accounts/1/reports', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

TODO: {
    local $TODO = 'Implement local test server';

    ok $api->list, 'call list on reports object';
}

done_testing();

t/104-site-api-account-sisimport.t  view on Meta::CPAN

use Test::More;
use FindBin;

require_ok( 'CanvasCloud::API::Account::SISImport' );

ok my $api = CanvasCloud::API::Account::SISImport->new( domain => 'localhost', token => '!wow!', account_id => 1  ), 'new object';

is $api->uri, 'https://localhost/api/v1/accounts/1/sis_imports', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

TODO: {
    local $TODO = 'Implement local test server';

    ok $api->sendzip( $FindBin::Bin .'/104-site-api-account-sisimport.t'),   'call sendzip on sisimport object';
    ok $api->status(1), 'call zipstatus on sisimport object';
}

done_testing();

t/105-site-api-account-outcomeimport.t  view on Meta::CPAN

use Test::More;
use FindBin;

require_ok( 'CanvasCloud::API::Account::OutcomeImport' );

ok my $api = CanvasCloud::API::Account::OutcomeImport->new( domain => 'localhost', token => '!wow!', account_id => 1  ), 'new object';

is $api->uri, 'https://localhost/api/v1/accounts/1/outcome_imports', 'uri is correct';

isa_ok $api->request( 'GET', $api->uri ), 'HTTP::Request';

TODO: {
    local $TODO = 'Implement local test server';

    ok $api->sendcsv( $FindBin::Bin .'/104-site-api-account-outcomeimport.t'),   'call sendcsv on OutcomeImport object';
    ok $api->status(1), 'call status on OutcomeImport object';
}

done_testing();



( run in 0.418 second using v1.01-cache-2.11-cpan-de7293f3b23 )