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 )