File Coverage

lib/UR/Namespace/Command/Update/RenameClass.pm
Criterion Covered Total %
statement 9 35 25.7
branch 0 4 0.0
condition n/a
subroutine 3 7 42.8
pod 0 3 0.0
total 12 49 24.4


line stmt bran cond sub pod time code
1              
2              
3             package UR::Namespace::Command::Update::RenameClass;
4              
5 1     1   23 use strict;
  1         2  
  1         26  
6 1     1   3 use warnings;
  1         2  
  1         22  
7 1     1   3 use UR;
  1         1  
  1         5  
8             our $VERSION = "0.46"; # UR $VERSION;
9              
10             UR::Object::Type->define(
11             class_name => __PACKAGE__,
12             is => "UR::Namespace::Command::Update::RewriteClassHeader",
13             );
14              
15             # Standard methods used to output help.
16              
17             sub shell_args_description {
18 0     0 0   "My::Old My::New";
19             }
20              
21             sub help_description {
22 0     0 0   "Updates class descriptions for to correspond with database schema changes."
23             }
24              
25             # Wrap execute since we take different parameters than a standard
26             # "runs on modules in tree" rewrite command.
27              
28             our $old;
29             our $new;
30              
31             sub execute {
32 0     0     my $self = shift;
33 0           $old = shift;
34 0           $new = shift;
35 0           $self->error_message("rename $old to $new not implemented");
36 0           return;
37             }
38              
39             # Override "before" to do the class editing.
40              
41             sub before {
42 0     0 0   my $self = shift;
43 0           my $class_objects = shift;
44            
45             # By default, no classes are rewritten.
46             # As we find classes with the $old name, in their metadata,
47             # we add them to this list.
48 0           $class_objects = [];
49            
50 0           print "finding properties which seem to refernce a class\n";
51 0           my @p = UR::Object::Property->is_loaded(
52             property_name => ["class_name","r_class_name","parent_class_name"]
53             );
54            
55 0           print "found " . join("\n",map { $_->class_name . " -> " . $_->property_name } @_) . "\n";
  0            
56            
57 0           print "checking instances of those properties\n";
58 0           my @changes;
59 0           for my $p (@p) {
60 0           my $class_name = $p->class_name;
61 0           my $property_name = $p->property_name;
62 0           my @obj = $class_name->is_loaded();
63 0           for my $obj (@obj) {
64 0 0         if ($obj->$property_name eq $new) {
    0          
65             Carp::confess("Name $new is already in use on $class_name, "
66             . $obj->{id}
67 0           . $property_name . "!"
68             );
69             }
70             elsif ($obj->$property_name eq $old) {
71             print "Setting $new in place of $old on $class_name, "
72             . $obj->{id}
73 0           . $property_name . ".\n";
74 0           push @changes, [$obj,$property_name,$new];
75             }
76             }
77             }
78            
79 0           return 1;
80             }
81              
82             # we implement before() but use the default call to
83             # for_each_class_object() call in UR::Namespace::Command::rewrite
84              
85             1;
86