# perl6-WebService-GitHub [![Build Status](https://travis-ci.org/fayland/perl6-WebService-GitHub.svg?branch=master)](https://travis-ci.org/fayland/perl6-WebService-GitHub) *ALPHA STAGE, SUBJECT TO CHANGE* ## SYNOPSIS use WebServices::GitHub; my $gh = WebServices::GitHub.new( access-token => 'my-access-token' ); my $res = $gh.request('/user'); say $res.data.name; ## TODO Patches welcome * Break down modules (Users, Repos, Issues etc.) * Errors Handle * Auto Pagination * API Throttle ## Methods ### Args * `endpoint` useful for GitHub Enterprise. default to https://api.github.com * `access-token` Required for Authorized API Request * `auth_login` & `auth_password` Basic Authenticaation. useful to get `access-token`. * `per_page` from [Doc](https://developer.github.com/v3/#pagination), default to 30, max to 100. * `jsonp_callback` [JSONP Callback](https://developer.github.com/v3/#json-p-callbacks) * `time-zone` UTC by default, [Doc](https://developer.github.com/v3/#timezones) * `with` does the roles ``` my $gh = WebServices::GitHub.new( with => ('Debug') ); ``` ### Response * `raw` HTTP::Response instance * `data` JSON decoded data * `header(Str $field)` Get header of HTTP Response * `first-page-url`, `prev-page-url`, `next-page-url`, `last-page-url` Parsed from Link header, [Doc](https://developer.github.com/v3/#pagination) * `x-ratelimit-limit`, `x-ratelimit-remaining`, `x-ratelimit-reset` [Rate Limit](https://developer.github.com/v3/#rate-limiting) ## Examples ### Public Access without access-token #### get user info ``` my $gh = WebServices::GitHub.new; my $user = $gh.request('/users/fayland').data; say $user; ``` #### search repositories ``` use WebServices::GitHub::Search; my $search = WebServices::GitHub::Search.new; my $data = $search.repositories({ :q, :sort, :order }).data; ``` ### OAuth #### get token from user/login [examples/create_access_token.pl](examples/create_access_token.pl) ```perl6 use WebServices::GitHub::OAuth; my $gh = WebServices::GitHub::OAuth.new( auth_login => 'username', auth_password => 'password' ); my $auth = $gh.create_authorization({ :scopes(['user', 'public_repo', 'repo', 'gist']), # just ['public_repo'] :note<'test purpose'> }).data; say $auth; ``` ### Gist #### create a gist ``` use WebServices::GitHub::Gist; my $gist = WebServices::GitHub::Gist.new( access-token => %*ENV ); my $data = $gist.create_gist({ description => 'Test from perl6 WebServices::GitHub::Gist', public => True, files => { 'test.txt' => { content => "Created on " ~ now } } }).data; say $data; ``` #### update gist ``` $data = $gist.update_gist($id, { files => { "test_another.txt" => { content => "Updated on " ~ now } } }).data; ``` #### delete gist ``` $res = $gist.delete_gist($id); say 'Deleted' if $res.is-success; ```