Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Attribute Index hints on your data.
Perl

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
maint
misc
t
.gitignore
.mailmap
.perltidyrc
.travis.yml
Changes
LICENSE
README.mkdn
dist.ini
dist.ini.meta
perlcritic.rc
weaver.ini

README.mkdn

NAME

MooseX::AttributeIndexes - Advertise metadata about your Model-Representing Classes to Any Database tool.

VERSION

version 2.000001

SYNOPSIS

Implementing Indexes

package My::Package;
use Moose;
use MooseX::AttributeIndexes;
use MooseX::Types::Moose qw( :all );

has 'id' => (
  isa => Str,
  is  => 'rw',
  primary_index => 1,
);

has 'name' => (
  isa => Str,
  is  => 'rw',
  indexed => 1,
);

has 'foo' => (
  isa => Str,
  is  => 'rw',
);

Accessing Indexed Data

package TestScript;

use My::Package;

my $foo = My::Package->new(
  id => "Bob",
  name => "Smith",
  foo  => "Bar",
);

$foo->attribute_indexes
# { id => 'Bob', name => 'Smith' }

Using With Search::GIN::Extract::Callback

Search::GIN::Extract::Callback(
  extract => sub {
    my ( $obj, $callback, $args ) = @_;
    if( $obj->does( 'MooseX::AttributeIndexes::Provider') ){
      return $obj->attribute_indexes;
    }
  }
);

CODERef

Since 0.01001007, the following notation is also supported:

has 'name' => (
  ...
  indexed => sub {
    my ( $attribute_meta, $object, $value ) = @_;
    return "$_" ; # $_ == $value
  }
);

Noting of course, $value is populated by the meta-accessor.

This is a simple way to add exceptions for weird cases for things you want to index that don't behave like they should.

SEE ALSO

Search::GIN::Extract::AttributeIndexes

AUTHORS

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Kent Fredric kentfredric@gmail.com.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

Something went wrong with that request. Please try again.