ColumnTypeGuesser   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 1
dl 0
loc 78
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
C guessFormat() 0 53 15
1
<?php
2
3
use \Faker\Generator;
4
5
/**
6
 * Column Type Guesser
7
 *
8
 * Tries to guess the Faker formatter provider bases upon
9
 * a column type.
10
 *
11
 * @see Model::schema CakePHP's schema inspection.
12
 */
13
class ColumnTypeGuesser {
14
15
	/**
16
	 * A faker generator instance
17
	 *
18
	 * @var Generator
19
	 */
20
	protected $_generator;
21
22
	/**
23
	 * Constructor
24
	 *
25
	 * @param Generator $generator A faker generator instance.
26
	 */
27
	public function __construct(Generator $generator) {
28
		$this->_generator = $generator;
29
	}
30
31
	/**
32
	 * Guess the formatter
33
	 *
34
	 * @param array $column The column info.
35
	 * @return callable|null
36
	 */
37
	public function guessFormat($column) {
38
		$generator = $this->_generator;
39
40
		switch ($column['type']) {
41
			case 'boolean':
42
				return function () use ($generator) {
43
					return $generator->boolean;
44
				};
45
			case 'integer':
46
				return function () use ($generator) {
47
					return $generator->randomNumber(9);
48
				};
49
			case 'biginteger':
50
				return function () use ($generator) {
51
					return $generator->randomNumber(18);
52
				};
53
			case 'decimal':
54
			case 'float':
55
				return function () use ($generator) {
56
					return $generator->randomFloat();
57
				};
58
			case 'uuid':
59
				return function () use ($generator) {
60
					return $generator->uuid();
61
				};
62
			case 'string':
63
				$length = $column['length'];
64
				$string = str_repeat("?", $length);
65
				if ($length <= '5') {
66
					return function () use ($generator, $string) {
67
						return $generator->lexify($string);
68
					};
69
				}
70
				return function () use ($generator, $length) {
71
					return $generator->text($length);
72
				};
73
			case 'text':
74
				return function () use ($generator) {
75
					return $generator->text();
76
				};
77
			case 'date':
78
			case 'datetime':
79
			case 'timestamp':
80
			case 'time':
81
				return function () use ($generator) {
82
					return $generator->iso8601();
83
				};
84
85
			case 'binary':
86
			default:
87
				return null;
88
		}
89
	}
90
}
91