Test Failed
Push — main ( 1f412f...1c4e95 )
by Guillaume
03:37
created

VueJSComponent::setInheritAttrs()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 2
ccs 0
cts 0
cp 0
crap 2
rs 10
1
<?php
2
3
namespace PHPMV;
4
5
use PHPMV\js\JavascriptUtils;
6
use PHPMV\utils\JsUtils;
7
8
class VueJSComponent extends AbstractVueJS {
9
	protected string $name;
10
	protected array $configuration;
11
	protected array $props;
12 2
	protected array $template;
13 2
	protected array $extends;
14 2
	protected ?string $varName;
15 2
16 2
	public function __construct(string $name, string $varName = null) {
17 2
		parent::__construct();
18
		$this->name = $name;
19 1
		$this->configuration = [];
20 1
		$this->props = [];
21 1
		$this->extends = [];
22 1
		$this->template = [];
23
		if (!$varName) {
24
			$varName = JsUtils::kebabToPascal($name);
25 1
		}
26 1
		$this->varName = $varName;
27 1
	}
28 1
29 1
	public function extends(VueJSComponent $component): void {
30
		$this->extends['extends'] = $component->getVarName();
31
	}
32
33
	public function generateObject(): string {
34
		$script = JavascriptUtils::arrayToJsObject($this->components + $this->filters + $this->extends + $this->mixins + $this->configuration + $this->props + $this->data + $this->computeds + $this->watchers + $this->hooks + $this->methods + $this->template);
35
		$script = JsUtils::cleanJSONFunctions($script);
36
		return $script;
37
	}
38
39
	public function generateGlobalScript(): string {
40
		$script = "Vue.component('" . $this->name . "',";
41
		$script .= $this->generateObject();
42
		$script .= ");";
43
		return $script;
44
	}
45
46
	public function generateFile(bool $inVariable = false, bool $global = false): void {
47 1
		$script = ($inVariable) ? JsUtils::declareVariable("const", $this->varName, $this->generateGlobalScript(), false) : $this->generateGlobalScript();
0 ignored issues
show
Bug introduced by
It seems like $this->varName can also be of type null; however, parameter $name of PHPMV\utils\JsUtils::declareVariable() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

47
		$script = ($inVariable) ? JsUtils::declareVariable("const", /** @scrutinizer ignore-type */ $this->varName, $this->generateGlobalScript(), false) : $this->generateGlobalScript();
Loading history...
48 1
		if (!$global) {
49 1
			\file_put_contents($this->name . ".js", $script);
50
		} elseif (file_exists("components.js")) {
51 1
			\file_put_contents("components.js", PHP_EOL . $script, FILE_APPEND);
52 1
		} else {
53 1
			\file_put_contents("components.js", $script);
54
		}
55 1
	}
56 1
57
	public function addProps(string ...$props): void {
58 1
		$this->props["props"] = $props;
59
	}
60
61
	public function setInheritAttrs(bool $inheritAttrs): void {
62
		$this->configuration['inheritAttrs'] = $inheritAttrs;
63
	}
64
65
	public function setModel(string $prop, string $event): void {
66
		$this->configuration['model'] = "{ prop: '" . $prop . "', event: '" . $event . "' }";
67
	}
68
69
	public function addTemplate(string $template): void {
70
		$this->template["template"] = $template;
71
	}
72
73
	public function importTemplate(string $template): void {
74
		$this->template["template"] = "'" . \str_replace(["\n", "\r", "\t"], " ", (\file_get_contents($template . '.html', true)) . "'");
75
	}
76
77
	public function onActivated(string $body): void {
78
		$this->addHook("activated", $body);
79
	}
80
81
	public function onDeactivated(string $body): void {
82
		$this->addHook("deactivated", $body);
83
	}
84
85
	public function getName(): string {
86
		return $this->name;
87
	}
88
89
	public function getVarName(): string {
90
		return $this->varName;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->varName could return the type null which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
91
	}
92
}