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 )