From 65941a007210b62e601944521d1901d8756ea9a5 Mon Sep 17 00:00:00 2001 From: indykoning <15870933+indykoning@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:01:46 +0100 Subject: [PATCH] Init (#1) --- README.md | 27 +--- composer.json | 28 ++-- config/rapidez/skeleton.php | 4 - configure.php | 217 -------------------------- resources/js/components/Example.vue | 35 ----- resources/js/package.js | 15 -- resources/views/components/.gitkeep | 0 resources/views/top-bar.blade.php | 7 + routes/api.php | 5 - routes/web.php | 5 - src/DemoHelperServiceProvider.php | 44 ++++++ src/Http/Middleware/SetDemoConfig.php | 33 ++++ src/SkeletonServiceProvider.php | 64 -------- 13 files changed, 108 insertions(+), 376 deletions(-) delete mode 100644 config/rapidez/skeleton.php delete mode 100644 configure.php delete mode 100644 resources/js/components/Example.vue delete mode 100644 resources/js/package.js delete mode 100644 resources/views/components/.gitkeep create mode 100644 resources/views/top-bar.blade.php delete mode 100644 routes/api.php delete mode 100644 routes/web.php create mode 100644 src/DemoHelperServiceProvider.php create mode 100644 src/Http/Middleware/SetDemoConfig.php delete mode 100644 src/SkeletonServiceProvider.php diff --git a/README.md b/README.md index ae4c38e..22a1e34 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,21 @@ -# Rapidez :package_name_without_prefix - -This repository can be used as template for a new Rapidez package. +# Rapidez demo-helper -- Click on "Use this template" on the top of this Github repo page -- Run `php ./configure.php` +This package contains some of the code used specifically for https://demo.rapidez.io -Credits to [`spatie/package-skeleton-laravel`](https://github.com/spatie/package-skeleton-laravel) for the inpiration for this template. - -Keep in mind that if you contribute to this template; it should work for official and unofficial packages! -- `rapidez/something` -- `someone/rapidez-something` - -:package_description +It includes a middleware that sets specific configuration values based on the user's session. ## Installation ``` -composer require :vendor_slug/:package_slug -``` - -## Configuration - -You can publish the config with: -``` -php artisan vendor:publish --tag=rapidez-:package_slug_without_prefix-config +composer config repositories.demo-helper vcs https://github.com/rapidez/demo-helper.git +composer require rapidez/demo-helper ``` ## Views You can publish the views with: ``` -php artisan vendor:publish --tag=rapidez-:package_slug_without_prefix-views +php artisan vendor:publish --tag=rapidez-demo-helper-views ``` ## License diff --git a/composer.json b/composer.json index 7e0081c..4c98e43 100644 --- a/composer.json +++ b/composer.json @@ -1,28 +1,33 @@ { - "name": ":vendor_slug/:package_slug", - "description": ":package_description", + "name": "rapidez/demo-helper", + "description": "This package contains some of the code used specifically for https://demo.rapidez.io", "keywords": [ "rapidez", - ":package_slug" + "demo-helper" ], - "homepage": "https://github.com/:vendor_slug/:package_slug", + "homepage": "https://demo.rapidez.io", "license": "GPL-3.0-or-later", "authors": [ { - "name": ":author_name", - "email": "author@domain.com", + "name": "indy koning", + "email": "indy@justbetter.nl", "role": "Developer" } ], "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": "^8.1|^8.2", - "rapidez/core": "^2.0|^3.0" + "php": "^8.1|^8.2|^8.3", + "rapidez/core": "^3.0" + }, + "require-dev": { + "larastan/larastan": "^2.9", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^10.5.34|^11.3.5" }, "autoload": { "psr-4": { - "VendorName\\Skeleton\\": "src" + "Rapidez\\DemoHelper\\": "src" } }, "config": { @@ -31,8 +36,11 @@ "extra": { "laravel": { "providers": [ - "VendorName\\Skeleton\\SkeletonServiceProvider" + "Rapidez\\DemoHelper\\DemoHelperServiceProvider" ] } + }, + "scripts": { + "analyse": "phpstan --memory-limit=256M" } } diff --git a/config/rapidez/skeleton.php b/config/rapidez/skeleton.php deleted file mode 100644 index 12816ad..0000000 --- a/config/rapidez/skeleton.php +++ /dev/null @@ -1,4 +0,0 @@ - $version) { - if (in_array($name, $names, true)) { - unset($data['require-dev'][$name]); - } - } - - file_put_contents(__DIR__.'/composer.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); -} - -function remove_composer_script($scriptName) -{ - $data = json_decode(file_get_contents(__DIR__.'/composer.json'), true); - - foreach ($data['scripts'] as $name => $script) { - if ($scriptName === $name) { - unset($data['scripts'][$name]); - break; - } - } - - file_put_contents(__DIR__.'/composer.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); -} - -function remove_readme_paragraphs(string $file): void -{ - $contents = file_get_contents($file); - - file_put_contents( - $file, - preg_replace('/.*/s', '', $contents) ?: $contents - ); -} - -function safeUnlink(string $filename) -{ - if (file_exists($filename) && is_file($filename)) { - unlink($filename); - } -} - -function determineSeparator(string $path): string -{ - return str_replace('/', DIRECTORY_SEPARATOR, $path); -} - -function replaceForWindows(): array -{ - return preg_split('/\\r\\n|\\r|\\n/', run('dir /S /B * | findstr /v /i .git\ | findstr /v /i vendor | findstr /v /i '.basename(__FILE__).' | findstr /r /i /M /F:/ ":author :vendor :package VendorName skeleton vendor_name vendor_slug author@domain.com"')); -} - -function replaceForAllOtherOSes(): array -{ - return explode(PHP_EOL, run('grep -E -r -l -i ":author|:vendor|:package|VendorName|skeleton|vendor_name|vendor_slug|author@domain.com" --exclude-dir=vendor ./* ./.github/* | grep -v '.basename(__FILE__))); -} - -$gitName = run('git config user.name'); -$authorName = ask('Author name', $gitName); - -$gitEmail = run('git config user.email'); -$authorEmail = ask('Author email', $gitEmail); - -$usernameGuess = explode(':', run('git config remote.origin.url'))[1]; -$usernameGuess = dirname($usernameGuess); -$usernameGuess = basename($usernameGuess); -$authorUsername = ask('Author username', $usernameGuess); - -$vendorName = ask('Vendor name', $authorUsername); -$vendorSlug = slugify($vendorName); -$vendorNamespace = str_replace('-', '', ucwords($vendorName)); -$vendorNamespace = ask('Vendor namespace', $vendorNamespace); - -$currentDirectory = getcwd(); -$folderName = basename($currentDirectory); - -$packageName = ask('Package name', $folderName); -$packageNameWithoutPrefix = remove_prefix('Rapidez ', $packageName); -$packageSlug = slugify($packageName); -$packageSlugWithoutPrefix = remove_prefix('rapidez-', $packageSlug); - -$className = title_case($packageName); -$className = ask('Class name', $className); -$variableName = lcfirst($className); -$description = ask('Package description', "This is my package {$packageSlug}"); - -writeln('------'); -writeln("Author : {$authorName} ({$authorUsername}, {$authorEmail})"); -writeln("Vendor : {$vendorName} ({$vendorSlug})"); -writeln("Package : {$packageSlug} <{$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 = (str_starts_with(strtoupper(PHP_OS), 'WIN') ? replaceForWindows() : replaceForAllOtherOSes()); - -foreach ($files as $file) { - replace_in_file($file, [ - ':author_name' => $authorName, - ':author_username' => $authorUsername, - 'author@domain.com' => $authorEmail, - ':vendor_name' => $vendorName, - ':vendor_slug' => $vendorSlug, - 'VendorName' => $vendorNamespace, - ':package_name_without_prefix' => $packageNameWithoutPrefix, - ':package_name' => $packageName, - ':package_slug_without_prefix' => $packageSlugWithoutPrefix, - ':package_slug' => $packageSlug, - 'Skeleton' => $className, - 'skeleton' => $packageSlug, - 'variable' => $variableName, - ':package_description' => $description, - ]); - - match (true) { - str_contains($file, determineSeparator('src/SkeletonServiceProvider.php')) => rename($file, determineSeparator('./src/'.$className.'ServiceProvider.php')), - str_contains($file, determineSeparator('config/rapidez/skeleton.php')) => rename($file, determineSeparator('./config/rapidez/'.$packageSlugWithoutPrefix.'.php')), - str_contains($file, 'README.md') => remove_readme_paragraphs($file), - default => [], - }; -} - -confirm('Execute `composer install`?') && run('composer install'); - -confirm('Let this script delete itself?', true) && unlink(__FILE__); diff --git a/resources/js/components/Example.vue b/resources/js/components/Example.vue deleted file mode 100644 index 4c9eb65..0000000 --- a/resources/js/components/Example.vue +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/resources/js/package.js b/resources/js/package.js deleted file mode 100644 index c9503b6..0000000 --- a/resources/js/package.js +++ /dev/null @@ -1,15 +0,0 @@ -// This file will be loaded automatically after installing the package. -// See: https://github.com/rapidez/rapidez/blob/master/resources/js/app.js - -// Vue.component('example', () => import('./components/Example.vue')) -// -- Or if you don't want it to be lazy loaded: -// import example from './components/Example.vue' -// Vue.component('example', example) - -document.addEventListener('vue:loaded', function () { - // You can access the main Vue instance with "window.app" - - // window.app.$on('event-name', () => { - // - // }); -}) diff --git a/resources/views/components/.gitkeep b/resources/views/components/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/resources/views/top-bar.blade.php b/resources/views/top-bar.blade.php new file mode 100644 index 0000000..3429f90 --- /dev/null +++ b/resources/views/top-bar.blade.php @@ -0,0 +1,7 @@ +@return(!request()->routeIs('checkout')) +
+
+ @lang('default checkout') + @lang('onestep checkout') +
+
diff --git a/routes/api.php b/routes/api.php deleted file mode 100644 index 12a9fee..0000000 --- a/routes/api.php +++ /dev/null @@ -1,5 +0,0 @@ -prefix('api')->group(function () { - // -}); diff --git a/routes/web.php b/routes/web.php deleted file mode 100644 index a7cbabc..0000000 --- a/routes/web.php +++ /dev/null @@ -1,5 +0,0 @@ -group(function () { - // -}); diff --git a/src/DemoHelperServiceProvider.php b/src/DemoHelperServiceProvider.php new file mode 100644 index 0000000..d97bfd2 --- /dev/null +++ b/src/DemoHelperServiceProvider.php @@ -0,0 +1,44 @@ +bootMiddleware() + ->bootViews() + ->bootPublishables(); + } + + public function bootMiddleware(): self + { + Route::pushMiddlewareToGroup('web', SetDemoConfig::class); + + return $this; + } + + public function bootViews(): self + { + $this->loadViewsFrom(__DIR__.'/../resources/views', 'rapidez-demo-helper'); + + View::composer('rapidez::layouts.app', fn($view) => $view->getFactory()->startPush('head', view('rapidez-demo-helper::top-bar'))); + + return $this; + } + + public function bootPublishables() : self + { + $this->publishes([ + __DIR__.'/../resources/views' => resource_path('views/vendor/rapidez-demo-helper'), + ], 'rapidez-demo-helper-views'); + + return $this; + } +} diff --git a/src/Http/Middleware/SetDemoConfig.php b/src/Http/Middleware/SetDemoConfig.php new file mode 100644 index 0000000..66cf04b --- /dev/null +++ b/src/Http/Middleware/SetDemoConfig.php @@ -0,0 +1,33 @@ +session()->get('config', []); + + if ($request->has('checkout')) { + if ($request->get('checkout') === 'onestep') { + Arr::set($sessionConfig, 'rapidez.frontend.checkout_steps.default', ['onestep']); + } else { + Arr::forget($sessionConfig, 'rapidez.frontend.checkout_steps.default'); + } + $request->session()->put('config', $sessionConfig); + } + + $config = config(); + + foreach($sessionConfig as $key => $values) { + $config->set($key, array_merge_recursive( + $values ?? [], $config->get($key, []) + )); + } + + return $next($request); + } +} diff --git a/src/SkeletonServiceProvider.php b/src/SkeletonServiceProvider.php deleted file mode 100644 index fa2c9fd..0000000 --- a/src/SkeletonServiceProvider.php +++ /dev/null @@ -1,64 +0,0 @@ -mergeConfigFrom(__DIR__.'/../config/rapidez/:package_slug_without_prefix.php', 'rapidez.:package_slug_without_prefix'); - } - - public function boot() - { - $this - ->bootRoutes() - ->bootViews() - ->bootPublishables() - ->bootFilters(); - } - - public function bootRoutes() : self - { - $this->loadRoutesFrom(__DIR__.'/../routes/api.php'); - $this->loadRoutesFrom(__DIR__.'/../routes/web.php'); - - return $this; - } - - public function bootViews() : self - { - $this->loadViewsFrom(__DIR__.'/../resources/views', 'rapidez-:package_slug_without_prefix'); - - return $this; - } - - public function bootPublishables() : self - { - $this->publishes([ - __DIR__.'/../resources/views' => resource_path('views/vendor/rapidez-:package_slug_without_prefix'), - ], 'rapidez-:package_slug_without_prefix-views'); - - $this->publishes([ - __DIR__.'/../config/rapidez/:package_slug_without_prefix.php' => config_path('rapidez/:package_slug_without_prefix.php'), - ], 'rapidez-:package_slug_without_prefix-config'); - - return $this; - } - - public function bootFilters() : self - { - Eventy::addFilter('index.product.data', function ($data) { - // Manipulate the data - return $data; - }); - - Eventy::addFilter('index.product.mapping', fn ($mapping) => array_merge_recursive($mapping ?: [], [ - 'properties' => [ - // Additional mappings - ], - ])); - } -}