• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

orchestral / canvas / 4665386932

pending completion
4665386932

push

github

Mior Muhammad Zaki
wip

807 of 834 relevant lines covered (96.76%)

21.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.75
/src/Processors/GeneratesObserverCode.php
1
<?php
2

3
namespace Orchestra\Canvas\Processors;
4

5
use Illuminate\Support\Str;
6
use InvalidArgumentException;
7
use Orchestra\Canvas\Core\GeneratesCode;
8

9
/**
10
 * @property \Orchestra\Canvas\Commands\Database\Observer $listener
11
 *
12
 * @see https://github.com/laravel/framework/blob/10.x/src/Illuminate/Foundation/Console/ObserverMakeCommand.php
13
 */
14
class GeneratesObserverCode extends GeneratesCode
15
{
16
    /**
17
     * Build the class with the given name.
18
     */
19
    protected function buildClass(string $name): string
20
    {
21
        $stub = parent::buildClass($name);
3✔
22

23
        $model = $this->options['model'];
3✔
24

25
        return ! empty($model) ? $this->replaceModel($stub, $model) : $stub;
3✔
26
    }
27

28
    /**
29
     * Replace the model for the given stub.
30
     */
31
    protected function replaceModel(string $stub, string $model): string
32
    {
33
        $modelClass = $this->parseModel($model);
2✔
34

35
        $replace = [
2✔
36
            'DummyFullModelClass' => $modelClass,
2✔
37
            '{{ namespacedModel }}' => $modelClass,
2✔
38
            '{{namespacedModel}}' => $modelClass,
2✔
39
            'DummyModelClass' => class_basename($modelClass),
2✔
40
            '{{ model }}' => class_basename($modelClass),
2✔
41
            '{{model}}' => class_basename($modelClass),
2✔
42
            'DummyModelVariable' => lcfirst(class_basename($modelClass)),
2✔
43
            '{{ modelVariable }}' => lcfirst(class_basename($modelClass)),
2✔
44
            '{{modelVariable}}' => lcfirst(class_basename($modelClass)),
2✔
45
        ];
2✔
46

47
        return str_replace(
2✔
48
            array_keys($replace), array_values($replace), $stub
2✔
49
        );
2✔
50
    }
51

52
    /**
53
     * Get the fully-qualified model class name.
54
     *
55
     * @param  string  $model
56
     *
57
     * @throws \InvalidArgumentException
58
     */
59
    protected function parseModel($model): string
60
    {
61
        if (preg_match('([^A-Za-z0-9_/\\\\])', $model)) {
2✔
62
            throw new InvalidArgumentException('Model name contains invalid characters.');
×
63
        }
64

65
        return $this->qualifyModel($model);
2✔
66
    }
67

68
    /**
69
     * Qualify the given model class base name.
70
     */
71
    protected function qualifyModel(string $model): string
72
    {
73
        $model = ltrim($model, '\\/');
2✔
74

75
        $model = str_replace('/', '\\', $model);
2✔
76

77
        $rootNamespace = $this->rootNamespace();
2✔
78
        $namespaceModel = $this->preset->modelNamespace().'\\'.$model;
2✔
79

80
        if (Str::startsWith($model, $namespaceModel)) {
2✔
81
            return $model;
×
82
        } elseif (! \is_null($this->preset->config('model.namespace'))) {
2✔
83
            return $namespaceModel;
1✔
84
        }
85

86
        return is_dir(app_path('Models'))
1✔
87
                    ? $rootNamespace.'Models\\'.$model
1✔
88
                    : $namespaceModel;
1✔
89
    }
90
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc