The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Mojolicious::Plugin::ORM::DBix - Easily load and access DBIx::Class functionality in Mojolicious apps

SYNOPSIS

  # Register plugin
  $self->plugin('ORM::DBIx' => {
    dsn                  => $conf->{dsn},
    username             => $conf->{user},
    password             => $conf->{pass},
  });

  ...

  # access in controller
  sub get_user($self) {
    my $user = $self->model("User")->find($self->req->param('id'));
    $self->render(json => {user => $user->username});
  }

  ..

  # use from command-line during development, following schema migration
  
  tyrrminal@devserver:/app$ script/myapp schema-load --noquiet
  Dumping manual schema for Myapp::Model to directory /app/lib ...
  Schema dump completed.

DESCRIPTION

Mojolicious::Plugin::ORM::DBIx streamlines the process of getting DBIC classes generated and accessible from within a Mojolicious application.

METHODS

Mojolicious::Plugin::ORM::DBIx inherits all methods from Mojolicious::Plugin and implements the following new ones

register( $args )

Register plugin in Mojolicious application. The following keys are supported in $args

dsn

The data source name for connecting to the database. Defaults to dbi:SQLite:dbname=:memory: if omitted.

namespace

The perl class name of the root schema object for the application. Defaults to $Moniker::Model if omitted, where $Moniker is the mojolicious moniker with the first letter capitalized. This class does not need to be manually created, as "run_schema_load" can create it along with the rest of the schema.

username

The database connection username

password

The database connection password

connect_params

An optional HashRef of additional connection parameters to be passed to DBI at connection time.

The following parameters pertain to DBIx schema loader code generation

lib

The directory where the schema loader files will be written to. Default $MOJO_HOME/lib

codegen_filters

An optional ordered ArrayRef of functions for filtering/modifying the code generated by the schema loader. See "filter_generated_code" in DBIx::Class::Schema::Loader::Base for details.

overwrite

A proxy value for "overwrite_modifications" in DBIx::Class::Schema::Loader::Base. N.B. defaults to true

feature_bundle

When generating code, add a use vX.XX; line near the end of the file, such that it applies to manual additions to the Result class files (but not to the generated code itself). Defaults to the perl version being used to generate the code. Any value that is not a valid perl version will cause this option to be disabled with a warning written to the mojolicious log. Pass undef to disable this option without a warning.

See FEATURE-BUNDLES for more information on valid values.

If enabled, this line is added to the code before running any custom "codegen_filters"

tidy_format_skipping

When using Perl::Tidy you may wind up with formatting disagreements between the generated code and perltidy's ruleset. This option allows you to add lines around the generated code to disable perltidy formatting, while leaving it enabled for any custom code added to the end of the Result class files.

Takes an ArrayRef containing two strings: [$disable_formatting, $enable_formatting]. Default is ['#<<<','#>>>']

See https://perltidy.sourceforge.net/perltidy.html#Skipping-Selected-Sections-of-Code.

Pass undef to disable this behavior.

If enabled, these lines are added after running any custom "codegen_filters"

dbix_components

An optional ArrayRef of DBIx components to load into generated classes. Defaults to [InflateColumn::DateTime,Relationship::Predicate]

The defaults will be prepended to the contents of the passed ArrayRef; to circumvent this behavior, pass undef as the first element of the array.

loader_options

An optional HashRef of additional parameters to pass to "make_schema_at" in DBIx::Class::Schema::Loader. See DBIx::Class::Schema::Loader::Base for possible values and their meanings.

db

Returns the root schema object for the application, a subclass of DBIx::Class::Schema

model( $model_name )

Returns the resultset object for the specified model name. Identical to app->db->resultset($model_name)

run_schema_load( $debug, $quiet )

Generate (or regenerate) model classes from database schema. More or less, this just runs "make_schema_at" in DBIx::Class::Schema::Loader with options set at the time of plugin registration.

Parameters:

$debug

Write generated classes to STDERR. Default: false

See "debug" in DBIx::Class::Schema::Loader::Base

$quiet

Don't print the Dumping manual schema..., Schema dump completed messages. Default: true

See "quiet" in DBIx::Class::Schema::Loader::Base

COMMANDS

schema-load [--debug] [--[no]quiet]

Mojolicious command to execute "run_schema_load"

AUTHOR

Mark Tyrrell <mark@tyrrminal.dev>

LICENSE

Copyright (c) 2024 Mark Tyrrell

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.