Skip to content

srchulo/Mojolicious-Plugin-ModeHelpers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Mojolicious::Plugin::ModeHelpers - Mojolicious Plugin that adds helpers to determine the mode and avoid typos

STATUS

SYNOPSIS

use Mojolicious::Lite;
plugin 'ModeHelpers';

if (app->in_prod) { # true if app->mode eq 'production'
  # do prod stuff
} elsif (app->in_dev) { # true if app->mode ne 'production'
  # do dev stuff
}

# rename in_prod and in_dev
plugin ModeHelpers => { prod_helper_name => 'in_production_mode', dev_helper_name => 'in_development_mode' };
if (app->in_production_mode) { # true if app->mode eq 'production'
  # do prod stuff
} elsif (app->in_development_mode) { # true if app->mode ne 'production'
  # do dev stuff
}

# provide your own custom modes to generate helpers
plugin ModeHelpers => { modes => ['alpha', 'beta'] };
if (app->in_alpha) { # true if app->mode eq 'alpha'
  # do alpha stuff
} elsif (app->in_beta) { # true if app->mode eq 'beta'
  # do beta stuff
}

# weird modes get valid perl subroutine names
plugin ModeHelpers => { modes => ['my strange mode!'] };
if (app->in_my_strange_mode) { # true if app->mode eq 'my strange mode!'
  # do strange things
}

# provide your own helper name and mode pairs
plugin ModeHelpers => { modes => [{ in_alpha_mode => 'alpha' }, 'beta'] };
if (app->in_alpha_mode) { # true if app->mode eq 'alpha'
  # do alpha stuff
} elsif (app->in_beta) { # true if app->mode eq 'beta'
  # do beta stuff
}

# use Mojolicious helper dot notation
plugin ModeHelpers => {
  prod_helper_name => 'modes.prod',
  dev_helper_name => 'modes.dev',
  modes => [{ 'modes.alpha' => 'alpha' }]
};

if (app->modes->prod) { # true if app->mode eq 'production'
  # do prod stuff
}
if (app->modes->dev) { # true if app->mode ne 'production'
  # do dev stuff
}

if (app->modes->alpha) { # true if app->mode eq 'alpha'
  # do alpha stuff
}

DESCRIPTION

Mojolicious::Plugin::ModeHelpers is a Mojolicious::Plugin that adds helpers so that you can know what mode you are in via a method call instead of comparing to the string returned by "mode" in Mojolicious. This can help with typos, and is often more compact. You may use the built-in "in_prod" and "in_dev" methods, or you can add helpers for your custom "modes".

METHODS

in_prod

Returns true if "mode" in Mojolicious is production. Otherwise, returns false.

if (app->in_prod) { # true if app->mode eq 'production'
  # do prod stuff
}

"in_prod" can be renamed via "prod_helper_name".

in_dev

Returns true if "mode" in Mojolicious does not equal production. Otherwise, returns false.

if (app->in_dev) { # true if app->mode ne 'production'
  # do dev stuff
}

"in_dev" can be renamed via "dev_helper_name".

register

my $config = $plugin->register($app);
my $config = $plugin->register($app, { modes => ['alpha', 'beta', 'gamma'] });

Register plugin in Mojolicious application and create helpers.

OPTIONS

prod_helper_name

"prod_helper_name" allows you to change the name of the "in_prod" helper:

plugin ModeHelpers => { prod_helper_name => 'in_production_mode' };

if (app->in_production_mode) { # true if app->mode eq 'production'
  # do prod stuff
}

You can also use the "helper" in Mojolicious dot notation:

plugin ModeHelpers => { prod_helper_name => 'modes.prod' };

if (app->modes->prod) {
  # do prod stuff
}

dev_helper_name

"dev_helper_name" allows you to change the name of the "in_dev" helper:

plugin ModeHelpers => { dev_helper_name => 'in_development_mode' };

if (app->in_development_mode) { # true if app->mode ne 'production'
  # do dev stuff
}

You can also use the "helper" in Mojolicious dot notation:

plugin ModeHelpers => { dev_helper_name => 'modes.dev' };

if (app->modes->dev) {
  # do dev stuff
}

mode

"modes" allows you to pass in custom modes that will have their own helpers that return true if "mode" in Mojolicious equals their mode. Modes can either be a non-empty scalar, or a hash that has a key-value pair of helper_name => mode.

plugin ModeHelpers => {
  modes => [
    'alpha', # generates helper in_alpha for mode 'alpha'
    { in_beta_mode => 'beta' }, # generates helper in_beta_mode for mode 'beta'
    'my strange mode!', # generates helper in_my_strange_mode for mode 'my strange mode!'
  ],
};

if (app->in_alpha) { # true if app->mode eq 'alpha'
  # do alpha stuff
} elsif (app->in_beta_mode) { # true if app->mode eq 'beta'
  # do beta stuff
} elsif (app->in_my_strange_mode) { # true if app->mode eq 'my strange mode!'
  # do strange things
}

SCALAR

Non-empty strings can be passed into "modes". The helper name is generated with these steps:

  • Pass the mode to "slugify" in Mojo::Util.

  • Replace all dashes with underscores.

  • Append the resulting value to the string "in_".

    plugin ModeHelpers => { modes => ['alpha', 'my strange mode!'] };

    if (app->in_alpha) { # true if app->mode eq 'alpha' # do alpha stuff } elsif (app->in_my_strange_mode) { # true if app->mode eq 'my strange mode!' # do strange things }

HASH

A key-value pair can be provided as a hash, where the key is the helper name and the value is the mode.

plugin ModeHelpers => { modes => [ { in_alpha_mode => 'alpha' } ] };

if (app->in_alpha_mode) { # true if app->mode eq 'alpha'
  # do alpha stuff
}

You can also use the "helper" in Mojolicious dot notation:

plugin ModeHelpers => { modes => [ { 'modes.alpha' => 'alpha' } ] };

if (app->modes->alpha) { # true if app->mode eq 'alpha'
  # do alpha stuff
}

AUTHOR

Adam Hopkins srchulo@cpan.org

COPYRIGHT

Copyright 2019- Adam Hopkins

LICENSE

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

SEE ALSO

About

Mojolicious Plugin that adds helpers to determine the mode

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages