Red.git | docs/coverage/report-data/ | Red-Cli-Column.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RaCoCo result: Red::Cli::Column</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::Column 4.2%</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::DB;</span>
<span class="coverage-green">unit class Red::Cli::Column;</span>
<span class="coverage-no"></span>
<span class="coverage-no">has $.table is rw;</span>
<span class="coverage-no">has Str $.name is required;</span>
<span class="coverage-red">has Str $.formated-name = snake-to-kebab-case $!name;</span>
<span class="coverage-no">has Str $.type is required;</span>
<span class="coverage-red">has Str $.perl-type = get-RED-DB.type-for-sql: $!type.lc;</span>
<span class="coverage-no">has Bool $.nullable = True;</span>
<span class="coverage-no">has Bool $.pk = False;</span>
<span class="coverage-no">has Bool $.unique = False;</span>
<span class="coverage-red">has $.references = {};</span>
<span class="coverage-no"></span>
<span class="coverage-red">multi method new($name, $type, $nullable, $pk, $unique, $references) {</span>
<span class="coverage-red"> self.bless: :$name, :$type, :nullble(?$nullable), :pk(?$pk), :unique(?$unique), :$references</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">multi method gist(::?CLASS:D:) {</span>
<span class="coverage-red"> "Red::Cli::Column.new(:name($!name), :type($!type), :nullable($!nullable), :pk($!pk), :unique($!unique), {</span>
<span class="coverage-red"> ":references($_)" with $!references</span>
<span class="coverage-no"> } #`( table => $!table.name() ))"</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">method !modifier(Str :$schema-class) {</span>
<span class="coverage-red"> do given self {</span>
<span class="coverage-red"> when ?.pk { "id" }</span>
<span class="coverage-red"> when ?.references {</span>
<span class="coverage-red"> qq:to/END/.chomp;</span>
<span class="coverage-red"> referencing\{{</span>
<span class="coverage-red"> [</span>
<span class="coverage-red"> "\n:model<{</span>
<span class="coverage-red"> snake-to-camel-case self.references<table></span>
<span class="coverage-no"> }>",</span>
<span class="coverage-red"> "\n:column<{</span>
<span class="coverage-red"> snake-to-kebab-case self.references<column></span>
<span class="coverage-no"> }>",</span>
<span class="coverage-red"> ("\n:require<{ $schema-class }>" with $schema-class)</span>
<span class="coverage-no"> ].join(",").indent: 4</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> END</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> default { "column" }</span>
<span class="coverage-no"> }</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">method to-code(Str :$schema-class) {</span>
<span class="coverage-red"> "has {$!perl-type} \$.{ $!formated-name } is {</span>
<span class="coverage-red"> self!modifier(</span>
<span class="coverage-red"> |(:$schema-class with $schema-class)</span>
<span class="coverage-no"> ).chomp</span>
<span class="coverage-no"> };"</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 self.name ne $b.name {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "name", $b.name ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "name", self.name ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if self.type ne $b.type {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "type", $b.type ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "type", self.type ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if self.nullable != $b.nullable {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "nullable", $b.nullable ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "nullable", self.nullable ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if self.pk != $b.pk {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "pk", $b.pk ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "pk", self.pk ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if self.unique != $b.unique {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "unique", $b.unique ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "unique", self.unique ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> if quietly ?self.references<table> and ?$b.references<table></span>
<span class="coverage-no"> and self.references<table> ne $b.references<table></span>
<span class="coverage-no"> or self.references<column> ne $b.references<column></span>
<span class="coverage-no"> {</span>
<span class="coverage-red"> @diffs.push: [ $!name, "+", "references", $b.references ];</span>
<span class="coverage-red"> @diffs.push: [ $!name, "-", "references", self.references ];</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> @diffs</span>
<span class="coverage-no">}</span>
</pre>
</div>
</div>
</div>
</body>
</html>