added included_fields patch from abs
edenc [Wed, 28 Jan 2009 23:06:24 +0000 (23:06 +0000)]
lib/Reaction/UI/ViewPort/Collection/Grid.pm
lib/Reaction/UI/ViewPort/Object.pm

index c9fc2f1..3879233 100644 (file)
@@ -10,6 +10,7 @@ extends 'Reaction::UI::ViewPort::Collection';
 
 has field_order => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 has excluded_fields => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+has included_fields => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 has computed_field_order => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 
 has _raw_field_labels => (
@@ -58,13 +59,17 @@ sub _build_field_order { []; }
 
 sub _build_excluded_fields { []; }
 
+sub _build_included_fields { [] }
+
 #this is a total clusterfuck and it sucks we should just eliminate it and have
 # the grid members not render ArrayRef or Collection fields
 sub _build_computed_field_order {
   my ($self) = @_;
   my %excluded = map { $_ => undef } @{ $self->excluded_fields };
+  my %included = map { $_ => undef } @{ $self->included_fields };
   #treat _$field_name as private and exclude fields with no reader
-  my @names = grep { $_ !~ /^_/ && !exists($excluded{$_})} map { $_->name }
+  my @names = grep { $_ !~ /^_/ &&  (!%included || exists( $included{$_}) )
+    && !exists($excluded{$_})} map { $_->name }
     grep {
       !($_->has_type_constraint &&
         ($_->type_constraint->is_a_type_of('ArrayRef') ||
@@ -118,6 +123,21 @@ homogenous collection of Reaction::InterfaceModel::Objects as a grid.
 
 =head2 excluded_fields
 
+List of field names to exclude.
+
+=head2 included_fields
+
+List of field names to include. If both C<included_fields> and
+C<excluded_fields> are specified the result is those fields which
+are in C<included_fields> and not in C<excluded_fields>.
+
+=head2 included_fields
+
+List of field names to include. If both C<included_fields> and
+C<excluded_fields> are specified the result is those fields which
+are in C<included_fields> and not in C<excluded_fields>.
+
+
 =head2 field_labels
 
 =head2 _raw_field_labels
index ed68f20..28eea32 100644 (file)
@@ -29,6 +29,7 @@ has field_order   => (is => 'ro', isa => 'ArrayRef');
 
 has builder_cache   => (is => 'ro', isa => 'HashRef',  lazy_build => 1);
 has excluded_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+has included_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 has computed_field_order => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 
 has containers => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
@@ -43,6 +44,7 @@ sub BUILD {
 
 sub _build_builder_cache { {} }
 sub _build_excluded_fields { [] }
+sub _build_included_fields { [] }
 
 sub _build_containers {
   my $self = shift;
@@ -105,8 +107,10 @@ sub _build_fields {
 sub _build_computed_field_order {
   my ($self) = @_;
   my %excluded = map { $_ => undef } @{ $self->excluded_fields };
+  my %included = map { $_ => undef } @{ $self->included_fields };
   #treat _$field_name as private and exclude fields with no reader
-  my @names = grep { $_ !~ /^_/ && !exists($excluded{$_})} map { $_->name }
+  my @names = grep { $_ !~ /^_/ && (!%included || exists( $included{$_}) )
+    && !exists($excluded{$_}) } map { $_->name }
     grep { defined $_->get_read_method } $self->model->parameter_attributes;
   return $self->sort_by_spec($self->field_order || [], \@names);
 }
@@ -265,6 +269,14 @@ Reaction::UI::ViewPort::Object
 
 =head2 excluded_fields
 
+List of field names to exclude.
+
+=head2 included_fields
+
+List of field names to include. If both C<included_fields> and
+C<excluded_fields> are specified the result is those fields which
+are in C<included_fields> and not in C<excluded_fields>.
+
 =head2 computed_field_order
 
 =head1 INTERNAL METHODS