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..6bcbe29 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All Notable changes to `Shorten Url` will be documented in this file. + +Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + + +### Added +- Nothing + +### Deprecated +- Nothing + +### Fixed +- Nothing + +### Removed +- Nothing + +### Security +- Nothing diff --git a/CONDUCT.md b/CONDUCT.md new file mode 100644 index 0000000..3450adb --- /dev/null +++ b/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 `mailtokmahmed@gmail.com`. 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..ef1234d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,25 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +We accept contributions via Pull Requests on [Github](https://github.com/tzsk/shorten-url). + + +## 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. + + +**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..4657396 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +# The MIT License (MIT) + +Copyright (c) 2017 Kazi Mainuddin Ahmed + +> 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/composer.json b/composer.json new file mode 100644 index 0000000..97f7cc5 --- /dev/null +++ b/composer.json @@ -0,0 +1,50 @@ +{ + "name": "tzsk/shorten-url", + "type": "library", + "description": "Google URL Shortener and Expander for Laravel 5.1 and Above.", + "keywords": [ + "tzsk", + "shorten-url" + ], + "homepage": "https://github.com/tzsk/shorten-url", + "license": "MIT", + "authors": [ + { + "name": "Kazi Mainuddin Ahmed", + "email": "mailtokmahmed@gmail.com", + "homepage": "https://tzsk.github.io", + "role": "Developer" + } + ], + "require": { + "illuminate/support": "~5.1", + "php" : "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit" : "~4.0||~5.0", + "squizlabs/php_codesniffer": "^2.3" + }, + "autoload": { + "psr-4": { + "tzsk\\shorten-url\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "tzsk\\shorten-url\\": "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/src/Config/url.php b/src/Config/url.php new file mode 100644 index 0000000..b9e7961 --- /dev/null +++ b/src/Config/url.php @@ -0,0 +1,17 @@ + null, + + +]; + diff --git a/src/Facade/GoogleUrl.php b/src/Facade/GoogleUrl.php new file mode 100644 index 0000000..1830fd6 --- /dev/null +++ b/src/Facade/GoogleUrl.php @@ -0,0 +1,13 @@ +config = $app->make('config')->get('url'); + + $this->curl = curl_init(); + curl_setopt($this->curl, CURLOPT_URL, $this->url()); + curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); + } + + /** + * Get the API Url. + * + * @return string + */ + protected function url() + { + if ($this->config['key']) { + return $this->url . "key=" . $this->config['key'] . "&"; + } + } + + /** + * Enable Extended Response. + * + * @return $this + */ + public function extended() + { + $this->extended = true; + + return $this; + } + + /** + * Shorten URL here. + * + * @param $longUrl + * @return mixed + */ + public function shorten($longUrl) + { + $response = $this->getShorternerResponse($longUrl); + dd($response); + if (! $this->extended) { + self::$buffer[$longUrl] = $response->id; + } + + return $this->extended ? $response : $response->id; + } + + /** + * Expand URL here. + * + * @param $shortUrl + * @return mixed + */ + public function expand($shortUrl) + { + curl_setopt($this->curl, CURLOPT_HTTPGET, true); + curl_setopt($this->curl, CURLOPT_URL, $this->url() . 'shortUrl=' . $shortUrl); + $response = json_decode(curl_exec($this->curl)); + + return $this->extended ? $response : $response->longUrl; + } + + /** + * Shortener Request. + * + * @param $longUrl + * @return mixed + */ + private function getShorternerResponse($longUrl) + { + if (!$this->extended && !empty(self::$buffer[$longUrl]) ) { + return self::$buffer[$longUrl]; + } + + curl_setopt($this->curl, CURLOPT_POST, count(compact('longUrl'))); + curl_setopt($this->curl, CURLOPT_POSTFIELDS, json_encode(compact('longUrl'))); + curl_setopt($this->curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); + + return json_decode(curl_exec($this->curl)); + } + + /** + * Destroy Curl. + */ + function __destruct() + { + curl_close($this->curl); + $this->curl = null; + } + +} \ No newline at end of file diff --git a/src/Provider/ShortenUrlServiceProvider.php b/src/Provider/ShortenUrlServiceProvider.php new file mode 100644 index 0000000..6dcfc9d --- /dev/null +++ b/src/Provider/ShortenUrlServiceProvider.php @@ -0,0 +1,35 @@ +app->singleton('tzsk-shorten-url', function($app) { + return new GoogleUrlShortener($app); + }); + + $this->publishes([ + __DIR__ . "/../Config/url.php" => config_path("url.php") + ], 'config'); + } + + /** + * Register any package services. + * + * @return void + */ + public function register() + { + // + } +} \ No newline at end of file