From 9bc6d2733efd702f877edfa9a503e14d4a8d4674 Mon Sep 17 00:00:00 2001 From: Bahaa Alhagar Date: Tue, 31 Jul 2018 17:39:35 +0200 Subject: [PATCH] package structure --- .editorconfig | 15 ++++ .styleci.yml | 1 + CHANGELOG.md | 22 +++++ CODE_OF_CONDUCT.md | 74 +++++++++++++++++ CONTRIBUTING.md | 32 +++++++ ISSUE_TEMPLATE.md | 27 ++++++ LICENSE.md | 21 +++++ PULL_REQUEST_TEMPLATE.md | 43 ++++++++++ README.md | 83 ++++++++++++++++++ composer.json | 50 +++++++++++ prefill.php | 111 +++++++++++++++++++++++++ src/SkeletonClass.php | 26 ++++++ src/YoutubeUploaderServiceProvider.php | 28 +++++++ 13 files changed, 533 insertions(+) create mode 100644 .editorconfig create mode 100644 .styleci.yml create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 ISSUE_TEMPLATE.md create mode 100644 LICENSE.md create mode 100644 PULL_REQUEST_TEMPLATE.md create mode 100644 README.md create mode 100644 composer.json create mode 100644 prefill.php create mode 100644 src/SkeletonClass.php create mode 100644 src/YoutubeUploaderServiceProvider.php diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cd8eb86 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..247a09c --- /dev/null +++ b/.styleci.yml @@ -0,0 +1 @@ +preset: psr2 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..03c2d68 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog + +All notable changes to `:package_name` will be documented in this file. + +Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## NEXT - YYYY-MM-DD + +### Added +- Nothing + +### Deprecated +- Nothing + +### Fixed +- Nothing + +### Removed +- Nothing + +### Security +- Nothing diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..2dc0a86 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at `:author_email`. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..126fc7f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +We accept contributions via Pull Requests on [Github](https://github.com/:vendor/:package_name). + + +## Pull Requests + +- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - Check the code style with ``$ composer check-style`` and fix it with ``$ composer fix-style``. + +- **Add tests!** - Your patch won't be accepted if it doesn't have tests. + +- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. + +- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option. + +- **Create feature branches** - Don't ask us to pull from your master branch. + +- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. + +- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + + +## Running Tests + +``` bash +$ composer test +``` + + +**Happy coding**! diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..5b48c57 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,27 @@ + + +## Detailed description + +Provide a detailed description of the change or addition you are proposing. + +Make it clear if the issue is a bug, an enhancement or just a question. + +## Context + +Why is this change important to you? How would you use it? + +How can it benefit other users? + +## Possible implementation + +Not obligatory, but suggest an idea for implementing addition or change. + +## Your environment + +Include as many relevant details about the environment you experienced the bug in and how to reproduce it. + +* Version used (e.g. PHP 5.6, HHVM 3): +* Operating system and version (e.g. Ubuntu 16.04, Windows 7): +* Link to your project: +* ... +* ... diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..25a454c --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +# The MIT License (MIT) + +Copyright (c) 2018 :author_name <:author_email> + +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..86246b3 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,43 @@ + + +## Description + +Describe your changes in detail. + +## Motivation and context + +Why is this change required? What problem does it solve? + +If it fixes an open issue, please link to the issue here (if you write `fixes #num` +or `closes #num`, the issue will be automatically closed when the pull is accepted.) + +## How has this been tested? + +Please describe in detail how you tested your changes. + +Include details of your testing environment, and the tests you ran to +see how your change affects other areas of the code, etc. + +## Screenshots (if appropriate) + +## Types of changes + +What types of changes does your code introduce? Put an `x` in all the boxes that apply: +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +## Checklist: + +Go over all the following points, and put an `x` in all the boxes that apply. + +Please, please, please, don't send your pull request until all of the boxes are ticked. Once your pull request is created, it will trigger a build on our [continuous integration](http://www.phptherightway.com/#continuous-integration) server to make sure your [tests and code style pass](https://help.github.com/articles/about-required-status-checks/). + +- [ ] I have read the **[CONTRIBUTING](CONTRIBUTING.md)** document. +- [ ] My pull request addresses exactly one patch/feature. +- [ ] I have created a branch for this patch/feature. +- [ ] Each individual commit in the pull request is meaningful. +- [ ] I have added tests to cover my changes. +- [ ] If my change requires a change to the documentation, I have updated it accordingly. + +If you're unsure about any of these, don't hesitate to ask. We're here to help! diff --git a/README.md b/README.md new file mode 100644 index 0000000..dd6941b --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +# :package_name + +[![Latest Version on Packagist][ico-version]][link-packagist] +[![Software License][ico-license]](LICENSE.md) +[![Build Status][ico-travis]][link-travis] +[![Coverage Status][ico-scrutinizer]][link-scrutinizer] +[![Quality Score][ico-code-quality]][link-code-quality] +[![Total Downloads][ico-downloads]][link-downloads] + +**Note:** Replace ```:author_name``` ```:author_username``` ```:author_website``` ```:author_email``` ```:vendor``` ```:package_name``` ```:package_description``` with their correct values in [README.md](README.md), [CHANGELOG.md](CHANGELOG.md), [CONTRIBUTING.md](CONTRIBUTING.md), [LICENSE.md](LICENSE.md) and [composer.json](composer.json) files, then delete this line. You can run `$ php prefill.php` in the command line to make all replacements at once. Delete the file prefill.php as well. + +This is where your description should go. Try and limit it to a paragraph or two, and maybe throw in a mention of what +PSRs you support to avoid any confusion with users and contributors. + +## Structure + +If any of the following are applicable to your project, then the directory structure should follow industry best practices by being named the following. + +``` +bin/ +config/ +src/ +tests/ +vendor/ +``` + + +## Install + +Via Composer + +``` bash +$ composer require :vendor/:package_name +``` + +## Usage + +``` php +$skeleton = new League\Skeleton(); +echo $skeleton->echoPhrase('Hello, League!'); +``` + +## Change log + +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. + +## Testing + +``` bash +$ composer test +``` + +## Contributing + +Please see [CONTRIBUTING](CONTRIBUTING.md) and [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) for details. + +## Security + +If you discover any security related issues, please email :author_email instead of using the issue tracker. + +## Credits + +- [:author_name][link-author] +- [All Contributors][link-contributors] + +## License + +The MIT License (MIT). Please see [License File](LICENSE.md) for more information. + +[ico-version]: https://img.shields.io/packagist/v/:vendor/:package_name.svg?style=flat-square +[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[ico-travis]: https://img.shields.io/travis/:vendor/:package_name/master.svg?style=flat-square +[ico-scrutinizer]: https://img.shields.io/scrutinizer/coverage/g/:vendor/:package_name.svg?style=flat-square +[ico-code-quality]: https://img.shields.io/scrutinizer/g/:vendor/:package_name.svg?style=flat-square +[ico-downloads]: https://img.shields.io/packagist/dt/:vendor/:package_name.svg?style=flat-square + +[link-packagist]: https://packagist.org/packages/:vendor/:package_name +[link-travis]: https://travis-ci.org/:vendor/:package_name +[link-scrutinizer]: https://scrutinizer-ci.com/g/:vendor/:package_name/code-structure +[link-code-quality]: https://scrutinizer-ci.com/g/:vendor/:package_name +[link-downloads]: https://packagist.org/packages/:vendor/:package_name +[link-author]: https://github.com/:author_username +[link-contributors]: ../../contributors diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..10bbf2b --- /dev/null +++ b/composer.json @@ -0,0 +1,50 @@ +{ + "name": "BahaaAlhagar/YoutubeUploader", + "type": "library", + "description": ":package_description", + "keywords": [ + "BahaaAlhagar", + "YoutubeUploader" + ], + "homepage": "https://github.com/BahaaAlhagar/YoutubeUploader", + "license": "MIT", + "authors": [ + { + "name": ":author_name", + "email": ":author_email", + "homepage": ":author_website", + "role": "Developer" + } + ], + "require": { + "illuminate/support": "~5.1", + "php" : "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit" : ">=5.4.3", + "squizlabs/php_codesniffer": "^2.3" + }, + "autoload": { + "psr-4": { + "BahaaAlhagar\\YoutubeUploader\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "BahaaAlhagar\\YoutubeUploader\\": "tests" + } + }, + "scripts": { + "test": "phpunit", + "check-style": "phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests", + "fix-style": "phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests" + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "config": { + "sort-packages": true + } +} diff --git a/prefill.php b/prefill.php new file mode 100644 index 0000000..822f88a --- /dev/null +++ b/prefill.php @@ -0,0 +1,111 @@ + ['Your name', '', ''], + 'author_github_username' => ['Your Github username', ' in https://github.com/username', ''], + 'author_email' => ['Your email address', '', ''], + 'author_twitter' => ['Your twitter username', '', '@{author_github_username}'], + 'author_website' => ['Your website', '', 'https://github.com/{author_github_username}'], + + 'package_vendor' => ['Package vendor', ' in https://github.com/vendor/package', '{author_github_username}'], + 'package_name' => ['Package name', ' in https://github.com/vendor/package', ''], + 'package_description' => ['Package very short description', '', ''], + + 'psr4_namespace' => ['PSR-4 namespace', 'usually, Vendor\\Package', '{package_vendor}\\{package_name}'], +]; + +$values = []; + +$replacements = [ + ':vendor\\\\:package_name\\\\' => function () use(&$values) { return str_replace('\\', '\\\\', $values['psr4_namespace']) . '\\\\'; }, + ':author_name' => function () use(&$values) { return $values['author_name']; }, + ':author_username' => function () use(&$values) { return $values['author_github_username']; }, + ':author_website' => function () use(&$values) { return $values['author_website'] ?: ('https://github.com/' . $values['author_github_username']); }, + ':author_email' => function () use(&$values) { return $values['author_email'] ?: ($values['author_github_username'] . '@example.com'); }, + ':vendor' => function () use(&$values) { return $values['package_vendor']; }, + ':package_name' => function () use(&$values) { return $values['package_name']; }, + ':package_description' => function () use(&$values) { return $values['package_description']; }, + 'League\\Skeleton' => function () use(&$values) { return $values['psr4_namespace']; }, +]; + +function read_from_console ($prompt) { + if ( function_exists('readline') ) { + $line = trim(readline($prompt)); + if (!empty($line)) { + readline_add_history($line); + } + } else { + echo $prompt; + $line = trim(fgets(STDIN)); + } + return $line; +} + +function interpolate($text, $values) +{ + if (!preg_match_all('/\{(\w+)\}/', $text, $m)) { + return $text; + } + foreach ($m[0] as $k => $str) { + $f = $m[1][$k]; + $text = str_replace($str, $values[$f], $text); + } + return $text; +} + +$modify = 'n'; +do { + if ($modify == 'q') { + exit; + } + + $values = []; + + echo "----------------------------------------------------------------------\n"; + echo "Please, provide the following information:\n"; + echo "----------------------------------------------------------------------\n"; + foreach ($fields as $f => $field) { + $default = isset($field[COL_DEFAULT]) ? interpolate($field[COL_DEFAULT], $values): ''; + $prompt = sprintf( + '%s%s%s: ', + $field[COL_DESCRIPTION], + $field[COL_HELP] ? ' (' . $field[COL_HELP] . ')': '', + $field[COL_DEFAULT] !== '' ? ' [' . $default . ']': '' + ); + $values[$f] = read_from_console($prompt); + if (empty($values[$f])) { + $values[$f] = $default; + } + } + echo "\n"; + + echo "----------------------------------------------------------------------\n"; + echo "Please, check that everything is correct:\n"; + echo "----------------------------------------------------------------------\n"; + foreach ($fields as $f => $field) { + echo $field[COL_DESCRIPTION] . ": $values[$f]\n"; + } + echo "\n"; +} while (($modify = strtolower(read_from_console('Modify files with these values? [y/N/q] '))) != 'y'); +echo "\n"; + +$files = array_merge( + glob(__DIR__ . '/*.md'), + glob(__DIR__ . '/*.xml.dist'), + glob(__DIR__ . '/composer.json'), + glob(__DIR__ . '/src/*.php'), + glob(__DIR__ . '/tests/*.php') +); +foreach ($files as $f) { + $contents = file_get_contents($f); + foreach ($replacements as $str => $func) { + $contents = str_replace($str, $func(), $contents); + } + file_put_contents($f, $contents); +} + +echo "Done.\n"; +echo "Now you should remove the file '" . basename(__FILE__) . "'.\n"; diff --git a/src/SkeletonClass.php b/src/SkeletonClass.php new file mode 100644 index 0000000..9f6a3f5 --- /dev/null +++ b/src/SkeletonClass.php @@ -0,0 +1,26 @@ +