NAME

Storm::Object - Build objects to use with Storm

SYNOPSIS

    package Foo;
    use Storm::Object;  # provides Moose sugar

    has 'id' => (
        isa => 'Int',
        traits => [qw( PrimaryKey AutoIncrement )],
    );

    has 'label' => (
        isa => 'Str',
    );

    has 'bar' => (
        isa => 'Bar',
        weak_ref => 1,
    )


    package Bar;

    has 'id' => (
        isa => 'Int',
        traits => [qw( PrimaryKey AutoIncrement )],
    );

    has_many 'foos' => (
        foreign_class => 'Foo',
        match_on => 'bar',
        handles => {
            foos => 'iter',
        }
    );

    has_many 'bazzes' => (
        foreign_class => 'Baz',
        junction_table => 'BazBars',
        local_match => 'bar',
        foreign_match => 'baz',
        handles => {
            bazzes => 'iter',
            add_baz => 'add',
            remove_baz => 'remove',
        }
    );

    package Baz;

    has 'id' => (
        isa => 'Int',
        traits => [qw( PrimaryKey AutoIncrement )],
    );

    has_many 'bars' => (
        foreign_class => 'Foo',
        junction_table => 'BazBars',
        local_match => 'bar',
        foreign_match => 'baz',
        handles => {
            bars => 'iter',
            add_bar => 'add',
            remove_bar => 'remove',
        }
    );

DESCRIPTION

Storm::Object is an extension of the Moose object system. The purpose of Storm::Object is to apply the necessary meta-roles Storm needs to introspect your objects and to provide sugar for declaring relationships between Storm enabled objects.

ROLES/META-ROLES

Storm::Role::Object

This role is applied to the base class.

Storm::Role::Object::Meta::Attribute

This role is applied to the attribute meta-class.

Storm::Role::Object::Meta::Class

This role is applied to the class meta-class.

SUGAR

has_many $name => %options
foreign_class => $class

Set the foreign_class option to the other class in the relationship.

match_on => $attribute_name

Use when defining a one-to-many relationsuhip. This is the name of attribute in the foreign class used to define the relationship.

junction_table => $table

Use when defining a many-to-many relationship. This is the database table used to define the relationships.

local_match => $table

Use when defining a many-to-many relationship. This is the column in the junction_table which is to identify the __PACKAGE__ object in the relationship.

foreign_match => $table

Use when defining a many-to-many relationship. This is the column in the junction_table which is to identify the foreign object in the relationship.

AUTHOR

Jeffrey Ray Hallock <jeffrey.hallock at gmail dot com>

COPYRIGHT

    Copyright (c) 2010 Jeffrey Ray Hallock. All rights reserved.
    This program is free software; you can redistribute it and/or
    modify it under the same terms as Perl itself.