package MooseX::ExtraArgs::Meta::Object;

$MooseX::ExtraArgs::Meta::Object::VERSION = '0.02';

use Moose::Role;

has extra_args => (
    is       => 'ro',
    isa      => 'HashRef',
    required => 1,
    init_arg => '_extra_args',
);

around BUILDARGS => sub{
    my $orig = shift;
    my $self = shift;

    my $args = $self->$orig( @_ );
    $args->{_extra_args} = { %$args };

    my $meta = $self->meta();
    foreach my $attr ($meta->get_all_attributes()) {
        next if !$attr->has_init_arg();
        delete( $args->{_extra_args}->{ $attr->init_arg() } );
    }

    return $args;
};

1;