The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

VERSION

Version 1.000002

NAME

DBIx::Class::ResultSet::WithMetaData

SYNOPSIS

  package MyApp::Schema::ResultSet::ObjectType;

  use Moose;
  use MooseX::Method::Signatures;
  extends 'DBIx::Class::ResultSet::WithMetaData;

  method with_substr () {
    return $self->_with_meta_key( 
      substr => sub {
        return substr(shift->{name}, 0, 3);
      }
    );
  }

  ...


  # then somewhere else

  my $object_type_arrayref = $object_type_rs->with_substr->display();

  # [{
  #    'artistid' => '1',
  #    'name' => 'Caterwauler McCrae',
  #    'substr' => 'Cat'
  #  },
  #  {
  #    'artistid' => '2',
  #    'name' => 'Random Boy Band',
  #    'substr' => 'Ran'
  #  },
  #  {
  #    'artistid' => '3',
  #    'name' => 'We Are Goth',
  #    'substr' => 'We '
  #  }]

DESCRIPTION

Attach metadata to rows by chaining ResultSet methods together. When the ResultSet is flattened to an ArrayRef the metadata is merged with the row hashes to give a combined 'hash-plus-other-stuff' representation.

METHODS

display

Arguments: none
Return Value: ArrayRef
 $arrayref_of_row_hashrefs = $rs->display();

This method uses DBIx::Class::ResultClass::HashRefInflator to convert all rows in the ResultSet to HashRefs. Then the subrefs that were added via "_with_meta_key" or "_with_meta_hash" are run for each row and the resulting data merged with them.

_with_meta_key

Arguments: key_name => subref($row_hash)
Return Value: ResultSet
 $self->_with_meta_key( substr => sub ($row) { 
   return substr(shift->{name}, 0, 3);
 });

This method allows you populate a certain key for each row hash at "display" time.

_with_meta_hash

Arguments: subref($row_hash)
Return Value: ResultSet
 $self->_with_meta_hash( sub ($row) { 
   my $row = shift;
   my $return_hash = { substr => substr($row->{name}, 0, 3), substr2 => substr($row->{name}, 0, 4) };
   return $return_hash;
 });

Use this method when you want to populate multiple keys of the hash at the same time. If you just want to populate one key, use "_with_meta_key".

add_row_info (DEPRECATED)

Arguments: row => DBIx::Class::Row object, info => HashRef to attach to the row
Return Value: ResultSet
 $rs = $rs->add_row_info(row => $row, info => { dates => [qw/mon weds fri/] } );

DEPRECATED - this method is quite slow as it requires that you iterate through the resultset each time you want to add metadata. Replaced by "build_metadata".

AUTHOR

  Luke Saunders <luke.saunders@gmail.com>

THANKS

As usual, thanks to Matt S Trout for the sanity check.

LICENSE

  This library is free software under the same license as perl itself