=encoding utf8

=head1 NAME

Pastebin::Gist - Perl 6 interface to https://gist.github.com/

=head1 SYNOPSIS

    use Pastebin::Gist;
    my $p = Pastebin::Gist.new(
        token => '3f2b4ca292960fafc63fb6798f148e3b47ea9fff',
    );

    my $paste_url = $p.paste("<foo>bar</foo>");
    my $paste_url = $p.paste(
        {
            'file1.p6' => { content => "Paste content 1" },
            'meow.css' => { content => "Paste content 2" },
        },
        desc => "Foo Bar",
        public => 0,
    );

=head1 DESCRIPTION

This module allows to paste to create GitHub Gists as retrieve them.

=head1 METHODS

=head2 C<new>

    # Assuming PASTEBIN_GIST_TOKEN env var has the token:
    my $p = Pastebin::Gist.new;

    # Set token via an argument:
    my $p = Pastebin::Gist.new(
        token => '3f2b4ca292960fafc63fb6798f148e3b47ea9fff',
    )

Creates new C<Pastebin::Gist> object. Accepts the following settings:

=head3 C<token>

    token => '3f2b4ca292960fafc63fb6798f148e3b47ea9fff'

B<Mandatory>. To use this module you need to
L<create a GitHub token|https://github.com/settings/tokens>. Only the C<gist>
permission is needed.

You can avoid providing the C<token> argument by setting the
C<PASTEBIN_GIST_TOKEN> environmental variable to the value of your token.

=head2 C<paste>

    my $paste_url = $p.paste('Paste content');
    my $paste_url = $p.paste('Paste content', filename => 'foo.p6');
    my $paste_url = $p.paste(
        {
            'file1.p6' => { content => "Paste content 1" },
            'meow.css' => { content => "Paste content 2" },
        },
        desc => 'Optional summary',
        public => True,
    );

B<Returns> URL to the created paste (e.g.
L<https://gist.github.com/5590bc07b8d5bd8fd98d>).
First positional argument can either be a string of content to paste or
a hashref where keys are filenames and values are hashrefs with
values key C<content> set to content of files to paste. Using a hashref
allows you to make a gist with multiple files. All other arguments
are optional and are as follows:

=head3 C<desc>

    desc => 'Optional summary',

B<Optional>. Provides the description (summary) of the gist. By default
not specified.

=head3 C<public>

    public => True,

B<Optional>. Takes C<True> or C<False> values. If set to C<True>, your
gist will be visible in search results and I<recent gists> page.
B<Defaults to:> C<False>.

=head3 C<filename>

    filename => "Foo.p6"

B<Optional>. Applies only when the first positional argument to
L</paste> is a string. Specifies the filename to use for your gist
(affects syntax highlighting). B<Defaults to:> C<nopaste.txt>.

Note: L<GitHub's API docs|https://developer.github.com/v3/gists/#create-a-gist>
have this blurb in them:

    Don't name your files "gistfile" with a numerical suffix.
    This is the format of the automatic naming scheme that
    Gist uses internally.

It tells you not to use files C<gistfile3> or C<gistfile33.txt>. Behaviour
when using this types of values for C<filename> is not defined.

=head2 C<fetch>

    my ( $files, $desc )
    = $p.fetch('https://gist.github.com/5590bc07b8d5bd8fd98d');

    my ( $files, $desc ) = $p.fetch('5590bc07b8d5bd8fd98d');
    say "Title: $desc";
    for $files.keys {
        say "File: $_\nContent:\n$files{$_}";
    }

B<Returns> a two-item list: files in the gist and gist's title.
B<Takes> one mandatory argument: a full URL or just the
ID number of the gist  you want to retrieve. The C<$files> is a hashref,
where keys are file names and values are the file's contents.

=head1 REPOSITORY

Fork this module on GitHub:
L<https://github.com/zoffixznet/perl6-Pastebin-Gist>

=head1 BUGS

To report bugs or request features, please use
L<https://github.com/zoffixznet/perl6-Pastebin-Gist/issues>

=head1 AUTHOR

Zoffix Znet L<http://zoffix.com/>

=head1 LICENSE

You can use and distribute this module under the same terms as Perl 6
itself. See the C<LICENSE> file included in this distribution for complete
details.

=cut
