File-DataClass

 view release on metacpan or  search on metacpan

lib/File/DataClass/ResultSet.pm  view on Meta::CPAN

   return $self->$_txn_do( sub { $self->$_list( $id ) } );
}

sub next {
   my $self  = shift;
   my $index = $self->_iterator; $self->_iterator( $index + 1 );

   return $self->_results->[ $index ];
}

sub push {
   my ($self, $args) = @_; my $id = $self->$_validate_params( $args );

   my $list  = $args->{list} or throw Unspecified, [ 'list' ];
   my $items = $args->{items} // []; my ($added, $attrs);

   $items->[ 0 ] or throw 'List contains no items';

   my $res = $self->$_txn_do( sub {
      ($attrs, $added) = $self->$_push( $id, $list, $items );

      return $self->$_find_and_update( $attrs );
   } );

   return $res ? $added : FALSE;
}

sub reset {
   my $self = shift; return $self->_iterator( 0 );
}

sub select {
   my $self = shift;

   return $self->storage->select( $self->path, $self->result_source->name );
}

sub search {
   my ($self, $args) = @_;

   return $self->$_txn_do( sub { $self->$_search( $args ) } );
}

sub splice {
   my ($self, $args) = @_; my $id = $self->$_validate_params( $args );

   my $list  = $args->{list} or throw Unspecified, [ 'list' ];
   my $items = $args->{items} // []; my ($attrs, $removed);

   $items->[ 0 ] or throw 'List contains no items';

   my $res = $self->$_txn_do( sub {
      ($attrs, $removed) = $self->$_splice( $id, $list, $items );

      return $self->$_find_and_update( $attrs );
   } );

   return $res ? $removed : FALSE;
}

sub update {
   my ($self, $args) = @_;

   if (my $id = $args->{id} // $args->{name}) { # Deprecated
      return $self->$_txn_do( sub { $self->$_find_and_update( $args ) } );
   }

   return $self->$_txn_do( sub {
      my $updated = FALSE;

      for my $result (@{ $self->_results }) {
         my $res = $self->$_update_result( $result, $args ); $updated ||= $res;
      }

      return $updated;
   } );
}

1;

__END__

=pod

=head1 Name

File::DataClass::ResultSet - Core result management methods

=head1 Synopsis

   use File:DataClass;

   my $attr = { result_source_attributes => { schema_attributes => { ... } } };

   my $result_source = File::DataClass->new( $attr )->result_source;

   my $rs = $result_source->resultset( { path => q(path_to_data_file) } );

   my $result = $rs->search( $hash_ref_of_where_clauses );

   for my $result_object ($result->next) {
      # Do something with the result object
   }

=head1 Description

Find, search and update methods for element objects

=head1 Configuration and Environment

Defines these attributes

=over 3

=item C<list_class>

List class name, defaults to L<File::DataClass::List>

=item C<result_class>

Result class name, defaults to L<File::DataClass::Result>



( run in 1.890 second using v1.01-cache-2.11-cpan-524268b4103 )