#$Id$ package REST::Neo4p::Relationship; use base 'REST::Neo4p::Entity'; use REST::Neo4p::Exceptions; use Carp qw(croak carp); use strict; use warnings; BEGIN { $REST::Neo4p::Relationship::VERSION = '0.4003'; } sub new { my $self = shift; my ($from_node, $to_node, $type, $rel_props) = @_; unless (ref $from_node && $from_node->isa('REST::Neo4p::Node') && ref $to_node && $to_node->isa('REST::Neo4p::Node') && defined $type) { REST::Neo4p::LocalException->throw("Requires 2 REST::Neo4p::Node objects and a relationship type\n"); } return $from_node->relate_to($to_node, $type, $rel_props); } sub type { my $self = shift; return $self->_entry->{type}; } sub start_node { return REST::Neo4p->get_node_by_id(shift->_entry->{start_id}); } sub end_node { return REST::Neo4p->get_node_by_id(shift->_entry->{end_id}); } sub as_simple { my $self = shift; my $ret; my $props = $self->get_properties; $ret->{_relationship} = $$self + 0; $ret->{_type} = $self->type; $ret->{_start} = ${$self->start_node}; $ret->{_end} = ${$self->end_node}; $ret->{$_} = $props->{$_} for keys %$props; return $ret; } sub simple_from_json_response { my $class = shift; my ($decoded_resp) = @_; my $ret; for (ref $decoded_resp) { /HASH/ && do { # reln id ($ret->{_relationship}) = $decoded_resp->{self} =~ m{.*/([0-9]+)$}; # reln type $ret->{_type} = $decoded_resp->{type}; # reln properties $ret->{$_} = $decoded_resp->{data}->{$_} for keys %{$decoded_resp->{data}}; # start and end nodes (by id) ($ret->{_start}) = $decoded_resp->{start} =~ m{.*/([0-9]+)$}; ($ret->{_end}) = $decoded_resp->{end} =~ m{.*/([0-9]+)$}; last; }; /Driver/ && do { $ret->{_relationship} = $decoded_resp->id; $ret->{_type} = $decoded_resp->type; $ret->{$_} = $decoded_resp->properties->{$_} for keys %{$decoded_resp->properties}; $ret->{_start} = $decoded_resp->start_id; $ret->{_end} = $decoded_resp->end_id; last; }; do { die "?"; }; } return $ret; } =head1 NAME REST::Neo4p::Relationship - Neo4j relationship object =head1 SYNOPSIS $n1 = REST::Neo4p::Node->new( {name => 'Harry'} ); $n2 = REST::Neo4p::Node->new( {name => 'Sally'} ); $r1 = $n1->relate_to($n2, 'met'); $r1->set_property({ when => 'July' }); $r2 = REST::Neo4p::Relationship->new( $n2 => $n1, 'dropped' ); =head1 DESCRIPTION REST::Neo4p::Relationship objects represent Neo4j relationships. =head1 METHODS =over =item new() $r1 = REST::Neo4p::Relationship->new($node1, $node2, 'ingratiates'); Creates the relationship given by the scalar third argument between the first argument and second argument, both C objects. An optional fourth argument is a hashref of I properties. =item remove() $reln->remove() Removes the relationship from the database. =item get_property() $status = $reln->get_property('status'); Get the values of properties on nodes and relationships. =item set_property() $node1->relate_to($node2,"is_pal_of")->set_property( {duration => 'old pal'} ); Sets values of properties on nodes and relationships. =item get_properties() $props = $relationship->get_properties; print "Come here often?" if ($props->{status} eq 'not_currently_seeing'); Get all the properties of relationship as a hashref. =item remove_property() $relationship->remove_property('name'); $relationship->remove_property(@property_names); Remove properties from relationship. =item start_node(), end_node() $fred_node = $married_to->start_node; $wilma_node = $married_to->end_node; Get the start and end nodes of the relationship. =item type() $rel = $node->relate_to($node2, 'my_type'); print "This is my_type of relationship" if $rel->type eq 'my_type'; Gets a relationship's type. =item Property auto-accessors See L. =item as_simple() $simple_reln = $reln1->as_simple $rel_id = $simple_reln->{_relationship}; $value = $simple_reln->{$property_name}; $type = $simple_reln->{_type}; $start_node_id = $simple_reln->{_start}; $end_node_id = $simple_reln->{_end}; Get relationship as a simple hashref. =back =head1 SEE ALSO L, L, L. =head1 AUTHOR Mark A. Jensen CPAN ID: MAJENSEN majensen -at- cpan -dot- org =head1 LICENSE Copyright (c) 2012-2022 Mark A. Jensen. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;