package Fey::Object::Policy; use strict; use warnings; our $VERSION = '0.30'; use List::Util qw( first ); use Moose; use MooseX::StrictConstructor; use MooseX::SemiAffordanceAccessor; has '_transforms' => ( traits => [ 'Array' ], is => 'ro', isa => 'ArrayRef[HashRef]', default => sub { [] }, init_arg => undef, handles => { add_transform => 'push', transforms => 'elements', }, ); has 'has_one_namer' => ( is => 'rw', isa => 'CodeRef', default => \&_dumb_namer, required => 1, ); has 'has_many_namer' => ( is => 'rw', isa => 'CodeRef', default => \&_dumb_namer, required => 1, ); sub transform_for_column { my $self = shift; my $column = shift; return first { $_->{matching}->($column) } $self->transforms(); } sub _dumb_namer { return sub { lc $_[0]->name() }; } no Moose; __PACKAGE__->meta()->make_immutable(); 1; __END__ =head1 NAME Fey::Object::Policy - An object representing a specific policy =head1 DESCRIPTION This class provides the non-sugar half of L. It's probably not interesting unless you're interested in the guts of how L works. =head1 METHODS This class accepts the following methods: =head2 $policy->add_transform( matching => sub { ... }, inflate => sub { ... }, deflate => sub { ... } ) Stores a transform as declared in L =head2 $policy->transform_for_column($column) Given a L, returns the first transform (as a hash reference) for which the C sub returns true. =head2 $policy->transforms() Returns all of the transforms for the policy. =head2 $policy->has_one_namer() Returns the naming sub for C methods. Defaults to: sub { lc $_[0]->name() } =head2 $policy->set_has_one_namer($sub) Sets the naming sub for C methods. =head2 $policy->has_many_namer() Returns the naming sub for C methods. Defaults to: sub { lc $_[0]->name() } =head2 $policy->set_has_many_namer($sub) Sets the naming sub for C methods. =head1 AUTHOR Dave Rolsky, =head1 BUGS See L for details. =head1 COPYRIGHT & LICENSE Copyright 2006-2009 Dave Rolsky, All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =cut