Skip to content

Commit 7e020ff

Browse files
committed
fix: IsValid and ToString methods. | fix: doc comments.
1 parent d9d0571 commit 7e020ff

File tree

1 file changed

+51
-30
lines changed

1 file changed

+51
-30
lines changed

src/Version.php

+51-30
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use \InvalidArgumentException;
2020

2121
/**
22-
* Representa el número de versión de un elemento o ensamblado, de la forma "1.0.0.0". Sólo
22+
* Representa el número de versión de un programa o ensamblado, de la forma "1.2.3.4". Sólo
2323
* siendo obligatorios el primer y segundo componente.
2424
* No se puede heredar esta clase.
2525
*
@@ -32,11 +32,13 @@ final class Version extends Object implements IEquatable, IComparable {
3232
/**
3333
* Crea una nueva instancia con los números principal, secundario, de compilación (opcional)
3434
* y revisión (opcional).
35+
* Para comprobar si la versión es válida, usar el método IsValid.
3536
*
36-
* @param int $major Componente principal
37-
* @param int $minor Componente secundario
38-
* @param mixed $build Componente de compilación
39-
* @param mixed $revision Componente de revisión
37+
*
38+
* @param int $major Componente principal
39+
* @param int $minor Componente secundario
40+
* @param int|string|VersionComponent $build Componente de compilación
41+
* @param int|string|VersionComponent $revision Componente de revisión
4042
* @throw InvalidArgumentException
4143
* */
4244
function __construct($major = 0, $minor = 0, $build = 0, $revision = 0) {
@@ -109,6 +111,7 @@ public static function Parse($value) {
109111

110112
/**
111113
* Obtiene el valor del componente principal del número de versión del objeto actual.
114+
* Ésta propiedad es de sólo lectura.
112115
*
113116
*
114117
* @var int Componente principal del número de versión
@@ -121,6 +124,7 @@ public function get_Major() { return $this->_major; }
121124

122125
/**
123126
* Obtiene el valor del componente secundario del número de versión del objeto actual.
127+
* Ésta propiedad es de sólo lectura.
124128
*
125129
*
126130
* @var int Componente secundario del número de versión
@@ -132,6 +136,7 @@ public function get_Minor() { return $this->_minor; }
132136

133137
/**
134138
* Obtiene el valor del componente de compilación del número de versión del objeto actual.
139+
* Ésta propiedad es de sólo lectura.
135140
*
136141
*
137142
* @var VersionComponent Componente de compilación del número de versión
@@ -143,6 +148,7 @@ public function get_Build() { return $this->_build; }
143148

144149
/**
145150
* Obtiene el valor del componente de revisión del número de versión del objeto actual.
151+
* Ésta propiedad es de sólo lectura.
146152
*
147153
*
148154
* @var VersionComponent Componente de revisión del número de versión
@@ -155,51 +161,66 @@ public function get_Revision() { return $this->_revision; }
155161

156162
/**
157163
* Convierte la instancia actual en su representación en cadena.
158-
* Por defecto, si no se especifica el número de revisión (o es menor a 1),
159-
* no se incluye en la salida.
160-
* Si tampoco se especifica el número de compilación (o es menor a 1),
161-
* tampoco se incluye el número de revisión.
162-
* Los componentes principal y secundario siempre se muestran, aunque sean cero (0).
164+
* Por defecto, si no están definidos los componentes de compilación y revisión, no se
165+
* incluyen en la salida.
166+
* Use el método IsValid para determinar si la versión es válida antes de devolver esta cadena.
163167
*
164168
*
165-
* @return string Representación de la versión en forma de cadena:
166-
* 'major.minor[.build[.revision]]'
169+
* @see Version::IsValid
170+
* @return string Representación de la versión en forma de cadena: 'major.minor[.build[.revision]]'
167171
* */
168172
public function ToString() {
169-
$s = $this->Major . '.' . $this->Minor;
170-
//var_dump($this->Build);
171-
172-
if ($this->Build->IntValue > 0) {
173-
$s .= '.' . $this->Build;
174-
175-
if ($this->Revision->IntValue > 0) {
176-
$s .= '.' . $this->Revision;
177-
}
178-
173+
$s[0] = $this->Major;
174+
$s[1] = $this->Minor;
175+
176+
if ($this->Revision->IsNotDefault()) {
177+
$s[2] = $this->Build;
178+
$s[3] = $this->Revision;
179+
} else {
180+
if ($this->Build->IsNotDefault()) {
181+
$s[2] = $this->Build;
182+
183+
if ($this->Revision->IsNotDefault()) {
184+
$s[3] = $this->Revision;
185+
}
186+
}
179187
}
188+
$v = implode('.', $s);
180189

181-
return $s;
190+
return $v;
182191
}
183192

184193
/**
185194
* Indica si la instancia actual es un número de versión válido.
186-
* Al menos un atributo de la versión debe estar establecido.
195+
* Al menos los componentes Major y Minor de la versión deben estar establecidos.
187196
*
188197
*
189198
* @return boolean Un valor que indica si la instancia actual es válida.
190199
* */
191200
public function IsValid() {
192-
if (!$this->Major){
193-
if (!$this->Minor) {
194-
if (!$this->Build->IntValue > 0) {
195-
if (!$this->Revision->IntValue > 0) {
196-
return false;
201+
$r = ($this->Major > 0 or $this->Minor > 0); //No puede ser '0.0'
202+
203+
if ($r) {
204+
$r = ($this->Build != null and $this->Revision != null);
205+
if ($r) {
206+
207+
$r = (bool)(($this->Build->StringValue == '') and ($this->Revision->StringValue == ''));
208+
209+
if (!$r) {
210+
if ($this->Build->StringValue != '') {
211+
//Sólo es válido el texto en Build si el componente de revisión es cero:
212+
$r = $this->Revision->IsDefault();
213+
}
214+
215+
if ($this->Revision->StringValue != '') {
216+
//Sólo es válido el texto en Revision si el texto de Build está vacío:
217+
$r = ($this->Build->StringValue == '');
197218
}
198219
}
199220
}
200221
}
201222

202-
return true;
223+
return (bool) $r;
203224
}
204225

205226
/**

0 commit comments

Comments
 (0)