Red.git | docs/coverage/report-data/ | Red-Cli-Table.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RaCoCo result: Red::Cli::Table</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">
<style>
pre.code::before {
counter-reset: listing;
}
pre.code span {
counter-increment: listing;
}
pre.code span::before {
content: counter(listing) ". ";
}
.coverage-green {
background-color: #32CD32;
/*color-blind
background-color: #00CED1;
/**/
}
.coverage-red {
background-color: #fa8072;
}
.coverage-purple {
background-color: #9370DB;
}
</style>
</head>
<body>
<div class="container">
<div class="row mt-5 mb-3">
<div class="col-12">
<div class="page-header">
<h1>Red::Cli::Table 4.7%</h1>
</div>
</div>
</div>
<div class="row justify-content-md-center">
<div class="col-md-10">
<pre class="code">
<span class="coverage-green">use Red::Utils;</span>
<span class="coverage-no">use Red::Cli::Column;</span>
<span class="coverage-no">use Red::Cli::Relationship;</span>
<span class="coverage-green">unit class Red::Cli::Table;</span>
<span class="coverage-no"></span>
<span class="coverage-no">has Str $.name;</span>
<span class="coverage-red">has Str $.model-name = try { snake-to-camel-case $!name };</span>
<span class="coverage-no">has @.columns;</span>
<span class="coverage-no">has @.relationships;</span>
<span class="coverage-red">has Bool $.exists = True;</span>
<span class="coverage-no"></span>
<span class="coverage-red">submethod TWEAK(:@columns) {</span>
<span class="coverage-red"> for @columns -> $col {</span>
<span class="coverage-red"> $col.table = self;</span>
<span class="coverage-red"> with $col.references {</span>
<span class="coverage-red"> @!relationships.push: Red::Cli::Relationship.new: :id($col)</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">multi method model-definition($ where so *) { "unit model { $!model-name };\n" }</span>
<span class="coverage-red">multi method model-definition($ where not *) { "model { $!model-name } \{" }</span>
<span class="coverage-red">multi method model-end($ where so *) { "" }</span>
<span class="coverage-red">multi method model-end($ where not *) { "\}" }</span>
<span class="coverage-no"></span>
<span class="coverage-red">method to-code(Str :$schema-class, Bool :$no-relationships) {</span>
<span class="coverage-red"> my $unit = not $schema-class.defined;</span>
<span class="coverage-red"> qq:to/END/;</span>
<span class="coverage-red"> { self.model-definition: $unit }</span>
<span class="coverage-red"> { do for @!columns -> $col {</span>
<span class="coverage-red"> $col.to-code: :$schema-class</span>
<span class="coverage-no"> }.join("\n").indent: $unit ?? 0 !! 4 }</span>
<span class="coverage-red"> { "\n" ~ do for @!relationships -> $rel {</span>
<span class="coverage-red"> $rel.to-code: :$schema-class</span>
<span class="coverage-no"> }.join("\n").indent: $unit ?? 0 !! 4 unless $no-relationships}</span>
<span class="coverage-red"> { self.model-end: $unit }</span>
<span class="coverage-no"> END</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">method diff(::?CLASS $b) {</span>
<span class="coverage-no"> my @diffs;</span>
<span class="coverage-red"> if $!name ne $b.name {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "name", $b.name ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "name", $!name ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if @!columns != $b.columns {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "n-of-cols", $b.columns.elems ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "n-of-cols", @!columns.elems ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> my @a = @!columns.sort: *.name;</span>
<span class="coverage-red"> my @b = $b.columns.sort: *.name;</span>
<span class="coverage-no"></span>
<span class="coverage-red"> while @a > 0 and @b > 0 {</span>
<span class="coverage-red"> if @a.head.name eq @b.head.name {</span>
<span class="coverage-red"> my $a = @a.shift;</span>
<span class="coverage-red"> my $b = @b.shift;</span>
<span class="coverage-red"> for $a.diff: $b -> @d {</span>
<span class="coverage-red"> @diffs.push: [ $!name, |@d ]</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> } elsif @b.head lt @a.head {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "col", @b.shift ];</span>
<span class="coverage-no"> } elsif @a.head lt @b.head {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "col", @a.shift ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "col", $_ ] for @b;</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "col", $_ ] for @a;</span>
<span class="coverage-red"> @diffs</span>
<span class="coverage-no">}</span>
</pre>
</div>
</div>
</div>
</body>
</html>