Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

This automatically creates DBIC::API::REST controllers for all the classes in your Catalyst application.

branch: master
README
NAME
    Catalyst::Helper::Controller::DBIC::API::REST

SYNOPSIS
        $ catalyst.pl MyApp
        $ cd MyApp
        $ script/myapp_create.pl controller API::REST DBIC::API::REST \
            MyApp::Schema MyApp::Model::DB


        ...

        package MyApp::Controller::API::REST::Producer;

        use strict;
        use warnings;
        use base qw/MyApp::ControllerBase::REST/;
        use JSON::XS;

        __PACKAGE__->config(
            action             =>  { setup => {
                                        PathPart => 'producer',
                                        Chained => '/api/rest/rest_base' }
                                    }, # define parent chain action and partpath
            class              =>  'DB::Producer',        # DBIC result class
            create_requires    =>  [qw/name/],            # columns required
                                                          # to create
            create_allows      =>  [qw//],                # additional non-required
                                                          # columns that
                                                          # create allows
            update_allows      =>  [qw/name/],            # columns that
                                                          # update allows
            list_returns       =>  [qw/producerid name/], # columns that
                                                          # list returns

            list_prefetch_allows => [ # every possible prefetch param allowed
                [qw/cd_to_producer/], { 'cd_to_producer' => [qw//] },
                [qw/tags/],           { 'tags'           => [qw//] },
                [qw/tracks/],         { 'tracks'         => [qw//] },
            ],

            list_ordered_by         => [ qw/producerid/ ],
                                        # order of generated list
            list_search_exposes     => [ qw/producerid name/ ],
                                        # columns that can be searched on via list
        );

DESCRIPTION
      This creates REST controllers according to the specifications at
      L<Catalyst::Controller::DBIC::API> and L<Catalyst::Controller::DBIC::API::REST>
      for all the classes in your Catalyst app.

      It creates the following files:

        MyApp/lib/MyApp/Controller/API.pm
        MyApp/lib/MyApp/Controller/API/REST.pm
        MyApp/lib/MyApp/Controller/API/REST/*
        MyApp/lib/MyApp/ControllerBase/REST.pm

      Individual class controllers are under MyApp/lib/MyApp/Controller/API/REST/*.

  CONFIGURATION
        The idea is to make configuration as painless and as automatic as possible, so most
        of the work has been done for you.

        There are 8 __PACKAGE__->config(...) options for L<Catalyst::Controller::DBIC::API/CONFIGURATION>.
        Here are the defaults.

  create_requires
        All non-nullable columns that are (1) not autoincrementing,
        (2) don't have a default value, are neither (3) nextvals,
        (4) sequences, nor (5) timestamps.

  create_allows
        All nullable columns that are (1) not autoincrementing,
        (2) don't have a default value, are neither (3) nextvals,
        (4) sequences, nor (5) timestamps.

  update_allows
        The union of create_requires and create_allows.

  list_returns
        Every column in the class.

  list_prefetch
        Nothing is prefetched by default.

  list_prefetch_allows
        (1) An arrayref consisting of the name of each of the class's
        has_many relationships, accompanied by (2) a hashref keyed on
        the name of that relationship, whose values are the names of
        its has_many's, e.g., in the "Producer" controller above, a
        Producer has many cd_to_producers, many tags, and many tracks.
        None of those classes have any has_many's:

        list_prefetch_allows    =>  [
            [qw/cd_to_producer/], { 'cd_to_producer'  => [qw//] },
            [qw/tags/],           { 'tags'            => [qw//] },
            [qw/tracks/],         { 'tracks'          => [qw//] },
        ],

  list_ordered_by
        The primary key.

  list_search_exposes
        (1) An arrayref consisting of the name of each column in the class,
        and (2) a hashref keyed on the name of each of the class's has many
        relationships, the values of which are all the columns in the
        corresponding class, e.g.,

        list_search_exposes => [
            qw/cdid artist title year/,
            { 'cd_to_producer' => [qw/cd producer/] },
            { 'tags'           => [qw/tagid cd tag/] },
            { 'tracks'         => [qw/trackid cd position title last_updated_on/] },
        ],    # columns that can be searched on via list

CONTROLLERBASE
        Following the advice in L<Catalyst::Controller::DBIC::API/EXTENDING>, this
        module creates an intermediate class between your controllers and
        L<Catalyst::Controller::DBIC::API::REST>.  It contains one method, create,
        which serializes object information and stores it in the stash, which is
        not the default behavior.

METHODS
  mk_compclass
        This is the meat of the helper. It writes the directory structure if it is
        not in place, API.pm, REST.pm, the controllerbase, and the result class
        controllers. It replaces $helper->{} values as it goes through, rendering
        the files for each.

AUTHOR
    Amiri Barksdale <amiri@arisdottle.net>

CONTRIBUTORS
    Franck Cuny (lumberjaph) <franck@lumberjaph.net>

    Chris Weyl (RsrchBoy) <cweyl@alumni.drew.edu>

SEE ALSO
    Catalyst::Controller::DBIC::API Catalyst::Controller::DBIC::API::REST
    Catalyst::Controller::DBIC::API::RPC

LICENSE
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

Something went wrong with that request. Please try again.