package DBIx::Class::Schema::Loader::Column;

use strict;
use warnings;
use base 'Class::Accessor::Grouped';
use mro 'c3';
use Carp::Clan qw/^DBIx::Class/;
use Scalar::Util 'weaken';
use namespace::clean;

=head1 NAME

DBIx::Class::Schema::Loader::Column - Class for Columns in
L<DBIx::Class::Schema::Loader>

=head1 DESCRIPTION

Used for representing columns in
L<DBIx::Class::Schema::Loader::Base/col_accessor_map>.

Stringifies to L</name>, and arrayrefifies to the
L<name_parts|DBIx::Class::Schema::Loader::Table/name_parts> of
L</table> plus L</name>.

=cut

__PACKAGE__->mk_group_accessors(simple => qw/
    table
    name
/);

use overload
    '""' => sub { $_[0]->name },
    '@{}' => sub { [ @{$_[0]->table->name_parts}, $_[0]->name ] },
    fallback => 1;

=head1 METHODS

=head2 new

The constructor. Takes L</table> and L</name> key-value parameters.

=cut

sub new {
    my $class = shift;

    my $self = { @_ };
    croak "table is required" unless ref $self->{table};

    weaken $self->{table};

    return bless $self, $class;
}

=head2 table

The L</DBIx::Class::Schema::Loader::Table> object this column belongs to.
Required parameter for L</new>

=head2 name

The name of the column. Required parameter for L</new>.

=cut

1;