DBIx-Class-Schema-Diff
view release on metacpan or search on metacpan
lib/DBIx/Class/Schema/Diff/Source.pm view on Meta::CPAN
package DBIx::Class::Schema::Diff::Source;
use strict;
use warnings;
use Moo;
with 'DBIx::Class::Schema::Diff::Role::Common';
use Types::Standard qw(:all);
use Try::Tiny;
use List::MoreUtils qw(uniq);
use DBIx::Class::Schema::Diff::InfoPacket;
has 'name', required => 1, is => 'ro', isa => Str;
has 'old_source', is => 'ro', isa => Maybe[HashRef], default => sub { undef };
has 'new_source', required => 1, is => 'ro', isa => Maybe[HashRef];
has 'diff_added', is => 'ro', isa => Bool, default => sub { 0 };
has '_schema_diff', required => 1, is => 'ro', weak_ref => 1, isa => InstanceOf[
'DBIx::Class::Schema::Diff::Schema'
];
has 'added', is => 'ro', lazy => 1, default => sub {
my $self = shift;
defined $self->new_source && ! defined $self->old_source
}, init_arg => undef, isa => Bool;
has 'deleted', is => 'ro', lazy => 1, default => sub {
my $self = shift;
defined $self->old_source && ! defined $self->new_source
}, init_arg => undef, isa => Bool;
has 'columns', is => 'ro', lazy => 1, default => sub {
my $self = shift;
my ($o,$n) = ($self->old_source,$self->new_source);
# List of all columns in old, new, or both:
my @columns = uniq(try{keys %{$o->{columns}}}, try{keys %{$n->{columns}}});
return {
map { $_ => $self->_new_InfoPacket(
name => $_,
old_info => $o ? $o->{columns}{$_} : undef,
new_info => $n ? $n->{columns}{$_} : undef,
) } @columns
};
}, init_arg => undef, isa => HashRef;
has 'relationships', is => 'ro', lazy => 1, default => sub {
my $self = shift;
my ($o,$n) = ($self->old_source,$self->new_source);
# List of all relationships in old, new, or both:
my @rels = uniq(try{keys %{$o->{relationships}}}, try{keys %{$n->{relationships}}});
return {
map { $_ => $self->_new_InfoPacket(
name => $_,
old_info => $o ? $o->{relationships}{$_} : undef,
new_info => $n ? $n->{relationships}{$_} : undef,
) } @rels
};
}, init_arg => undef, isa => HashRef;
has 'constraints', is => 'ro', lazy => 1, default => sub {
my $self = shift;
my ($o,$n) = ($self->old_source,$self->new_source);
( run in 1.001 second using v1.01-cache-2.11-cpan-39bf76dae61 )