DBIx-Class-Visualizer

 view release on metacpan or  search on metacpan

lib/DBIx/Class/Visualizer.pm  view on Meta::CPAN

            "is_foreign_key": 0,
            "is_numeric": 1,
            "extra": {},
            "relations":[
                {
                    "origin_table": "TableName",
                    "origin_column": "a_column_id",
                    "destination_table": "AnotherTableName"
                    "destination_column": "a_column_id",
                    "relation_type": "has_many",
                    "cascade_delete": 1,
                },
                ...
            ],
          }">a_column_id</text>

The C<data-column-info> attribute is a json object that is directly usable by something like jQuery:

    # has_many
    $('#column-TableName-a_column_id').data('column-info').relations[0].relation_type;

lib/DBIx/Class/Visualizer/Relation.pm  view on Meta::CPAN

has destination_table => (
    is => 'ro',
    isa => Str,
    required => 1,
);
has destination_column => (
    is => 'ro',
    isa => Str,
    required => 1,
);
has cascade_delete => (
    is => 'ro',
    isa => Bool,
    predicate => 1,
);
has cascade_update => (
    is => 'ro',
    isa => Bool,
    predicate => 1,
);
has relation_type => (
    is => 'ro',
    isa => Enum[qw/has_many has_one belongs_to might_have/],
    required => 1,
);

lib/DBIx/Class/Visualizer/Relation.pm  view on Meta::CPAN

    my $class = shift;
    my %args = @_;

    my $relation = delete $args{'relation'};
    my $attr = $relation->{'attrs'};

    ($args{'destination_table'} = $relation->{'source'}) =~ s{^.*?::Result::}{};
    ($args{'origin_column'} = (values %{ $relation->{'cond'} })[0]) =~ s{^self\.}{};
    ($args{'destination_column'} = (keys %{ $relation->{'cond'} })[0]) =~ s{^foreign\.}{};

    for my $cascade (qw/cascade_delete cascade_update/) {
        $args{ $cascade } = $attr->{ $cascade } if exists $attr->{ $cascade };
    }

    # do not reorder
    $args{'relation_type'} = $attr->{'accessor'} eq 'multi' ? $HAS_MANY
                           : $attr->{'is_depends_on'}       ? $BELONGS_TO
                           : exists $attr->{'join_type'}    ? $MIGHT_HAVE
                           :                                  $HAS_ONE
                           ;

    $class->$orig(%args);

lib/DBIx/Class/Visualizer/Relation.pm  view on Meta::CPAN


sub TO_JSON {
    my $self = shift;

    return +{
            origin_table => $self->origin_table,
            origin_column => $self->origin_column,
            destination_table => $self->destination_table,
            destination_column => $self->destination_column,
            relation_type => $self->relation_type,
        provided $self->has_cascade_delete,
            cascade_delete => $self->cascade_delete,
        provided $self->has_cascade_update,
            cascade_update => $self->cascade_update,
    };
}

1;

__END__

=pod

=encoding UTF-8



( run in 0.577 second using v1.01-cache-2.11-cpan-49f99fa48dc )