Skip to content

Commit 79644cb

Browse files
authored
Fix casing for multiword references in definition (#181)
1 parent 41e4a62 commit 79644cb

14 files changed

+563
-13
lines changed

src/Generators/TestGenerator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ protected function buildTestCases(Controller $controller)
333333
$assertions['sanity'][] = '$this->assertCount(1, $' . $plural . ');';
334334
$assertions['sanity'][] = sprintf('$%s = $%s->first();', $variable, $plural);
335335
} else {
336-
$assertions['generic'][] = '$this->assertDatabaseHas(' . Str::lower(Str::plural($model)) . ', [ /* ... */ ]);';
336+
$assertions['generic'][] = '$this->assertDatabaseHas(' . Str::camel(Str::plural($model)) . ', [ /* ... */ ]);';
337337
}
338338
} elseif ($statement->operation() === 'find') {
339339
$setup['data'][] = sprintf('$%s = factory(%s::class)->create();', $variable, $model);
@@ -351,7 +351,7 @@ protected function buildTestCases(Controller $controller)
351351
}
352352
}
353353

354-
$call = sprintf('$response = $this->%s(route(\'%s.%s\'', $this->httpMethodForAction($name), Str::lower($context), $name);
354+
$call = sprintf('$response = $this->%s(route(\'%s.%s\'', $this->httpMethodForAction($name), Str::kebab($context), $name);
355355

356356
if (in_array($name, ['edit', 'update', 'show', 'destroy'])) {
357357
$call .= ', $' . Str::camel($context);

src/Lexers/ControllerLexer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ private function generateResourceTokens(Controller $controller, array $methods)
6666

6767
return str_replace(
6868
['[singular]', '[plural]'],
69-
[Str::lower($model), Str::lower(Str::plural($model))],
69+
[Str::camel($model), Str::camel(Str::plural($model))],
7070
$statement
7171
);
7272
}),

src/Models/Statements/EloquentStatement.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ public function output(string $controller_prefix, string $context): string
4040

4141
if ($this->operation() == 'save') {
4242
if ($context === 'store') {
43-
$code = "$" . Str::lower($model);
43+
$code = "$" . Str::camel($model);
4444
$code .= ' = ';
4545
$code .= $model;
4646
$code .= '::create($request->all());';
4747
} else {
48-
$code = "$" . Str::lower($model) . '->save();';
48+
$code = "$" . Str::camel($model) . '->save();';
4949
}
5050
}
5151

@@ -54,7 +54,7 @@ public function output(string $controller_prefix, string $context): string
5454
$model = $this->extractModel();
5555
}
5656

57-
$code = "$" . Str::lower($model);
57+
$code = "$" . Str::camel($model);
5858
$code .= ' = ';
5959
$code .= $model;
6060
$code .= '::find($' . $this->columnName($this->reference()) . ');';
@@ -66,7 +66,7 @@ public function output(string $controller_prefix, string $context): string
6666
$code .= '::destroy($' . str_replace('.', '->', $this->reference()) . ');';
6767
} else {
6868
// TODO: only for certain contexts or no matter what given simple reference?
69-
$code = "$" . Str::lower($model) . '->delete();';
69+
$code = "$" . Str::camel($model) . '->delete();';
7070
}
7171
}
7272

src/Models/Statements/QueryStatement.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public function output(string $controller): string
5353

5454
if ($this->operation() === 'all') {
5555
if (is_null($this->model())) {
56-
return '$' . Str::lower(Str::plural($model)) . ' = ' . $model . '::all();';
56+
return '$' . Str::camel(Str::plural($model)) . ' = ' . $model . '::all();';
5757
} else {
58-
return '$' . Str::lower($this->clauses()[0]) . ' = ' . $this->model() . '::all();';
58+
return '$' . Str::camel($this->clauses()[0]) . ' = ' . $this->model() . '::all();';
5959
}
6060
}
6161

@@ -82,9 +82,9 @@ public function output(string $controller): string
8282
if ($this->operation() === 'pluck') {
8383
$variable_name = $this->pluckName($pluck_field);
8484
} elseif ($this->operation() === 'count') {
85-
$variable_name = Str::lower($model) . '_count';
85+
$variable_name = Str::camel($model) . '_count';
8686
} else {
87-
$variable_name = Str::lower(Str::plural($model));
87+
$variable_name = Str::camel(Str::plural($model));
8888
}
8989

9090
$code = '$' . $variable_name . ' = ' . $model . '::';

tests/Feature/Generator/ControllerGeneratorTest.php

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public function output_writes_migration_for_controller_tree($definition, $path,
7171
}
7272

7373
/**
74-
* @test
75-
*/
74+
* @test
75+
*/
7676
public function output_generates_controllers_with_models_with_custom_namespace_correctly()
7777
{
7878
$definition = 'definitions/custom-models-namespace.bp';
@@ -99,6 +99,39 @@ public function output_generates_controllers_with_models_with_custom_namespace_c
9999

100100
$this->assertEquals(['created' => [$path]], $this->subject->output($tree));
101101
}
102+
103+
/**
104+
* @test
105+
*/
106+
public function output_works_for_pascal_case_definition()
107+
{
108+
$this->files->expects('stub')
109+
->with('controller/class.stub')
110+
->andReturn(file_get_contents('stubs/controller/class.stub'));
111+
$this->files->expects('stub')
112+
->with('controller/method.stub')
113+
->andReturn(file_get_contents('stubs/controller/method.stub'))
114+
->twice();
115+
116+
$certificateController = 'app/Http/Controllers/CertificateController.php';
117+
$certificateTypeController = 'app/Http/Controllers/CertificateTypeController.php';
118+
119+
$this->files->expects('exists')
120+
->with(dirname($certificateController))
121+
->andReturnTrue();
122+
$this->files->expects('put')
123+
->with($certificateController, $this->fixture('controllers/certificate-controller.php'));
124+
125+
$this->files->expects('exists')
126+
->with(dirname($certificateTypeController))
127+
->andReturnTrue();
128+
$this->files->expects('put')
129+
->with($certificateTypeController, $this->fixture('controllers/certificate-type-controller.php'));
130+
131+
$tokens = $this->blueprint->parse($this->fixture('definitions/pascal-case.bp'));
132+
$tree = $this->blueprint->analyze($tokens);
133+
$this->assertEquals(['created' => [$certificateController, $certificateTypeController]], $this->subject->output($tree));
134+
}
102135

103136
/**
104137
* @test

tests/Feature/Generator/ModelGeneratorTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,48 @@ public function output_generates_models($definition, $path, $model)
9191
$this->assertEquals(['created' => [$path]], $this->subject->output($tree));
9292
}
9393

94+
/**
95+
* @test
96+
*/
97+
public function output_works_for_pascal_case_definition()
98+
{
99+
$this->files->expects('stub')
100+
->with('model/class.stub')
101+
->andReturn(file_get_contents('stubs/model/class.stub'));
102+
$this->files->expects('stub')
103+
->with('model/fillable.stub')
104+
->andReturn(file_get_contents('stubs/model/fillable.stub'))
105+
->twice();
106+
$this->files->expects('stub')
107+
->with('model/casts.stub')
108+
->andReturn(file_get_contents('stubs/model/casts.stub'))
109+
->twice();
110+
$this->files->expects('stub')
111+
->with('model/method.stub')
112+
->andReturn(file_get_contents('stubs/model/method.stub'))
113+
->twice();
114+
115+
$certificateModel = 'app/Certificate.php';
116+
$certificateTypeModel = 'app/CertificateType.php';
117+
118+
$this->files->expects('exists')
119+
->with(dirname($certificateModel))
120+
->andReturnTrue();
121+
$this->files->expects('put')
122+
->with($certificateModel, $this->fixture('models/certificate-pascal-case-example.php'));
123+
124+
$this->files->expects('exists')
125+
->with(dirname($certificateTypeModel))
126+
->andReturnTrue();
127+
$this->files->expects('put')
128+
->with($certificateTypeModel, $this->fixture('models/certificate-type-pascal-case-example.php'));
129+
130+
$tokens = $this->blueprint->parse($this->fixture('definitions/pascal-case.bp'));
131+
$tree = $this->blueprint->analyze($tokens);
132+
133+
$this->assertEquals(['created' => [$certificateModel, $certificateTypeModel]], $this->subject->output($tree));
134+
}
135+
94136
/**
95137
* @test
96138
*/

tests/Feature/Generator/TestGeneratorTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,39 @@ public function output_generates_test_for_controller_tree($definition, $path, $t
7474
$this->assertEquals(['created' => [$path]], $this->subject->output($tree));
7575
}
7676

77+
/**
78+
* @test
79+
*/
80+
public function output_works_for_pascal_case_definition()
81+
{
82+
$this->files->expects('get')
83+
->with('stubs/test/class.stub')
84+
->andReturn(file_get_contents('stubs/test/class.stub'));
85+
86+
$this->files->expects('get')
87+
->with('stubs/test/case.stub')
88+
->andReturn(file_get_contents('stubs/test/case.stub'));
89+
90+
$certificateControllerTest = 'tests/Feature/Http/Controllers/CertificateControllerTest.php';
91+
$certificateTypeControllerTest = 'tests/Feature/Http/Controllers/CertificateTypeControllerTest.php';
92+
93+
$this->files->expects('exists')
94+
->with(dirname($certificateControllerTest))
95+
->andReturnTrue();
96+
$this->files->expects('put')
97+
->with($certificateControllerTest, $this->fixture('tests/certificate-pascal-case-example.php'));
98+
99+
$this->files->expects('exists')
100+
->with(dirname($certificateTypeControllerTest))
101+
->andReturnTrue();
102+
$this->files->expects('put')
103+
->with($certificateTypeControllerTest, $this->fixture('tests/certificate-type-pascal-case-example.php'));
104+
105+
$tokens = $this->blueprint->parse($this->fixture('definitions/pascal-case.bp'));
106+
$tree = $this->blueprint->analyze($tokens);
107+
$this->assertEquals(['created' => [$certificateControllerTest, $certificateTypeControllerTest]], $this->subject->output($tree));
108+
}
109+
77110
/**
78111
* @test
79112
*/
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Certificate;
6+
use App\Http\Requests\CertificateStoreRequest;
7+
use App\Http\Requests\CertificateUpdateRequest;
8+
use App\Http\Resources\Certificate as CertificateResource;
9+
use App\Http\Resources\CertificateCollection;
10+
use Illuminate\Http\Request;
11+
12+
class CertificateController extends Controller
13+
{
14+
/**
15+
* @param \Illuminate\Http\Request $request
16+
* @return \App\Http\Resources\CertificateCollection
17+
*/
18+
public function index(Request $request)
19+
{
20+
$certificates = Certificate::all();
21+
22+
return new CertificateCollection($certificates);
23+
}
24+
25+
/**
26+
* @param \App\Http\Requests\CertificateStoreRequest $request
27+
* @return \App\Http\Resources\Certificate
28+
*/
29+
public function store(CertificateStoreRequest $request)
30+
{
31+
$certificate = Certificate::create($request->all());
32+
33+
return new CertificateResource($certificate);
34+
}
35+
36+
/**
37+
* @param \Illuminate\Http\Request $request
38+
* @param \App\Certificate $certificate
39+
* @return \App\Http\Resources\Certificate
40+
*/
41+
public function show(Request $request, Certificate $certificate)
42+
{
43+
return new CertificateResource($certificate);
44+
}
45+
46+
/**
47+
* @param \App\Http\Requests\CertificateUpdateRequest $request
48+
* @param \App\Certificate $certificate
49+
* @return \App\Http\Resources\Certificate
50+
*/
51+
public function update(CertificateUpdateRequest $request, Certificate $certificate)
52+
{
53+
return new CertificateResource($certificate);
54+
}
55+
56+
/**
57+
* @param \Illuminate\Http\Request $request
58+
* @param \App\Certificate $certificate
59+
* @return \Illuminate\Http\Response
60+
*/
61+
public function destroy(Request $request, Certificate $certificate)
62+
{
63+
$certificate->delete();
64+
65+
return response()->noContent(200);
66+
}
67+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\CertificateType;
6+
use App\Http\Requests\CertificateTypeStoreRequest;
7+
use App\Http\Requests\CertificateTypeUpdateRequest;
8+
use App\Http\Resources\CertificateType as CertificateTypeResource;
9+
use App\Http\Resources\CertificateTypeCollection;
10+
use Illuminate\Http\Request;
11+
12+
class CertificateTypeController extends Controller
13+
{
14+
/**
15+
* @param \Illuminate\Http\Request $request
16+
* @return \App\Http\Resources\CertificateTypeCollection
17+
*/
18+
public function index(Request $request)
19+
{
20+
$certificateTypes = CertificateType::all();
21+
22+
return new CertificateTypeCollection($certificateTypes);
23+
}
24+
25+
/**
26+
* @param \App\Http\Requests\CertificateTypeStoreRequest $request
27+
* @return \App\Http\Resources\CertificateType
28+
*/
29+
public function store(CertificateTypeStoreRequest $request)
30+
{
31+
$certificateType = CertificateType::create($request->all());
32+
33+
return new CertificateTypeResource($certificateType);
34+
}
35+
36+
/**
37+
* @param \Illuminate\Http\Request $request
38+
* @param \App\CertificateType $certificateType
39+
* @return \App\Http\Resources\CertificateType
40+
*/
41+
public function show(Request $request, CertificateType $certificateType)
42+
{
43+
return new CertificateTypeResource($certificateType);
44+
}
45+
46+
/**
47+
* @param \App\Http\Requests\CertificateTypeUpdateRequest $request
48+
* @param \App\CertificateType $certificateType
49+
* @return \App\Http\Resources\CertificateType
50+
*/
51+
public function update(CertificateTypeUpdateRequest $request, CertificateType $certificateType)
52+
{
53+
return new CertificateTypeResource($certificateType);
54+
}
55+
56+
/**
57+
* @param \Illuminate\Http\Request $request
58+
* @param \App\CertificateType $certificateType
59+
* @return \Illuminate\Http\Response
60+
*/
61+
public function destroy(Request $request, CertificateType $certificateType)
62+
{
63+
$certificateType->delete();
64+
65+
return response()->noContent(200);
66+
}
67+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
models:
2+
Certificate:
3+
name: string
4+
certificate_type_id: id
5+
reference: string
6+
document: string
7+
expiry_date: date
8+
remarks: nullable text
9+
CertificateType:
10+
name: string
11+
relationships:
12+
hasMany: Certificate
13+
14+
controllers:
15+
Certificate:
16+
resource: api
17+
CertificateType:
18+
resource: api

0 commit comments

Comments
 (0)