Test Failed
Pull Request — master (#59)
by
unknown
11:49
created

Model   B

Complexity

Total Complexity 44

Size/Duplication

Total Lines 151
Duplicated Lines 0 %

Test Coverage

Coverage 96.7%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 44
eloc 83
c 1
b 0
f 0
dl 0
loc 151
ccs 88
cts 91
cp 0.967
rs 8.8798

16 Methods

Rating   Name   Duplication   Size   Complexity  
A isAssociation() 0 8 4
A getSimpleName() 0 2 1
A addOneToMany() 0 5 2
A getDefaultFk() 0 2 1
A removeMember() 0 3 3
A getName() 0 5 3
A getPrimaryKey() 0 7 3
A getManyToOneMembers() 0 8 3
A getPkName() 0 5 2
A addMember() 0 3 1
A addManyToOne() 0 6 2
A __construct() 0 4 1
A addManyToMany() 0 5 2
A __toString() 0 18 4
B getToStringField() 0 21 9
A getToString() 0 14 3

How to fix   Complexity   

Complex Class

Complex classes like Model often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Model, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace Ubiquity\orm\creator;
4
5
class Model {
6
	private $members;
7
	private $name;
8
	private $namespace;
9
10 2
	public function __construct($name, $namespace="models") {
11 2
		$this->name=\ucfirst($name);
12 2
		$this->members=array ();
13 2
		$this->namespace=$namespace;
14 2
	}
15
16 2
	public function addMember(Member $member) {
17 2
		$this->members[$member->getName()]=$member;
18 2
		return $this;
19
	}
20
21 2
	public function addManyToOne($member, $name, $className, $nullable=false) {
22 2
		if (\array_key_exists($member, $this->members) === false) {
23 2
			$this->addMember(new Member($member));
24 2
			$this->removeMember($name);
25
		}
26 2
		$this->members[$member]->addManyToOne($name, $className, $nullable);
27 2
	}
28
29 2
	public function removeMember($memberName) {
30 2
		if (isset($this->members[$memberName]) && $this->members[$memberName]->isPrimary() === false)
31 1
			unset($this->members[$memberName]);
32 2
	}
33
34 2
	public function addOneToMany($member, $mappedBy, $className) {
35 2
		if (\array_key_exists($member, $this->members) === false) {
36 2
			$this->addMember(new Member($member));
37
		}
38 2
		$this->members[$member]->addOneToMany($mappedBy, $className);
39 2
	}
40
41 1
	public function addManyToMany($member, $targetEntity, $inversedBy, $joinTable, $joinColumns=[], $inverseJoinColumns=[]) {
42 1
		if (\array_key_exists($member, $this->members) === false) {
43 1
			$this->addMember(new Member($member));
44
		}
45 1
		$this->members[$member]->addManyToMany($targetEntity, $inversedBy, $joinTable, $joinColumns, $inverseJoinColumns);
46 1
	}
47
48 2
	public function __toString() {
49 2
		$result="<?php\n";
50 2
		if ($this->namespace !== "" && $this->namespace !== null) {
51 2
			$result.="namespace " . $this->namespace . ";\n";
52
		}
53 2
		$result.="class " . ucfirst($this->name) . "{";
54 2
		$members=$this->members;
55
		\array_walk($members, function ($item) {
56 2
			return $item . "";
57 2
		});
58 2
		$result.=implode("", $members);
59 2
		foreach ( $members as $member ) {
60 2
			$result.=$member->getGetter();
61 2
			$result.=$member->getSetter();
62
		}
63 2
		$result.=$this->getToString();
64 2
		$result.="\n}";
65 2
		return $result;
66
	}
67
68 2
	public function getName() {
69 2
		$namespace="";
70 2
		if ($this->namespace !== "" && $this->namespace !== null)
71 2
			$namespace=$this->namespace . '\\';
72 2
		return $namespace . $this->name;
73
	}
74
75 2
	public function getSimpleName() {
76 2
		return $this->name;
77
	}
78
79 2
	public function isAssociation() {
80 2
		$count=0;
81 2
		foreach ( $this->members as $member ) {
82 2
			if ($member->isManyToOne() === true || $member->isPrimary() === true) {
83 2
				$count++;
84
			}
85
		}
86 2
		return $count == \sizeof($this->members);
87
	}
88
89 1
	public function getPrimaryKey() {
90 1
		foreach ( $this->members as $member ) {
91 1
			if ($member->isPrimary() === true) {
92 1
				return $member;
93
			}
94
		}
95
		return null;
96
	}
97
98 1
	public function getPkName(){
99 1
		$pk=$this->getPrimaryKey();
100 1
		if(isset($pk))
101 1
			return $pk->getName();
102
		return null;
103
	}
104
105 1
	public function getDefaultFk() {
106 1
		return "id" . $this->name;
107
	}
108
109 1
	public function getManyToOneMembers() {
110 1
		$result=array ();
111 1
		foreach ( $this->members as $member ) {
112 1
			if ($member->isManyToOne() === true) {
113 1
				$result[]=$member;
114
			}
115
		}
116 1
		return $result;
117
	}
118
119 2
	private function getToStringField(){
120 2
		$result=null;
121 2
		// Array of multiple translations of the word "password" which could be taken as name of the table field in database
122 2
		$pwArray=array('AmericanEnglish'=>'password','BrazilianPortuguese'=>'senha','Croatian'=>'lozinka','Czech'=>array('heslotajne','helslo_tajne'),'Danish'=>'password','Dutch'=>'wachtwoord','EuropeanSpanish'=>'contrasena','Finnish'=>'salasana','French'=>array('motdepasse','mot_de_passe'),'German'=>'passwort','Italian'=>'password','Norwegian'=>'passord','Polish'=>'haslo','EuropeanPortuguese'=>'senha','Romanian'=>'parola','Russian'=>'naponb','LatinAmericanSpanish'=>'contrasena','Swedish'=>array('loesenord','losenord'),'Turkish'=>'sifre','Ukrainian'=>'naponb','Vietnamese'=>array('matkhau','mat_khau'));
123 2
		foreach ( $this->members as $member ) {
124
			if ($member->getDbType()!=="mixed" && $member->isNullable()!==true && !$member->isPrimary()) {
125
			    $memberName=$member->getName();
126 2
			    foreach ($pwArray as $key => $item) {
127
			        if (is_array($item)) {
128
                        if(!in_array($memberName,$item)) {
129 2
                            $result=$member->getName();
130 2
                        }
131 2
                    } else {
132 2
                        if($memberName!==$item) {
133
                            $result=$memberName;
134 1
                        }
135 1
                    }
136
                }
137
			}
138
		}
139 2
		return $result;
140 2
	}
141 2
142 2
	public function getToString(){
143
		$field=$this->getToStringField();
144
		if(isset($field)){
145
			$corps='$this->' . $field;
146
		}
147
		elseif(($pkName=$this->getPkName())!==null){
148
			$corps='$this->' . $pkName;
149
		}else{
150
			$corps='"'.$this->name.'@"'.'.\spl_object_hash($this)';
151
		}
152
		$result="\n\t public function __toString(){\n";
153
		$result.="\t\t" . 'return '.$corps. ";\n";
154
		$result.="\t}\n";
155
		return $result;
156
	}
157
}
158