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

NAME

Mojolicious::Plugin::Cloudinary - Talk with cloudinary.com

VERSION

0.01

DESCRIPTION

This module lets you interface to http://cloudinary.com. Its primary target is to be a Mojolicious plugin, but it can also be used as a generic module - just skip calling "register".

SYNOPSIS

With mojolicious

    package MyWebApp;
    use Mojo::Base 'Mojolicious';

    sub startup {
        my $self = shift;
        $self->plugin('Mojolicious::Plugin::Cloudinary', {
            cloud_name => $str,
            api_key => $str,
            api_secret => $str,
        });
    }

    package MyWebApp::SomeController;

    sub upload {
        my $self = shift;

        $self->render_later;
        $self->cloudinary_upload({
            file => $self->param('upload_param'),
            on_success => sub {
                my $res = shift;
                $self->render_json($res);
            },
            on_error => sub {
                my $res = shift || { error => 'Unknown' };
                $self->render_json($res);
            },
        });
    }

Standalone

    my $delay = Mojo::IOLoop->delay;
    my $cloudinary = Mojolicious::Plugin::Cloudinary->new(
                         cloud_name => '...',
                         api_key => '...',
                         api_secret => '...',
                     );

    $delay->begin;
    $cloudinary->upload({
        file => { file => $path_to_file },
        on_success => sub {
            # ...
            $delay->end;
        },
        on_error => sub {
            # ...
            $delay->end;
        },
    });

    # let's you do multiple upload() in parallel
    # just call $delay->begin once pr upload()
    # and $delay->end in each on_xxx callback
    $delay->wait;

ATTRIBUTES

cloud_name

Your cloud name from https://cloudinary.com/console

api_key

Your API key from https://cloudinary.com/console

api_secret

Your API secret from https://cloudinary.com/console

api_url

Default is http://api.cloudinary.com/v1_1.

private_cdn

Your private CDN url from http://api.cloudinary.com/v1_1.

public_cdn

Default is http://res.cloudinary.com.

METHODS

upload

    $self->upload({
        file => $binary_str|$url, # required
        timestamp => $epoch, # time()
        public_id => $str, # optional
        format => $str, # optional
        tags => ['foo', 'bar'], # optional
        on_success => sub {
            my($res) = @_;
            # ...
        },
        on_error => sub {
            my($res, $tx) = @_;
            # ...
        },
    });

Will upload a file to http://cloudinary.com using the parameters given "cloud_name" "api_key" and "api_secret". The file can be:

res in callbacks will be the JSON response from http://cloudinary.com as a hash ref. It may also be undef if something went wrong with the actual HTTP POST.

See also https://cloudinary.com/documentation/upload_images.

url_for

    $url_obj = $self->url_for("$public_id.$format", \%args);

This method will return a public URL to the image at http://cloudinary.com. It will use "private_cdn" or "public_cdn" and "cloud_name" to construct the URL. The return value is a Mojo::URL object.

Example %args:

    {
        w => 100, # width of image
        h => 150, # height of image
        secure => $bool, # use private_cdn or public_cdn
    }

register

Adds the helpers to your controller:

COPYRIGHT & LICENSE

See Oppstarter

AUTHOR

Jan Henning Thorsen - jan.henning@oppstarter.no