Name

    Web::ComposableRequest - Composable request class for web frameworks

Synopsis

       use Web::ComposableRequest;
    
       # List the roles to be applied to the request object base class
       my $config  = {
          prefix        => 'my_app',
          request_roles => [ 'L10N', 'Session', 'Cookie', 'JSON', 'Static' ], };
    
       # Construct a request object factory
       my $factory = Web::ComposableRequest->new( config => $config );
    
       # Request data provided by the web framework
       my $args    = 'arg1/arg2/arg_3';
       my $query   = { mid => '123_4' };
       my $cookie  = 'my_app_cookie1=key1%7Eval1%2Bkey2%7Eval2; '
                   . 'my_app_cookie2=key3%7Eval3%2Bkey4%7Eval4';
       my $input   = '{ "key": "value_1" }';
       my $env     = { CONTENT_LENGTH  => 20,
                       CONTENT_TYPE    => 'application/json',
                       HTTP_COOKIE     => $cookie,
                       HTTP_HOST       => 'localhost:5000',
                       PATH_INFO       => '/Getting-Started',
                       'psgi.input'    => IO::String->new( $input ),
                       'psgix.session' => {},
                     };
    
       # Construct a new request object
       my $req     = $factory->new_from_simple_request( {}, $args, $query, $env );

Description

    Composes a request class from a base class plus a selection of applied
    roles

Configuration and Environment

    Defines the following attributes;

    buildargs

      A code reference. The default when called returns it's second
      argument. It is called with the factory object reference and the
      attributes for constructing the request. It is expected to return the
      hash reference used to construct the request object

    config

      A configuration object created by passing the "config_attr" to the
      constructor of the "config_class"

    config_attr

      Either a hash reference or an object reference or undefined.
      Overrides the hard coded configuration class defaults

    config_class

      A non empty simple string which is the name of the base configuration
      class

    request_class

      A non empty simple string which is the name of the base request class

Subroutines/Methods

 new_from_simple_request

       my $req = $factory->new_from_simple_request( $opts, $args, $query, $env );

    Returns a request object representing the passed parameters. The $opts
    hash reference is used to directly set attributes in the request
    object. The $args parameter is either a string of arguments after the
    path in the URI or an upload object reference. The $query hash
    reference are the keys and values of the URI query parameters, and the
    $env hash reference is the Plack environment

Diagnostics

    None

Dependencies

    CGI::Simple

    Class::Inspector

    Exporter::Tiny

    HTTP::Body

    HTTP::Message

    JSON::MaybeXS

    Moo

    Subclass::Of

    Try::Tiny

    URI

    Unexpected

Incompatibilities

    There are no known incompatibilities in this module

Bugs and Limitations

    There are no known bugs in this module. Please report problems to
    http://rt.cpan.org/NoAuth/Bugs.html?Dist=Web-ComposableRequest. Patches
    are welcome

Acknowledgements

    Larry Wall - For the Perl programming language

Author

    Peter Flanigan, <pjfl@cpan.org>

License and Copyright

    Copyright (c) 2017 Peter Flanigan. All rights reserved

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

    This program is distributed in the hope that it will be useful, but
    WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE