# NAME

DBIx::Class::Helper::Row::Enumeration - Add methods for emum values

# VERSION

version v0.1.8

# SYNOPSIS

In your result class:

```perl
use base qw/DBIx::Class::Core/;

__PACKAGE__->load_components(qw/ Helper::Row::Enumeration /);

__PACKAGE__->add_column(

  foo => {
      data_type => 'enum',
      extra     => {
          list => [qw/ good bad ugly /],
      },
  },
```

with a row:

```
if ($row->is_good) { ... }
```

# DESCRIPTION

This plugin is inspired by [MooseX::Enumeration](https://metacpan.org/pod/MooseX::Enumeration).

Suppose your database has a column with an enum value. Checks against
string values are prone to typos:

```
if ($row->result eq 'faol') { ... }
```

when instead you wanted

```
if ($row->result eq 'fail') { ... }
```

Using this plugin, you can avoid common bugs by checking against a
method instead:

```
if ($row->is_fail) { ... }
```

# Overriding method names

You can override method names by adding an extra `handles` attribute
to the column definition:

```perl
bar => {
    data_type => 'enum',
    extra     => {
        list   => [qw/ good bad ugly /],
        handles => {
            good_bar => 'good',
            coyote   => 'ugly',
        },
    },
},
```

Note that only methods you specify will be added. In the above case,
there is no "is\_bad" method added.

The `handles` attribute can also be set to a code reference so that
method names can be generated dynamically:

```perl
baz => {
    data_type => 'enum',
    extra     => {
        list   => [qw/ good bad ugly /],
        handles => sub {
            my ($value, $col, $class) = @_;

            return undef if $value eq 'deprecated';

            return "is_${col}_${value}";
        },
    },
},
);
```

If the function returns `undef`, then no method will be generated for
that value.

If `handles` is set to "0", then no methods will be generated for the
column at all.

# KNOWN ISSUES

See also ["BUGS"](#bugs) below.

## Overlapping enum values

Multiple columns with overlapping enum values will cause an error.
You'll need to specify a handler to rename methods or skip them
altogether.

## Autogenerated Classes

You can use column modifiers to update autogenerated classes created
by the likes of [DBIx::Class::Schema::Loader](https://metacpan.org/pod/DBIx::Class::Schema::Loader).  However, the `extra`
attributes are not deep-merged, so you will have to repeat them when
if you want to specify custom handlers, e.g.

```perl
# Created by DBIx::Class::Schema::Loader etc.
# DO NOT MODIFY THIS OR ANYTHING ABOVE! etc.

__PACKAGE__->load_components(qw/ Helper::Row::Enumeration /);

__PACKAGE__->add_columns(

  '+foo', # using default handlers

  '+baz' => {
      extra   => {
          list    => [qw/ good bad ugly /],
          handles => { ... },
      },
  },

);
```

Note that this is by design, since the intention of column modifiers is
to override existing values.

# SEE ALSO

[DBIx::Class](https://metacpan.org/pod/DBIx::Class)

[MooseX::Enumeration](https://metacpan.org/pod/MooseX::Enumeration)

The module [DBIx::Class::Helper::ResultSet::EnumMethods](https://metacpan.org/pod/DBIx::Class::Helper::ResultSet::EnumMethods) adds
similar methods to resultsets.

# SOURCE

The development version is on github at [https://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration](https://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration)
and may be cloned from [git://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration.git](git://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration.git)

# BUGS

Please report any bugs or feature requests on the bugtracker website
[https://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration/issues](https://github.com/robrwo/DBIx-Class-Helper-Row-Enumeration/issues)

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

# AUTHOR

Robert Rothenberg <rrwo@cpan.org>

The initial development of this module was sponsored by Science Photo
Library [https://www.sciencephoto.com](https://www.sciencephoto.com).

# CONTRIBUTOR

Aaron Crane <arc@cpan.org>

# COPYRIGHT AND LICENSE

This software is Copyright (c) 2018-2019 by Robert Rothenberg.

This is free software, licensed under:

```
The Artistic License 2.0 (GPL Compatible)
```