-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfigure.php
More file actions
124 lines (96 loc) · 3.15 KB
/
configure.php
File metadata and controls
124 lines (96 loc) · 3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env php
<?php
function ask(string $question, string $default = ''): string
{
$answer = readline($question.($default ? " ({$default})" : null).': ');
if (! $answer) {
return $default;
}
return $answer;
}
function confirm(string $question, bool $default = false): bool
{
$answer = ask($question.' ('.($default ? 'Y/n' : 'y/N').')');
if (! $answer) {
return $default;
}
return strtolower($answer) === 'y';
}
function writeln(string $line): void
{
echo $line.PHP_EOL;
}
function run(string $command): string
{
return trim(shell_exec($command) ?? '');
}
function slugify(string $subject): string
{
return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $subject), '-'));
}
function title_case(string $subject): string
{
return str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $subject)));
}
function replace_in_file(string $file, array $replacements): void
{
$contents = file_get_contents($file);
file_put_contents(
$file,
str_replace(
array_keys($replacements),
array_values($replacements),
$contents
)
);
}
function removeReadmeParagraphs(string $file): void
{
$contents = file_get_contents($file);
file_put_contents(
$file,
preg_replace('/<!--delete-->.*<!--\/delete-->/s', '', $contents) ?: $contents
);
}
function replaceForAllOtherOSes(): array
{
return explode(PHP_EOL, run('grep -E -r -l -i "VendorName|PackageTemplate|ExampleClass|vendor_slug|package_name|package_slug|package_description" --exclude-dir=vendor ./* ./.github/* | grep -v ' . basename(__FILE__)));
}
$vendorNamespace = ask('Vendor namespace', 'Studio24');
$vendorSlug = ask('Vendor slug', strtolower($vendorNamespace));
$currentDirectory = getcwd();
$folderName = basename($currentDirectory);
$packageName = ask('Package name', $folderName);
$packageSlug = slugify($packageName);
$className = title_case($packageName);
$className = ask('Class name', $className);
$description = ask('Package description', "This is my package {$packageSlug}");
writeln('------');
writeln("Package : {$vendorSlug}/{$packageSlug}");
writeln("Description: {$description}");
writeln("Namespace : {$vendorNamespace}\\{$className}");
writeln("Class name : {$className}");
writeln('------');
writeln('This script will replace the above values in all relevant files in the project directory.');
if (! confirm('Modify files?', true)) {
exit(1);
}
$files = replaceForAllOtherOSes();
foreach ($files as $file) {
replace_in_file($file, [
'VendorName' => $vendorNamespace,
'PackageTemplate' => $className,
'ExampleClass' => $className,
':vendor_slug' => $vendorSlug,
':package_name' => $packageName,
':package_slug' => $packageSlug,
':package_description' => $description,
]);
if (str_contains($file, 'src/ExampleClass.php')) {
rename($file, './src/' . $className . '.php');
}
}
unlink('README.md');
rename('README_DEFAULT.md', 'README.md');
confirm('Execute `composer install`?') && run('composer install');
confirm('Let this script delete itself?', true) && unlink(__FILE__);