├── .env.example
├── .gitignore
├── LICENSE
├── README.md
├── app
├── Api
│ ├── BaseApi.php
│ ├── DemoApi.php
│ └── RegisterApi.php
├── Command
│ └── TestCommand.php
├── Models
│ ├── Model.php
│ └── Register
│ │ ├── Register_V1_0.php
│ │ └── Register_V1_1.php
├── Services
│ ├── DB.php
│ ├── Logger.php
│ ├── Mail.php
│ └── Redis.php
└── Traits
│ ├── FormatTrait.php
│ └── VersionTrait.php
├── bootstrap
└── autoload.php
├── composer.json
├── composer.lock
├── phpunit.xml
├── public
└── index.php
├── route
└── api.php
├── storage
└── .gitignore
├── support
└── helper.php
├── task.php
└── tests
├── HelperTest.php
└── ServiceTest.php
/.env.example:
--------------------------------------------------------------------------------
1 | APP_DEBUG=true
2 | TIMEZONE=Asia/Shanghai
3 |
4 | # Database config
5 | # [required]
6 | DB_TYPE=mysql
7 | DB_NAME=test
8 | DB_HOST=127.0.0.1
9 | DB_USERNAME=root
10 | DB_PASSWORD=
11 | # [optional]
12 | DB_PORT=
13 | DB_CHARSET=
14 | DB_PREFIX=
15 |
16 | # Mail
17 | MAIL_HOST=
18 | MAIL_USERNAME=
19 | MAIL_PASSWORD=
20 | MAIL_FROM_ADDRESS=
21 | MAIL_FROM_NAME=
22 |
23 | # Redis config
24 | REDIS_SCHEME=tcp
25 | REDIS_HOST=127.0.0.1
26 | REDIS_PORT=6379
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | /.idea
3 | /vendor
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Moext
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |

2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | ## Introduction
10 | **Moant is a php micro framework powered by slim.Used for easy and quick development api.**
11 | **Moant have the following characteristics:**
12 | * **restful api route**
13 | * **flexible api version control**
14 | * **customize package**
15 | * **php cli command**
16 | * ......
17 |
18 | ## Installation
19 | ```
20 | composer create-project pygroos/moant your-app '1.0.*' --prefer-dist -vvv
21 | ```
22 |
23 | ## Example
24 | * **Route**
25 | ```
26 | $app->get('/', '\App\Api\DemoApi:test');
27 | ```
28 | * **Config**
29 | ```
30 | APP_DEBUG=true
31 | TIMEZONE=Asia/Shanghai
32 |
33 | # Database config
34 | # [required]
35 | DB_TYPE=mysql
36 | DB_NAME=test
37 | DB_HOST=127.0.0.1
38 | DB_USERNAME=root
39 | DB_PASSWORD=
40 | # [optional]
41 | DB_PORT=
42 | DB_CHARSET=
43 | DB_PREFIX=
44 |
45 | # Redis config
46 | REDIS_SCHEME=tcp
47 | REDIS_HOST=127.0.0.1
48 | REDIS_PORT=6379
49 | ```
50 | * **Api demo**
51 | ```
52 | request->getParam('param', 0);
66 |
67 | // DB Service Example
68 | $db = DB::getInstance();
69 | $arrUser = $db->select('users', ['username']);
70 |
71 | // Redis Service Example
72 | $redis = Redis::getInstance();
73 | $redis->setex('redis_key', 3600, json_encode($arrUser));
74 |
75 | // Logger Service Example
76 | Logger::add(
77 | 'name',
78 | [
79 | $this->request->getUri(),
80 | $this->request->getMethod()
81 | ]
82 | );
83 |
84 | return $this->outPut(
85 | 200,
86 | 'success',
87 | ['project' => 'Moant Framework'],
88 | $this->version
89 | );
90 | }
91 | }
92 | ```
93 |
94 | * **Command**
95 | ```
96 | php task.php [Class] [Method] [(optional) param ...]
97 | ```
98 |
99 | ## In use package
100 | * [Medoo](https://medoo.in/)
101 | * [Predis](https://github.com/nrk/predis/wiki)
102 | * [Monolog](https://seldaek.github.io/monolog/)
103 | * [Phpdotenv](https://github.com/vlucas/phpdotenv/blob/master/README.md)
104 | * [Guzzle](http://docs.guzzlephp.org/en/stable/overview.html)
105 |
106 | ## Video tutorial
107 | http://study.163.com/course/introduction/1004712047.htm
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/app/Api/BaseApi.php:
--------------------------------------------------------------------------------
1 | c = $ci;
20 | $this->request = $this->c->get('request');
21 | $this->response = $this->c->get('response');
22 |
23 | if ($this->getVersionForHeader())
24 | {
25 | $this->version = $this->getVersionForHeader();
26 | }
27 | else
28 | {
29 | $this->version = $this->request->getParam('v') ? $this->request->getParam('v') : '1.0';
30 | }
31 | }
32 |
33 | public function outPut($code, $message = '', $data = [], $version = '1.0')
34 | {
35 | return $this->response->withJson(
36 | [
37 | 'code' => $code,
38 | 'message' => $message,
39 | 'data' => $data,
40 | 'version' => $version,
41 | 'runtime' => intval((microtime(true) - SERVICE_START) * 1000),
42 | ]
43 | );
44 | }
45 | }
--------------------------------------------------------------------------------
/app/Api/DemoApi.php:
--------------------------------------------------------------------------------
1 | select('users', ['username']);
16 |
17 | // Redis Service Example
18 | $redis = Redis::getInstance();
19 | $redis->setex('redis_key', 3600, json_encode($arrUser));
20 |
21 | // Logger Service Example
22 | Logger::add(
23 | 'name',
24 | [
25 | $this->request->getUri(),
26 | $this->request->getMethod()
27 | ]
28 | );
29 |
30 | return $this->outPut(
31 | 200,
32 | 'success',
33 | ['project' => 'Moant Framework'],
34 | $this->version
35 | );
36 | }
37 | }
--------------------------------------------------------------------------------
/app/Api/RegisterApi.php:
--------------------------------------------------------------------------------
1 | request->getParam('email', '');
13 | $username = $this->request->getParam('username', '');
14 | $password = $this->request->getParam('password', '');
15 |
16 | $this->getInstanceByVersion()->store($email, $username, $password);
17 | }
18 |
19 | private function getInstanceByVersion()
20 | {
21 | $ret = null;
22 |
23 | if (0 == strcmp('1.1', $this->version))
24 | {
25 | $ret = Register_V1_1::getInstance();
26 | }
27 | else
28 | {
29 | $ret = Register_V1_0::getInstance();
30 | }
31 |
32 | return $ret;
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/app/Command/TestCommand.php:
--------------------------------------------------------------------------------
1 | modelVersion = '1.0';
18 |
19 | $this->db = DB::getInstance();
20 | $this->redis = Redis::getInstance();
21 | }
22 |
23 | final public static function getInstance()
24 | {
25 | $ret = null;
26 | $className = get_called_class();
27 | if (false !== $className && is_string($className))
28 | {
29 | if (! in_array($className, self::$arrInstance))
30 | {
31 | $ret = self::$arrInstance[$className] = new $className();
32 | }
33 | else
34 | {
35 | $ret = self::$arrInstance[$className];
36 | }
37 | }
38 | return $ret;
39 | }
40 |
41 | final public function getModelVersion()
42 | {
43 | return $this->modelVersion;
44 | }
45 |
46 | final public function setModelVersion($version)
47 | {
48 | $this->modelVersion = $version;
49 | }
50 |
51 | final private function __clone() {}
52 | }
--------------------------------------------------------------------------------
/app/Models/Register/Register_V1_0.php:
--------------------------------------------------------------------------------
1 | setModelVersion('1.1');
11 | }
12 |
13 | public function store($email, $username, $password)
14 | {
15 |
16 | }
17 |
18 | public function verify()
19 | {
20 |
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Services/DB.php:
--------------------------------------------------------------------------------
1 | env('DB_TYPE', 'mysql'),
21 | 'database_name' => env('DB_NAME'),
22 | 'server' => env('DB_HOST'),
23 | 'username' => env('DB_USERNAME'),
24 | 'password' => env('DB_PASSWORD'),
25 | 'charset' => env('DB_CHARSET', 'utf8'),
26 | 'port' => env('DB_PORT', 3306),
27 | 'prefix' => env('DB_PREFIX', ''),
28 | ]
29 | );
30 | }
31 |
32 | return self::$instance;
33 | }
34 | }
--------------------------------------------------------------------------------
/app/Services/Logger.php:
--------------------------------------------------------------------------------
1 | pushHandler(new StreamHandler($path . $name .'.'. date('Y-m-d') . '.log', $level));
16 |
17 | $log->info($name, $data);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/Services/Mail.php:
--------------------------------------------------------------------------------
1 | ';
13 | $mail = new Message;
14 | $mail->setFrom($setForm);
15 | $mail->addTo($address);
16 | $mail->setSubject($subject);
17 | $mail->setBody($content);
18 |
19 | $mailer = new SmtpMailer([
20 | 'host' => env('MAIL_HOST'),
21 | 'username' => env('MAIL_USERNAME'),
22 | 'password' => env('MAIL_PASSWORD'),
23 | 'port' => 465,
24 | 'secure' => 'ssl'
25 | ]);
26 | $mailer->send($mail);
27 | }
28 | }
--------------------------------------------------------------------------------
/app/Services/Redis.php:
--------------------------------------------------------------------------------
1 | env('REDIS_SCHEME', 'tcp:'),
20 | 'host' => env('REDIS_HOST', '127.0.0.1'),
21 | 'port' => env('REDIS_PORT', 6379),
22 | ]);
23 | }
24 |
25 | return self::$instance;
26 | }
27 | }
--------------------------------------------------------------------------------
/app/Traits/FormatTrait.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pygroos/moant/5252e6c44af42a577a1eb22e4660be17aba0135b/app/Traits/FormatTrait.php
--------------------------------------------------------------------------------
/app/Traits/VersionTrait.php:
--------------------------------------------------------------------------------
1 | 0)
19 | {
20 | $version = substr($accept, $pos + strlen($needle));
21 | if (strlen($version) > 0)
22 | {
23 | $ret = trim($version, '\r\n\t');
24 | }
25 | }
26 | }
27 |
28 | return $ret;
29 | }
30 | }
--------------------------------------------------------------------------------
/bootstrap/autoload.php:
--------------------------------------------------------------------------------
1 | load();
10 | $currentKeys = array_keys($_ENV);
11 | $newKeys = array_diff($currentKeys, $previousKeys);
12 | array_map(function($key) {
13 | unset($_SERVER[$key]);
14 | }, $newKeys);
15 |
16 | // Set timezone
17 | @ date_default_timezone_set(env('TIMEZONE', 'UTC'));
18 |
19 | if ('cli-server' == SAPI_TYPE) {
20 | // Create app
21 | $app = new \Slim\App(
22 | [
23 | 'settings' => [
24 | 'displayErrorDetails' => env('APP_DEBUG', true)
25 | ]
26 | ]
27 | );
28 | // Get container
29 | $container = $app->getContainer();
30 |
31 | // Require api route file
32 | require dirname(__FILE__) . '/../route/api.php';
33 | }
34 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pygroos/moant",
3 | "description": "Micro framework powered by slim",
4 | "keywords": ["framework","slim","moant"],
5 | "license": "MIT",
6 | "type": "project",
7 | "authors": [
8 | {
9 | "name": "pygroos",
10 | "email": "pygroos@gmail.com"
11 | }
12 | ],
13 | "require": {
14 | "php": ">=5.5.0",
15 | "slim/slim": "^3.8",
16 | "catfan/medoo": "^1.4",
17 | "predis/predis": "^1.1",
18 | "monolog/monolog": "^1.23",
19 | "vlucas/phpdotenv": "^2.4",
20 | "guzzlehttp/guzzle": "^6.3",
21 | "nette/mail": "^3.0"
22 | },
23 | "require-dev": {
24 | "phpunit/phpunit": "^6.4"
25 | },
26 | "autoload": {
27 | "files": ["support/helper.php"],
28 | "psr-4": {
29 | "App\\": "app/"
30 | }
31 | },
32 | "minimum-stability": "stable",
33 | "scripts": {
34 | "post-root-package-install": [
35 | "php -r \"copy('.env.example', '.env');\""
36 | ],
37 | "post-create-project-cmd": [
38 | "composer dump-autoload -o"
39 | ]
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "2cb7165b8e79c3a3a873559cbb9275c0",
8 | "packages": [
9 | {
10 | "name": "catfan/medoo",
11 | "version": "v1.5.2",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/catfan/Medoo.git",
15 | "reference": "d65fad6c087e5904803e0dfd4e7a984d0eda77ef"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/catfan/Medoo/zipball/d65fad6c087e5904803e0dfd4e7a984d0eda77ef",
20 | "reference": "d65fad6c087e5904803e0dfd4e7a984d0eda77ef",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "ext-pdo": "*",
25 | "php": ">=5.4"
26 | },
27 | "suggest": {
28 | "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform",
29 | "ext-pdo_mysql": "For MySQL or MariaDB database",
30 | "ext-pdo_oci": "For Oracle database",
31 | "ext-pdo_oci8": "For Oracle version 8 database",
32 | "ext-pdo_pqsql": "For PostgreSQL database",
33 | "ext-pdo_sqlite": "For SQLite database",
34 | "ext-pdo_sqlsrv": "For MSSQL database"
35 | },
36 | "type": "framework",
37 | "autoload": {
38 | "psr-4": {
39 | "Medoo\\": "/src"
40 | }
41 | },
42 | "notification-url": "https://packagist.org/downloads/",
43 | "license": [
44 | "MIT"
45 | ],
46 | "authors": [
47 | {
48 | "name": "Angel Lai",
49 | "email": "angel@catfan.me"
50 | }
51 | ],
52 | "description": "The lightest PHP database framework to accelerate development",
53 | "homepage": "https://medoo.in",
54 | "keywords": [
55 | "database",
56 | "lightweight",
57 | "mariadb",
58 | "mssql",
59 | "mysql",
60 | "oracle",
61 | "php framework",
62 | "postgresql",
63 | "sql",
64 | "sqlite"
65 | ],
66 | "time": "2017-12-01T14:31:32+00:00"
67 | },
68 | {
69 | "name": "container-interop/container-interop",
70 | "version": "1.2.0",
71 | "source": {
72 | "type": "git",
73 | "url": "https://github.com/container-interop/container-interop.git",
74 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
75 | },
76 | "dist": {
77 | "type": "zip",
78 | "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
79 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
80 | "shasum": ""
81 | },
82 | "require": {
83 | "psr/container": "^1.0"
84 | },
85 | "type": "library",
86 | "autoload": {
87 | "psr-4": {
88 | "Interop\\Container\\": "src/Interop/Container/"
89 | }
90 | },
91 | "notification-url": "https://packagist.org/downloads/",
92 | "license": [
93 | "MIT"
94 | ],
95 | "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
96 | "homepage": "https://github.com/container-interop/container-interop",
97 | "time": "2017-02-14T19:40:03+00:00"
98 | },
99 | {
100 | "name": "guzzlehttp/guzzle",
101 | "version": "6.3.0",
102 | "source": {
103 | "type": "git",
104 | "url": "https://github.com/guzzle/guzzle.git",
105 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
106 | },
107 | "dist": {
108 | "type": "zip",
109 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
110 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
111 | "shasum": ""
112 | },
113 | "require": {
114 | "guzzlehttp/promises": "^1.0",
115 | "guzzlehttp/psr7": "^1.4",
116 | "php": ">=5.5"
117 | },
118 | "require-dev": {
119 | "ext-curl": "*",
120 | "phpunit/phpunit": "^4.0 || ^5.0",
121 | "psr/log": "^1.0"
122 | },
123 | "suggest": {
124 | "psr/log": "Required for using the Log middleware"
125 | },
126 | "type": "library",
127 | "extra": {
128 | "branch-alias": {
129 | "dev-master": "6.2-dev"
130 | }
131 | },
132 | "autoload": {
133 | "files": [
134 | "src/functions_include.php"
135 | ],
136 | "psr-4": {
137 | "GuzzleHttp\\": "src/"
138 | }
139 | },
140 | "notification-url": "https://packagist.org/downloads/",
141 | "license": [
142 | "MIT"
143 | ],
144 | "authors": [
145 | {
146 | "name": "Michael Dowling",
147 | "email": "mtdowling@gmail.com",
148 | "homepage": "https://github.com/mtdowling"
149 | }
150 | ],
151 | "description": "Guzzle is a PHP HTTP client library",
152 | "homepage": "http://guzzlephp.org/",
153 | "keywords": [
154 | "client",
155 | "curl",
156 | "framework",
157 | "http",
158 | "http client",
159 | "rest",
160 | "web service"
161 | ],
162 | "time": "2017-06-22T18:50:49+00:00"
163 | },
164 | {
165 | "name": "guzzlehttp/promises",
166 | "version": "v1.3.1",
167 | "source": {
168 | "type": "git",
169 | "url": "https://github.com/guzzle/promises.git",
170 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
171 | },
172 | "dist": {
173 | "type": "zip",
174 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
175 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
176 | "shasum": ""
177 | },
178 | "require": {
179 | "php": ">=5.5.0"
180 | },
181 | "require-dev": {
182 | "phpunit/phpunit": "^4.0"
183 | },
184 | "type": "library",
185 | "extra": {
186 | "branch-alias": {
187 | "dev-master": "1.4-dev"
188 | }
189 | },
190 | "autoload": {
191 | "psr-4": {
192 | "GuzzleHttp\\Promise\\": "src/"
193 | },
194 | "files": [
195 | "src/functions_include.php"
196 | ]
197 | },
198 | "notification-url": "https://packagist.org/downloads/",
199 | "license": [
200 | "MIT"
201 | ],
202 | "authors": [
203 | {
204 | "name": "Michael Dowling",
205 | "email": "mtdowling@gmail.com",
206 | "homepage": "https://github.com/mtdowling"
207 | }
208 | ],
209 | "description": "Guzzle promises library",
210 | "keywords": [
211 | "promise"
212 | ],
213 | "time": "2016-12-20T10:07:11+00:00"
214 | },
215 | {
216 | "name": "guzzlehttp/psr7",
217 | "version": "1.4.2",
218 | "source": {
219 | "type": "git",
220 | "url": "https://github.com/guzzle/psr7.git",
221 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
222 | },
223 | "dist": {
224 | "type": "zip",
225 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
226 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
227 | "shasum": ""
228 | },
229 | "require": {
230 | "php": ">=5.4.0",
231 | "psr/http-message": "~1.0"
232 | },
233 | "provide": {
234 | "psr/http-message-implementation": "1.0"
235 | },
236 | "require-dev": {
237 | "phpunit/phpunit": "~4.0"
238 | },
239 | "type": "library",
240 | "extra": {
241 | "branch-alias": {
242 | "dev-master": "1.4-dev"
243 | }
244 | },
245 | "autoload": {
246 | "psr-4": {
247 | "GuzzleHttp\\Psr7\\": "src/"
248 | },
249 | "files": [
250 | "src/functions_include.php"
251 | ]
252 | },
253 | "notification-url": "https://packagist.org/downloads/",
254 | "license": [
255 | "MIT"
256 | ],
257 | "authors": [
258 | {
259 | "name": "Michael Dowling",
260 | "email": "mtdowling@gmail.com",
261 | "homepage": "https://github.com/mtdowling"
262 | },
263 | {
264 | "name": "Tobias Schultze",
265 | "homepage": "https://github.com/Tobion"
266 | }
267 | ],
268 | "description": "PSR-7 message implementation that also provides common utility methods",
269 | "keywords": [
270 | "http",
271 | "message",
272 | "request",
273 | "response",
274 | "stream",
275 | "uri",
276 | "url"
277 | ],
278 | "time": "2017-03-20T17:10:46+00:00"
279 | },
280 | {
281 | "name": "monolog/monolog",
282 | "version": "1.23.0",
283 | "source": {
284 | "type": "git",
285 | "url": "https://github.com/Seldaek/monolog.git",
286 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
287 | },
288 | "dist": {
289 | "type": "zip",
290 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
291 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
292 | "shasum": ""
293 | },
294 | "require": {
295 | "php": ">=5.3.0",
296 | "psr/log": "~1.0"
297 | },
298 | "provide": {
299 | "psr/log-implementation": "1.0.0"
300 | },
301 | "require-dev": {
302 | "aws/aws-sdk-php": "^2.4.9 || ^3.0",
303 | "doctrine/couchdb": "~1.0@dev",
304 | "graylog2/gelf-php": "~1.0",
305 | "jakub-onderka/php-parallel-lint": "0.9",
306 | "php-amqplib/php-amqplib": "~2.4",
307 | "php-console/php-console": "^3.1.3",
308 | "phpunit/phpunit": "~4.5",
309 | "phpunit/phpunit-mock-objects": "2.3.0",
310 | "ruflin/elastica": ">=0.90 <3.0",
311 | "sentry/sentry": "^0.13",
312 | "swiftmailer/swiftmailer": "^5.3|^6.0"
313 | },
314 | "suggest": {
315 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
316 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
317 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
318 | "ext-mongo": "Allow sending log messages to a MongoDB server",
319 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
320 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
321 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
322 | "php-console/php-console": "Allow sending log messages to Google Chrome",
323 | "rollbar/rollbar": "Allow sending log messages to Rollbar",
324 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
325 | "sentry/sentry": "Allow sending log messages to a Sentry server"
326 | },
327 | "type": "library",
328 | "extra": {
329 | "branch-alias": {
330 | "dev-master": "2.0.x-dev"
331 | }
332 | },
333 | "autoload": {
334 | "psr-4": {
335 | "Monolog\\": "src/Monolog"
336 | }
337 | },
338 | "notification-url": "https://packagist.org/downloads/",
339 | "license": [
340 | "MIT"
341 | ],
342 | "authors": [
343 | {
344 | "name": "Jordi Boggiano",
345 | "email": "j.boggiano@seld.be",
346 | "homepage": "http://seld.be"
347 | }
348 | ],
349 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
350 | "homepage": "http://github.com/Seldaek/monolog",
351 | "keywords": [
352 | "log",
353 | "logging",
354 | "psr-3"
355 | ],
356 | "time": "2017-06-19T01:22:40+00:00"
357 | },
358 | {
359 | "name": "nette/mail",
360 | "version": "v3.0.0",
361 | "source": {
362 | "type": "git",
363 | "url": "https://github.com/nette/mail.git",
364 | "reference": "ce0064772ab3a6a01658c7368b63978597d60e08"
365 | },
366 | "dist": {
367 | "type": "zip",
368 | "url": "https://api.github.com/repos/nette/mail/zipball/ce0064772ab3a6a01658c7368b63978597d60e08",
369 | "reference": "ce0064772ab3a6a01658c7368b63978597d60e08",
370 | "shasum": ""
371 | },
372 | "require": {
373 | "ext-iconv": "*",
374 | "nette/utils": "^2.4 || ^3.0",
375 | "php": ">=7.1"
376 | },
377 | "conflict": {
378 | "nette/nette": "<2.2"
379 | },
380 | "require-dev": {
381 | "nette/di": "^3.0.0",
382 | "nette/tester": "^2.0",
383 | "tracy/tracy": "^2.4"
384 | },
385 | "suggest": {
386 | "ext-fileinfo": "to detect type of attached files"
387 | },
388 | "type": "library",
389 | "extra": {
390 | "branch-alias": {
391 | "dev-master": "3.0-dev"
392 | }
393 | },
394 | "autoload": {
395 | "classmap": [
396 | "src/"
397 | ]
398 | },
399 | "notification-url": "https://packagist.org/downloads/",
400 | "license": [
401 | "BSD-3-Clause",
402 | "GPL-2.0",
403 | "GPL-3.0"
404 | ],
405 | "authors": [
406 | {
407 | "name": "David Grudl",
408 | "homepage": "https://davidgrudl.com"
409 | },
410 | {
411 | "name": "Nette Community",
412 | "homepage": "https://nette.org/contributors"
413 | }
414 | ],
415 | "description": "📧 Nette Mail: handy email creation and transfer library for PHP with both text and MIME-compliant support.",
416 | "homepage": "https://nette.org",
417 | "keywords": [
418 | "mail",
419 | "mailer",
420 | "mime",
421 | "nette",
422 | "smtp"
423 | ],
424 | "time": "2019-02-20T06:53:15+00:00"
425 | },
426 | {
427 | "name": "nette/utils",
428 | "version": "v3.0.0",
429 | "source": {
430 | "type": "git",
431 | "url": "https://github.com/nette/utils.git",
432 | "reference": "ec1e4055c295d73bb9e8ce27be859f434a6f6806"
433 | },
434 | "dist": {
435 | "type": "zip",
436 | "url": "https://api.github.com/repos/nette/utils/zipball/ec1e4055c295d73bb9e8ce27be859f434a6f6806",
437 | "reference": "ec1e4055c295d73bb9e8ce27be859f434a6f6806",
438 | "shasum": ""
439 | },
440 | "require": {
441 | "php": ">=7.1"
442 | },
443 | "conflict": {
444 | "nette/nette": "<2.2"
445 | },
446 | "require-dev": {
447 | "nette/tester": "~2.0",
448 | "tracy/tracy": "^2.3"
449 | },
450 | "suggest": {
451 | "ext-gd": "to use Image",
452 | "ext-iconv": "to use Strings::webalize() and toAscii()",
453 | "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
454 | "ext-json": "to use Nette\\Utils\\Json",
455 | "ext-mbstring": "to use Strings::lower() etc...",
456 | "ext-xml": "to use Strings::length() etc. when mbstring is not available"
457 | },
458 | "type": "library",
459 | "extra": {
460 | "branch-alias": {
461 | "dev-master": "3.0-dev"
462 | }
463 | },
464 | "autoload": {
465 | "classmap": [
466 | "src/"
467 | ]
468 | },
469 | "notification-url": "https://packagist.org/downloads/",
470 | "license": [
471 | "BSD-3-Clause",
472 | "GPL-2.0",
473 | "GPL-3.0"
474 | ],
475 | "authors": [
476 | {
477 | "name": "David Grudl",
478 | "homepage": "https://davidgrudl.com"
479 | },
480 | {
481 | "name": "Nette Community",
482 | "homepage": "https://nette.org/contributors"
483 | }
484 | ],
485 | "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
486 | "homepage": "https://nette.org",
487 | "keywords": [
488 | "array",
489 | "core",
490 | "datetime",
491 | "images",
492 | "json",
493 | "nette",
494 | "paginator",
495 | "password",
496 | "slugify",
497 | "string",
498 | "unicode",
499 | "utf-8",
500 | "utility",
501 | "validation"
502 | ],
503 | "time": "2019-02-05T21:43:00+00:00"
504 | },
505 | {
506 | "name": "nikic/fast-route",
507 | "version": "v1.2.0",
508 | "source": {
509 | "type": "git",
510 | "url": "https://github.com/nikic/FastRoute.git",
511 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6"
512 | },
513 | "dist": {
514 | "type": "zip",
515 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6",
516 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6",
517 | "shasum": ""
518 | },
519 | "require": {
520 | "php": ">=5.4.0"
521 | },
522 | "type": "library",
523 | "autoload": {
524 | "psr-4": {
525 | "FastRoute\\": "src/"
526 | },
527 | "files": [
528 | "src/functions.php"
529 | ]
530 | },
531 | "notification-url": "https://packagist.org/downloads/",
532 | "license": [
533 | "BSD-3-Clause"
534 | ],
535 | "authors": [
536 | {
537 | "name": "Nikita Popov",
538 | "email": "nikic@php.net"
539 | }
540 | ],
541 | "description": "Fast request router for PHP",
542 | "keywords": [
543 | "router",
544 | "routing"
545 | ],
546 | "time": "2017-01-19T11:35:12+00:00"
547 | },
548 | {
549 | "name": "pimple/pimple",
550 | "version": "v3.2.2",
551 | "source": {
552 | "type": "git",
553 | "url": "https://github.com/silexphp/Pimple.git",
554 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a"
555 | },
556 | "dist": {
557 | "type": "zip",
558 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/4d45fb62d96418396ec58ba76e6f065bca16e10a",
559 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a",
560 | "shasum": ""
561 | },
562 | "require": {
563 | "php": ">=5.3.0",
564 | "psr/container": "^1.0"
565 | },
566 | "require-dev": {
567 | "symfony/phpunit-bridge": "^3.2"
568 | },
569 | "type": "library",
570 | "extra": {
571 | "branch-alias": {
572 | "dev-master": "3.2.x-dev"
573 | }
574 | },
575 | "autoload": {
576 | "psr-0": {
577 | "Pimple": "src/"
578 | }
579 | },
580 | "notification-url": "https://packagist.org/downloads/",
581 | "license": [
582 | "MIT"
583 | ],
584 | "authors": [
585 | {
586 | "name": "Fabien Potencier",
587 | "email": "fabien@symfony.com"
588 | }
589 | ],
590 | "description": "Pimple, a simple Dependency Injection Container",
591 | "homepage": "http://pimple.sensiolabs.org",
592 | "keywords": [
593 | "container",
594 | "dependency injection"
595 | ],
596 | "time": "2017-07-23T07:32:15+00:00"
597 | },
598 | {
599 | "name": "predis/predis",
600 | "version": "v1.1.1",
601 | "source": {
602 | "type": "git",
603 | "url": "https://github.com/nrk/predis.git",
604 | "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1"
605 | },
606 | "dist": {
607 | "type": "zip",
608 | "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1",
609 | "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1",
610 | "shasum": ""
611 | },
612 | "require": {
613 | "php": ">=5.3.9"
614 | },
615 | "require-dev": {
616 | "phpunit/phpunit": "~4.8"
617 | },
618 | "suggest": {
619 | "ext-curl": "Allows access to Webdis when paired with phpiredis",
620 | "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
621 | },
622 | "type": "library",
623 | "autoload": {
624 | "psr-4": {
625 | "Predis\\": "src/"
626 | }
627 | },
628 | "notification-url": "https://packagist.org/downloads/",
629 | "license": [
630 | "MIT"
631 | ],
632 | "authors": [
633 | {
634 | "name": "Daniele Alessandri",
635 | "email": "suppakilla@gmail.com",
636 | "homepage": "http://clorophilla.net"
637 | }
638 | ],
639 | "description": "Flexible and feature-complete Redis client for PHP and HHVM",
640 | "homepage": "http://github.com/nrk/predis",
641 | "keywords": [
642 | "nosql",
643 | "predis",
644 | "redis"
645 | ],
646 | "time": "2016-06-16T16:22:20+00:00"
647 | },
648 | {
649 | "name": "psr/container",
650 | "version": "1.0.0",
651 | "source": {
652 | "type": "git",
653 | "url": "https://github.com/php-fig/container.git",
654 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
655 | },
656 | "dist": {
657 | "type": "zip",
658 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
659 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
660 | "shasum": ""
661 | },
662 | "require": {
663 | "php": ">=5.3.0"
664 | },
665 | "type": "library",
666 | "extra": {
667 | "branch-alias": {
668 | "dev-master": "1.0.x-dev"
669 | }
670 | },
671 | "autoload": {
672 | "psr-4": {
673 | "Psr\\Container\\": "src/"
674 | }
675 | },
676 | "notification-url": "https://packagist.org/downloads/",
677 | "license": [
678 | "MIT"
679 | ],
680 | "authors": [
681 | {
682 | "name": "PHP-FIG",
683 | "homepage": "http://www.php-fig.org/"
684 | }
685 | ],
686 | "description": "Common Container Interface (PHP FIG PSR-11)",
687 | "homepage": "https://github.com/php-fig/container",
688 | "keywords": [
689 | "PSR-11",
690 | "container",
691 | "container-interface",
692 | "container-interop",
693 | "psr"
694 | ],
695 | "time": "2017-02-14T16:28:37+00:00"
696 | },
697 | {
698 | "name": "psr/http-message",
699 | "version": "1.0.1",
700 | "source": {
701 | "type": "git",
702 | "url": "https://github.com/php-fig/http-message.git",
703 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
704 | },
705 | "dist": {
706 | "type": "zip",
707 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
708 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
709 | "shasum": ""
710 | },
711 | "require": {
712 | "php": ">=5.3.0"
713 | },
714 | "type": "library",
715 | "extra": {
716 | "branch-alias": {
717 | "dev-master": "1.0.x-dev"
718 | }
719 | },
720 | "autoload": {
721 | "psr-4": {
722 | "Psr\\Http\\Message\\": "src/"
723 | }
724 | },
725 | "notification-url": "https://packagist.org/downloads/",
726 | "license": [
727 | "MIT"
728 | ],
729 | "authors": [
730 | {
731 | "name": "PHP-FIG",
732 | "homepage": "http://www.php-fig.org/"
733 | }
734 | ],
735 | "description": "Common interface for HTTP messages",
736 | "homepage": "https://github.com/php-fig/http-message",
737 | "keywords": [
738 | "http",
739 | "http-message",
740 | "psr",
741 | "psr-7",
742 | "request",
743 | "response"
744 | ],
745 | "time": "2016-08-06T14:39:51+00:00"
746 | },
747 | {
748 | "name": "psr/log",
749 | "version": "1.0.2",
750 | "source": {
751 | "type": "git",
752 | "url": "https://github.com/php-fig/log.git",
753 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
754 | },
755 | "dist": {
756 | "type": "zip",
757 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
758 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
759 | "shasum": ""
760 | },
761 | "require": {
762 | "php": ">=5.3.0"
763 | },
764 | "type": "library",
765 | "extra": {
766 | "branch-alias": {
767 | "dev-master": "1.0.x-dev"
768 | }
769 | },
770 | "autoload": {
771 | "psr-4": {
772 | "Psr\\Log\\": "Psr/Log/"
773 | }
774 | },
775 | "notification-url": "https://packagist.org/downloads/",
776 | "license": [
777 | "MIT"
778 | ],
779 | "authors": [
780 | {
781 | "name": "PHP-FIG",
782 | "homepage": "http://www.php-fig.org/"
783 | }
784 | ],
785 | "description": "Common interface for logging libraries",
786 | "homepage": "https://github.com/php-fig/log",
787 | "keywords": [
788 | "log",
789 | "psr",
790 | "psr-3"
791 | ],
792 | "time": "2016-10-10T12:19:37+00:00"
793 | },
794 | {
795 | "name": "slim/slim",
796 | "version": "3.9.2",
797 | "source": {
798 | "type": "git",
799 | "url": "https://github.com/slimphp/Slim.git",
800 | "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118"
801 | },
802 | "dist": {
803 | "type": "zip",
804 | "url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118",
805 | "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118",
806 | "shasum": ""
807 | },
808 | "require": {
809 | "container-interop/container-interop": "^1.2",
810 | "nikic/fast-route": "^1.0",
811 | "php": ">=5.5.0",
812 | "pimple/pimple": "^3.0",
813 | "psr/container": "^1.0",
814 | "psr/http-message": "^1.0"
815 | },
816 | "provide": {
817 | "psr/http-message-implementation": "1.0"
818 | },
819 | "require-dev": {
820 | "phpunit/phpunit": "^4.0",
821 | "squizlabs/php_codesniffer": "^2.5"
822 | },
823 | "type": "library",
824 | "autoload": {
825 | "psr-4": {
826 | "Slim\\": "Slim"
827 | }
828 | },
829 | "notification-url": "https://packagist.org/downloads/",
830 | "license": [
831 | "MIT"
832 | ],
833 | "authors": [
834 | {
835 | "name": "Rob Allen",
836 | "email": "rob@akrabat.com",
837 | "homepage": "http://akrabat.com"
838 | },
839 | {
840 | "name": "Josh Lockhart",
841 | "email": "hello@joshlockhart.com",
842 | "homepage": "https://joshlockhart.com"
843 | },
844 | {
845 | "name": "Gabriel Manricks",
846 | "email": "gmanricks@me.com",
847 | "homepage": "http://gabrielmanricks.com"
848 | },
849 | {
850 | "name": "Andrew Smith",
851 | "email": "a.smith@silentworks.co.uk",
852 | "homepage": "http://silentworks.co.uk"
853 | }
854 | ],
855 | "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
856 | "homepage": "https://slimframework.com",
857 | "keywords": [
858 | "api",
859 | "framework",
860 | "micro",
861 | "router"
862 | ],
863 | "time": "2017-11-26T19:13:09+00:00"
864 | },
865 | {
866 | "name": "vlucas/phpdotenv",
867 | "version": "v2.4.0",
868 | "source": {
869 | "type": "git",
870 | "url": "https://github.com/vlucas/phpdotenv.git",
871 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c"
872 | },
873 | "dist": {
874 | "type": "zip",
875 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
876 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
877 | "shasum": ""
878 | },
879 | "require": {
880 | "php": ">=5.3.9"
881 | },
882 | "require-dev": {
883 | "phpunit/phpunit": "^4.8 || ^5.0"
884 | },
885 | "type": "library",
886 | "extra": {
887 | "branch-alias": {
888 | "dev-master": "2.4-dev"
889 | }
890 | },
891 | "autoload": {
892 | "psr-4": {
893 | "Dotenv\\": "src/"
894 | }
895 | },
896 | "notification-url": "https://packagist.org/downloads/",
897 | "license": [
898 | "BSD-3-Clause-Attribution"
899 | ],
900 | "authors": [
901 | {
902 | "name": "Vance Lucas",
903 | "email": "vance@vancelucas.com",
904 | "homepage": "http://www.vancelucas.com"
905 | }
906 | ],
907 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
908 | "keywords": [
909 | "dotenv",
910 | "env",
911 | "environment"
912 | ],
913 | "time": "2016-09-01T10:05:43+00:00"
914 | }
915 | ],
916 | "packages-dev": [
917 | {
918 | "name": "doctrine/instantiator",
919 | "version": "1.0.5",
920 | "source": {
921 | "type": "git",
922 | "url": "https://github.com/doctrine/instantiator.git",
923 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
924 | },
925 | "dist": {
926 | "type": "zip",
927 | "url": "https://files.phpcomposer.com/files/doctrine/instantiator/8e884e78f9f0eb1329e445619e04456e64d8051d.zip",
928 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
929 | "shasum": ""
930 | },
931 | "require": {
932 | "php": ">=5.3,<8.0-DEV"
933 | },
934 | "require-dev": {
935 | "athletic/athletic": "~0.1.8",
936 | "ext-pdo": "*",
937 | "ext-phar": "*",
938 | "phpunit/phpunit": "~4.0",
939 | "squizlabs/php_codesniffer": "~2.0"
940 | },
941 | "type": "library",
942 | "extra": {
943 | "branch-alias": {
944 | "dev-master": "1.0.x-dev"
945 | }
946 | },
947 | "autoload": {
948 | "psr-4": {
949 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
950 | }
951 | },
952 | "notification-url": "https://packagist.org/downloads/",
953 | "license": [
954 | "MIT"
955 | ],
956 | "authors": [
957 | {
958 | "name": "Marco Pivetta",
959 | "email": "ocramius@gmail.com",
960 | "homepage": "http://ocramius.github.com/"
961 | }
962 | ],
963 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
964 | "homepage": "https://github.com/doctrine/instantiator",
965 | "keywords": [
966 | "constructor",
967 | "instantiate"
968 | ],
969 | "time": "2015-06-14T21:17:01+00:00"
970 | },
971 | {
972 | "name": "myclabs/deep-copy",
973 | "version": "1.7.0",
974 | "source": {
975 | "type": "git",
976 | "url": "https://github.com/myclabs/DeepCopy.git",
977 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
978 | },
979 | "dist": {
980 | "type": "zip",
981 | "url": "https://files.phpcomposer.com/files/myclabs/DeepCopy/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e.zip",
982 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
983 | "shasum": ""
984 | },
985 | "require": {
986 | "php": "^5.6 || ^7.0"
987 | },
988 | "require-dev": {
989 | "doctrine/collections": "^1.0",
990 | "doctrine/common": "^2.6",
991 | "phpunit/phpunit": "^4.1"
992 | },
993 | "type": "library",
994 | "autoload": {
995 | "psr-4": {
996 | "DeepCopy\\": "src/DeepCopy/"
997 | },
998 | "files": [
999 | "src/DeepCopy/deep_copy.php"
1000 | ]
1001 | },
1002 | "notification-url": "https://packagist.org/downloads/",
1003 | "license": [
1004 | "MIT"
1005 | ],
1006 | "description": "Create deep copies (clones) of your objects",
1007 | "keywords": [
1008 | "clone",
1009 | "copy",
1010 | "duplicate",
1011 | "object",
1012 | "object graph"
1013 | ],
1014 | "time": "2017-10-19T19:58:43+00:00"
1015 | },
1016 | {
1017 | "name": "phar-io/manifest",
1018 | "version": "1.0.1",
1019 | "source": {
1020 | "type": "git",
1021 | "url": "https://github.com/phar-io/manifest.git",
1022 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
1023 | },
1024 | "dist": {
1025 | "type": "zip",
1026 | "url": "https://files.phpcomposer.com/files/phar-io/manifest/2df402786ab5368a0169091f61a7c1e0eb6852d0.zip",
1027 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
1028 | "shasum": ""
1029 | },
1030 | "require": {
1031 | "ext-dom": "*",
1032 | "ext-phar": "*",
1033 | "phar-io/version": "^1.0.1",
1034 | "php": "^5.6 || ^7.0"
1035 | },
1036 | "type": "library",
1037 | "extra": {
1038 | "branch-alias": {
1039 | "dev-master": "1.0.x-dev"
1040 | }
1041 | },
1042 | "autoload": {
1043 | "classmap": [
1044 | "src/"
1045 | ]
1046 | },
1047 | "notification-url": "https://packagist.org/downloads/",
1048 | "license": [
1049 | "BSD-3-Clause"
1050 | ],
1051 | "authors": [
1052 | {
1053 | "name": "Arne Blankerts",
1054 | "email": "arne@blankerts.de",
1055 | "role": "Developer"
1056 | },
1057 | {
1058 | "name": "Sebastian Heuer",
1059 | "email": "sebastian@phpeople.de",
1060 | "role": "Developer"
1061 | },
1062 | {
1063 | "name": "Sebastian Bergmann",
1064 | "email": "sebastian@phpunit.de",
1065 | "role": "Developer"
1066 | }
1067 | ],
1068 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
1069 | "time": "2017-03-05T18:14:27+00:00"
1070 | },
1071 | {
1072 | "name": "phar-io/version",
1073 | "version": "1.0.1",
1074 | "source": {
1075 | "type": "git",
1076 | "url": "https://github.com/phar-io/version.git",
1077 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
1078 | },
1079 | "dist": {
1080 | "type": "zip",
1081 | "url": "https://files.phpcomposer.com/files/phar-io/version/a70c0ced4be299a63d32fa96d9281d03e94041df.zip",
1082 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
1083 | "shasum": ""
1084 | },
1085 | "require": {
1086 | "php": "^5.6 || ^7.0"
1087 | },
1088 | "type": "library",
1089 | "autoload": {
1090 | "classmap": [
1091 | "src/"
1092 | ]
1093 | },
1094 | "notification-url": "https://packagist.org/downloads/",
1095 | "license": [
1096 | "BSD-3-Clause"
1097 | ],
1098 | "authors": [
1099 | {
1100 | "name": "Arne Blankerts",
1101 | "email": "arne@blankerts.de",
1102 | "role": "Developer"
1103 | },
1104 | {
1105 | "name": "Sebastian Heuer",
1106 | "email": "sebastian@phpeople.de",
1107 | "role": "Developer"
1108 | },
1109 | {
1110 | "name": "Sebastian Bergmann",
1111 | "email": "sebastian@phpunit.de",
1112 | "role": "Developer"
1113 | }
1114 | ],
1115 | "description": "Library for handling version information and constraints",
1116 | "time": "2017-03-05T17:38:23+00:00"
1117 | },
1118 | {
1119 | "name": "phpdocumentor/reflection-common",
1120 | "version": "1.0.1",
1121 | "source": {
1122 | "type": "git",
1123 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
1124 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
1125 | },
1126 | "dist": {
1127 | "type": "zip",
1128 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionCommon/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6.zip",
1129 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
1130 | "shasum": ""
1131 | },
1132 | "require": {
1133 | "php": ">=5.5"
1134 | },
1135 | "require-dev": {
1136 | "phpunit/phpunit": "^4.6"
1137 | },
1138 | "type": "library",
1139 | "extra": {
1140 | "branch-alias": {
1141 | "dev-master": "1.0.x-dev"
1142 | }
1143 | },
1144 | "autoload": {
1145 | "psr-4": {
1146 | "phpDocumentor\\Reflection\\": [
1147 | "src"
1148 | ]
1149 | }
1150 | },
1151 | "notification-url": "https://packagist.org/downloads/",
1152 | "license": [
1153 | "MIT"
1154 | ],
1155 | "authors": [
1156 | {
1157 | "name": "Jaap van Otterdijk",
1158 | "email": "opensource@ijaap.nl"
1159 | }
1160 | ],
1161 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
1162 | "homepage": "http://www.phpdoc.org",
1163 | "keywords": [
1164 | "FQSEN",
1165 | "phpDocumentor",
1166 | "phpdoc",
1167 | "reflection",
1168 | "static analysis"
1169 | ],
1170 | "time": "2017-09-11T18:02:19+00:00"
1171 | },
1172 | {
1173 | "name": "phpdocumentor/reflection-docblock",
1174 | "version": "4.2.0",
1175 | "source": {
1176 | "type": "git",
1177 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
1178 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da"
1179 | },
1180 | "dist": {
1181 | "type": "zip",
1182 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionDocBlock/66465776cfc249844bde6d117abff1d22e06c2da.zip",
1183 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da",
1184 | "shasum": ""
1185 | },
1186 | "require": {
1187 | "php": "^7.0",
1188 | "phpdocumentor/reflection-common": "^1.0.0",
1189 | "phpdocumentor/type-resolver": "^0.4.0",
1190 | "webmozart/assert": "^1.0"
1191 | },
1192 | "require-dev": {
1193 | "doctrine/instantiator": "~1.0.5",
1194 | "mockery/mockery": "^1.0",
1195 | "phpunit/phpunit": "^6.4"
1196 | },
1197 | "type": "library",
1198 | "extra": {
1199 | "branch-alias": {
1200 | "dev-master": "4.x-dev"
1201 | }
1202 | },
1203 | "autoload": {
1204 | "psr-4": {
1205 | "phpDocumentor\\Reflection\\": [
1206 | "src/"
1207 | ]
1208 | }
1209 | },
1210 | "notification-url": "https://packagist.org/downloads/",
1211 | "license": [
1212 | "MIT"
1213 | ],
1214 | "authors": [
1215 | {
1216 | "name": "Mike van Riel",
1217 | "email": "me@mikevanriel.com"
1218 | }
1219 | ],
1220 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1221 | "time": "2017-11-27T17:38:31+00:00"
1222 | },
1223 | {
1224 | "name": "phpdocumentor/type-resolver",
1225 | "version": "0.4.0",
1226 | "source": {
1227 | "type": "git",
1228 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
1229 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
1230 | },
1231 | "dist": {
1232 | "type": "zip",
1233 | "url": "https://files.phpcomposer.com/files/phpDocumentor/TypeResolver/9c977708995954784726e25d0cd1dddf4e65b0f7.zip",
1234 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
1235 | "shasum": ""
1236 | },
1237 | "require": {
1238 | "php": "^5.5 || ^7.0",
1239 | "phpdocumentor/reflection-common": "^1.0"
1240 | },
1241 | "require-dev": {
1242 | "mockery/mockery": "^0.9.4",
1243 | "phpunit/phpunit": "^5.2||^4.8.24"
1244 | },
1245 | "type": "library",
1246 | "extra": {
1247 | "branch-alias": {
1248 | "dev-master": "1.0.x-dev"
1249 | }
1250 | },
1251 | "autoload": {
1252 | "psr-4": {
1253 | "phpDocumentor\\Reflection\\": [
1254 | "src/"
1255 | ]
1256 | }
1257 | },
1258 | "notification-url": "https://packagist.org/downloads/",
1259 | "license": [
1260 | "MIT"
1261 | ],
1262 | "authors": [
1263 | {
1264 | "name": "Mike van Riel",
1265 | "email": "me@mikevanriel.com"
1266 | }
1267 | ],
1268 | "time": "2017-07-14T14:27:02+00:00"
1269 | },
1270 | {
1271 | "name": "phpspec/prophecy",
1272 | "version": "1.7.3",
1273 | "source": {
1274 | "type": "git",
1275 | "url": "https://github.com/phpspec/prophecy.git",
1276 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf"
1277 | },
1278 | "dist": {
1279 | "type": "zip",
1280 | "url": "https://files.phpcomposer.com/files/phpspec/prophecy/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf.zip",
1281 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
1282 | "shasum": ""
1283 | },
1284 | "require": {
1285 | "doctrine/instantiator": "^1.0.2",
1286 | "php": "^5.3|^7.0",
1287 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
1288 | "sebastian/comparator": "^1.1|^2.0",
1289 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
1290 | },
1291 | "require-dev": {
1292 | "phpspec/phpspec": "^2.5|^3.2",
1293 | "phpunit/phpunit": "^4.8.35 || ^5.7"
1294 | },
1295 | "type": "library",
1296 | "extra": {
1297 | "branch-alias": {
1298 | "dev-master": "1.7.x-dev"
1299 | }
1300 | },
1301 | "autoload": {
1302 | "psr-0": {
1303 | "Prophecy\\": "src/"
1304 | }
1305 | },
1306 | "notification-url": "https://packagist.org/downloads/",
1307 | "license": [
1308 | "MIT"
1309 | ],
1310 | "authors": [
1311 | {
1312 | "name": "Konstantin Kudryashov",
1313 | "email": "ever.zet@gmail.com",
1314 | "homepage": "http://everzet.com"
1315 | },
1316 | {
1317 | "name": "Marcello Duarte",
1318 | "email": "marcello.duarte@gmail.com"
1319 | }
1320 | ],
1321 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1322 | "homepage": "https://github.com/phpspec/prophecy",
1323 | "keywords": [
1324 | "Double",
1325 | "Dummy",
1326 | "fake",
1327 | "mock",
1328 | "spy",
1329 | "stub"
1330 | ],
1331 | "time": "2017-11-24T13:59:53+00:00"
1332 | },
1333 | {
1334 | "name": "phpunit/php-code-coverage",
1335 | "version": "5.3.0",
1336 | "source": {
1337 | "type": "git",
1338 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1339 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1"
1340 | },
1341 | "dist": {
1342 | "type": "zip",
1343 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-code-coverage/661f34d0bd3f1a7225ef491a70a020ad23a057a1.zip",
1344 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1",
1345 | "shasum": ""
1346 | },
1347 | "require": {
1348 | "ext-dom": "*",
1349 | "ext-xmlwriter": "*",
1350 | "php": "^7.0",
1351 | "phpunit/php-file-iterator": "^1.4.2",
1352 | "phpunit/php-text-template": "^1.2.1",
1353 | "phpunit/php-token-stream": "^2.0.1",
1354 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
1355 | "sebastian/environment": "^3.0",
1356 | "sebastian/version": "^2.0.1",
1357 | "theseer/tokenizer": "^1.1"
1358 | },
1359 | "require-dev": {
1360 | "phpunit/phpunit": "^6.0"
1361 | },
1362 | "suggest": {
1363 | "ext-xdebug": "^2.5.5"
1364 | },
1365 | "type": "library",
1366 | "extra": {
1367 | "branch-alias": {
1368 | "dev-master": "5.3.x-dev"
1369 | }
1370 | },
1371 | "autoload": {
1372 | "classmap": [
1373 | "src/"
1374 | ]
1375 | },
1376 | "notification-url": "https://packagist.org/downloads/",
1377 | "license": [
1378 | "BSD-3-Clause"
1379 | ],
1380 | "authors": [
1381 | {
1382 | "name": "Sebastian Bergmann",
1383 | "email": "sebastian@phpunit.de",
1384 | "role": "lead"
1385 | }
1386 | ],
1387 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1388 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1389 | "keywords": [
1390 | "coverage",
1391 | "testing",
1392 | "xunit"
1393 | ],
1394 | "time": "2017-12-06T09:29:45+00:00"
1395 | },
1396 | {
1397 | "name": "phpunit/php-file-iterator",
1398 | "version": "1.4.5",
1399 | "source": {
1400 | "type": "git",
1401 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1402 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
1403 | },
1404 | "dist": {
1405 | "type": "zip",
1406 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-file-iterator/730b01bc3e867237eaac355e06a36b85dd93a8b4.zip",
1407 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
1408 | "shasum": ""
1409 | },
1410 | "require": {
1411 | "php": ">=5.3.3"
1412 | },
1413 | "type": "library",
1414 | "extra": {
1415 | "branch-alias": {
1416 | "dev-master": "1.4.x-dev"
1417 | }
1418 | },
1419 | "autoload": {
1420 | "classmap": [
1421 | "src/"
1422 | ]
1423 | },
1424 | "notification-url": "https://packagist.org/downloads/",
1425 | "license": [
1426 | "BSD-3-Clause"
1427 | ],
1428 | "authors": [
1429 | {
1430 | "name": "Sebastian Bergmann",
1431 | "email": "sb@sebastian-bergmann.de",
1432 | "role": "lead"
1433 | }
1434 | ],
1435 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1436 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1437 | "keywords": [
1438 | "filesystem",
1439 | "iterator"
1440 | ],
1441 | "time": "2017-11-27T13:52:08+00:00"
1442 | },
1443 | {
1444 | "name": "phpunit/php-text-template",
1445 | "version": "1.2.1",
1446 | "source": {
1447 | "type": "git",
1448 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1449 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
1450 | },
1451 | "dist": {
1452 | "type": "zip",
1453 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-text-template/31f8b717e51d9a2afca6c9f046f5d69fc27c8686.zip",
1454 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1455 | "shasum": ""
1456 | },
1457 | "require": {
1458 | "php": ">=5.3.3"
1459 | },
1460 | "type": "library",
1461 | "autoload": {
1462 | "classmap": [
1463 | "src/"
1464 | ]
1465 | },
1466 | "notification-url": "https://packagist.org/downloads/",
1467 | "license": [
1468 | "BSD-3-Clause"
1469 | ],
1470 | "authors": [
1471 | {
1472 | "name": "Sebastian Bergmann",
1473 | "email": "sebastian@phpunit.de",
1474 | "role": "lead"
1475 | }
1476 | ],
1477 | "description": "Simple template engine.",
1478 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1479 | "keywords": [
1480 | "template"
1481 | ],
1482 | "time": "2015-06-21T13:50:34+00:00"
1483 | },
1484 | {
1485 | "name": "phpunit/php-timer",
1486 | "version": "1.0.9",
1487 | "source": {
1488 | "type": "git",
1489 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1490 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
1491 | },
1492 | "dist": {
1493 | "type": "zip",
1494 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-timer/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f.zip",
1495 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
1496 | "shasum": ""
1497 | },
1498 | "require": {
1499 | "php": "^5.3.3 || ^7.0"
1500 | },
1501 | "require-dev": {
1502 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
1503 | },
1504 | "type": "library",
1505 | "extra": {
1506 | "branch-alias": {
1507 | "dev-master": "1.0-dev"
1508 | }
1509 | },
1510 | "autoload": {
1511 | "classmap": [
1512 | "src/"
1513 | ]
1514 | },
1515 | "notification-url": "https://packagist.org/downloads/",
1516 | "license": [
1517 | "BSD-3-Clause"
1518 | ],
1519 | "authors": [
1520 | {
1521 | "name": "Sebastian Bergmann",
1522 | "email": "sb@sebastian-bergmann.de",
1523 | "role": "lead"
1524 | }
1525 | ],
1526 | "description": "Utility class for timing",
1527 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1528 | "keywords": [
1529 | "timer"
1530 | ],
1531 | "time": "2017-02-26T11:10:40+00:00"
1532 | },
1533 | {
1534 | "name": "phpunit/php-token-stream",
1535 | "version": "2.0.2",
1536 | "source": {
1537 | "type": "git",
1538 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1539 | "reference": "791198a2c6254db10131eecfe8c06670700904db"
1540 | },
1541 | "dist": {
1542 | "type": "zip",
1543 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-token-stream/791198a2c6254db10131eecfe8c06670700904db.zip",
1544 | "reference": "791198a2c6254db10131eecfe8c06670700904db",
1545 | "shasum": ""
1546 | },
1547 | "require": {
1548 | "ext-tokenizer": "*",
1549 | "php": "^7.0"
1550 | },
1551 | "require-dev": {
1552 | "phpunit/phpunit": "^6.2.4"
1553 | },
1554 | "type": "library",
1555 | "extra": {
1556 | "branch-alias": {
1557 | "dev-master": "2.0-dev"
1558 | }
1559 | },
1560 | "autoload": {
1561 | "classmap": [
1562 | "src/"
1563 | ]
1564 | },
1565 | "notification-url": "https://packagist.org/downloads/",
1566 | "license": [
1567 | "BSD-3-Clause"
1568 | ],
1569 | "authors": [
1570 | {
1571 | "name": "Sebastian Bergmann",
1572 | "email": "sebastian@phpunit.de"
1573 | }
1574 | ],
1575 | "description": "Wrapper around PHP's tokenizer extension.",
1576 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1577 | "keywords": [
1578 | "tokenizer"
1579 | ],
1580 | "time": "2017-11-27T05:48:46+00:00"
1581 | },
1582 | {
1583 | "name": "phpunit/phpunit",
1584 | "version": "6.5.5",
1585 | "source": {
1586 | "type": "git",
1587 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1588 | "reference": "83d27937a310f2984fd575686138597147bdc7df"
1589 | },
1590 | "dist": {
1591 | "type": "zip",
1592 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit/83d27937a310f2984fd575686138597147bdc7df.zip",
1593 | "reference": "83d27937a310f2984fd575686138597147bdc7df",
1594 | "shasum": ""
1595 | },
1596 | "require": {
1597 | "ext-dom": "*",
1598 | "ext-json": "*",
1599 | "ext-libxml": "*",
1600 | "ext-mbstring": "*",
1601 | "ext-xml": "*",
1602 | "myclabs/deep-copy": "^1.6.1",
1603 | "phar-io/manifest": "^1.0.1",
1604 | "phar-io/version": "^1.0",
1605 | "php": "^7.0",
1606 | "phpspec/prophecy": "^1.7",
1607 | "phpunit/php-code-coverage": "^5.3",
1608 | "phpunit/php-file-iterator": "^1.4.3",
1609 | "phpunit/php-text-template": "^1.2.1",
1610 | "phpunit/php-timer": "^1.0.9",
1611 | "phpunit/phpunit-mock-objects": "^5.0.5",
1612 | "sebastian/comparator": "^2.1",
1613 | "sebastian/diff": "^2.0",
1614 | "sebastian/environment": "^3.1",
1615 | "sebastian/exporter": "^3.1",
1616 | "sebastian/global-state": "^2.0",
1617 | "sebastian/object-enumerator": "^3.0.3",
1618 | "sebastian/resource-operations": "^1.0",
1619 | "sebastian/version": "^2.0.1"
1620 | },
1621 | "conflict": {
1622 | "phpdocumentor/reflection-docblock": "3.0.2",
1623 | "phpunit/dbunit": "<3.0"
1624 | },
1625 | "require-dev": {
1626 | "ext-pdo": "*"
1627 | },
1628 | "suggest": {
1629 | "ext-xdebug": "*",
1630 | "phpunit/php-invoker": "^1.1"
1631 | },
1632 | "bin": [
1633 | "phpunit"
1634 | ],
1635 | "type": "library",
1636 | "extra": {
1637 | "branch-alias": {
1638 | "dev-master": "6.5.x-dev"
1639 | }
1640 | },
1641 | "autoload": {
1642 | "classmap": [
1643 | "src/"
1644 | ]
1645 | },
1646 | "notification-url": "https://packagist.org/downloads/",
1647 | "license": [
1648 | "BSD-3-Clause"
1649 | ],
1650 | "authors": [
1651 | {
1652 | "name": "Sebastian Bergmann",
1653 | "email": "sebastian@phpunit.de",
1654 | "role": "lead"
1655 | }
1656 | ],
1657 | "description": "The PHP Unit Testing framework.",
1658 | "homepage": "https://phpunit.de/",
1659 | "keywords": [
1660 | "phpunit",
1661 | "testing",
1662 | "xunit"
1663 | ],
1664 | "time": "2017-12-17T06:31:19+00:00"
1665 | },
1666 | {
1667 | "name": "phpunit/phpunit-mock-objects",
1668 | "version": "5.0.5",
1669 | "source": {
1670 | "type": "git",
1671 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
1672 | "reference": "283b9f4f670e3a6fd6c4ff95c51a952eb5c75933"
1673 | },
1674 | "dist": {
1675 | "type": "zip",
1676 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit-mock-objects/283b9f4f670e3a6fd6c4ff95c51a952eb5c75933.zip",
1677 | "reference": "283b9f4f670e3a6fd6c4ff95c51a952eb5c75933",
1678 | "shasum": ""
1679 | },
1680 | "require": {
1681 | "doctrine/instantiator": "^1.0.5",
1682 | "php": "^7.0",
1683 | "phpunit/php-text-template": "^1.2.1",
1684 | "sebastian/exporter": "^3.1"
1685 | },
1686 | "conflict": {
1687 | "phpunit/phpunit": "<6.0"
1688 | },
1689 | "require-dev": {
1690 | "phpunit/phpunit": "^6.5"
1691 | },
1692 | "suggest": {
1693 | "ext-soap": "*"
1694 | },
1695 | "type": "library",
1696 | "extra": {
1697 | "branch-alias": {
1698 | "dev-master": "5.0.x-dev"
1699 | }
1700 | },
1701 | "autoload": {
1702 | "classmap": [
1703 | "src/"
1704 | ]
1705 | },
1706 | "notification-url": "https://packagist.org/downloads/",
1707 | "license": [
1708 | "BSD-3-Clause"
1709 | ],
1710 | "authors": [
1711 | {
1712 | "name": "Sebastian Bergmann",
1713 | "email": "sebastian@phpunit.de",
1714 | "role": "lead"
1715 | }
1716 | ],
1717 | "description": "Mock Object library for PHPUnit",
1718 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
1719 | "keywords": [
1720 | "mock",
1721 | "xunit"
1722 | ],
1723 | "time": "2017-12-10T08:01:53+00:00"
1724 | },
1725 | {
1726 | "name": "sebastian/code-unit-reverse-lookup",
1727 | "version": "1.0.1",
1728 | "source": {
1729 | "type": "git",
1730 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1731 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
1732 | },
1733 | "dist": {
1734 | "type": "zip",
1735 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/code-unit-reverse-lookup/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18.zip",
1736 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
1737 | "shasum": ""
1738 | },
1739 | "require": {
1740 | "php": "^5.6 || ^7.0"
1741 | },
1742 | "require-dev": {
1743 | "phpunit/phpunit": "^5.7 || ^6.0"
1744 | },
1745 | "type": "library",
1746 | "extra": {
1747 | "branch-alias": {
1748 | "dev-master": "1.0.x-dev"
1749 | }
1750 | },
1751 | "autoload": {
1752 | "classmap": [
1753 | "src/"
1754 | ]
1755 | },
1756 | "notification-url": "https://packagist.org/downloads/",
1757 | "license": [
1758 | "BSD-3-Clause"
1759 | ],
1760 | "authors": [
1761 | {
1762 | "name": "Sebastian Bergmann",
1763 | "email": "sebastian@phpunit.de"
1764 | }
1765 | ],
1766 | "description": "Looks up which function or method a line of code belongs to",
1767 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1768 | "time": "2017-03-04T06:30:41+00:00"
1769 | },
1770 | {
1771 | "name": "sebastian/comparator",
1772 | "version": "2.1.0",
1773 | "source": {
1774 | "type": "git",
1775 | "url": "https://github.com/sebastianbergmann/comparator.git",
1776 | "reference": "1174d9018191e93cb9d719edec01257fc05f8158"
1777 | },
1778 | "dist": {
1779 | "type": "zip",
1780 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/comparator/1174d9018191e93cb9d719edec01257fc05f8158.zip",
1781 | "reference": "1174d9018191e93cb9d719edec01257fc05f8158",
1782 | "shasum": ""
1783 | },
1784 | "require": {
1785 | "php": "^7.0",
1786 | "sebastian/diff": "^2.0",
1787 | "sebastian/exporter": "^3.1"
1788 | },
1789 | "require-dev": {
1790 | "phpunit/phpunit": "^6.4"
1791 | },
1792 | "type": "library",
1793 | "extra": {
1794 | "branch-alias": {
1795 | "dev-master": "2.1.x-dev"
1796 | }
1797 | },
1798 | "autoload": {
1799 | "classmap": [
1800 | "src/"
1801 | ]
1802 | },
1803 | "notification-url": "https://packagist.org/downloads/",
1804 | "license": [
1805 | "BSD-3-Clause"
1806 | ],
1807 | "authors": [
1808 | {
1809 | "name": "Jeff Welch",
1810 | "email": "whatthejeff@gmail.com"
1811 | },
1812 | {
1813 | "name": "Volker Dusch",
1814 | "email": "github@wallbash.com"
1815 | },
1816 | {
1817 | "name": "Bernhard Schussek",
1818 | "email": "bschussek@2bepublished.at"
1819 | },
1820 | {
1821 | "name": "Sebastian Bergmann",
1822 | "email": "sebastian@phpunit.de"
1823 | }
1824 | ],
1825 | "description": "Provides the functionality to compare PHP values for equality",
1826 | "homepage": "https://github.com/sebastianbergmann/comparator",
1827 | "keywords": [
1828 | "comparator",
1829 | "compare",
1830 | "equality"
1831 | ],
1832 | "time": "2017-11-03T07:16:52+00:00"
1833 | },
1834 | {
1835 | "name": "sebastian/diff",
1836 | "version": "2.0.1",
1837 | "source": {
1838 | "type": "git",
1839 | "url": "https://github.com/sebastianbergmann/diff.git",
1840 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
1841 | },
1842 | "dist": {
1843 | "type": "zip",
1844 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/diff/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd.zip",
1845 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
1846 | "shasum": ""
1847 | },
1848 | "require": {
1849 | "php": "^7.0"
1850 | },
1851 | "require-dev": {
1852 | "phpunit/phpunit": "^6.2"
1853 | },
1854 | "type": "library",
1855 | "extra": {
1856 | "branch-alias": {
1857 | "dev-master": "2.0-dev"
1858 | }
1859 | },
1860 | "autoload": {
1861 | "classmap": [
1862 | "src/"
1863 | ]
1864 | },
1865 | "notification-url": "https://packagist.org/downloads/",
1866 | "license": [
1867 | "BSD-3-Clause"
1868 | ],
1869 | "authors": [
1870 | {
1871 | "name": "Kore Nordmann",
1872 | "email": "mail@kore-nordmann.de"
1873 | },
1874 | {
1875 | "name": "Sebastian Bergmann",
1876 | "email": "sebastian@phpunit.de"
1877 | }
1878 | ],
1879 | "description": "Diff implementation",
1880 | "homepage": "https://github.com/sebastianbergmann/diff",
1881 | "keywords": [
1882 | "diff"
1883 | ],
1884 | "time": "2017-08-03T08:09:46+00:00"
1885 | },
1886 | {
1887 | "name": "sebastian/environment",
1888 | "version": "3.1.0",
1889 | "source": {
1890 | "type": "git",
1891 | "url": "https://github.com/sebastianbergmann/environment.git",
1892 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
1893 | },
1894 | "dist": {
1895 | "type": "zip",
1896 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/environment/cd0871b3975fb7fc44d11314fd1ee20925fce4f5.zip",
1897 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
1898 | "shasum": ""
1899 | },
1900 | "require": {
1901 | "php": "^7.0"
1902 | },
1903 | "require-dev": {
1904 | "phpunit/phpunit": "^6.1"
1905 | },
1906 | "type": "library",
1907 | "extra": {
1908 | "branch-alias": {
1909 | "dev-master": "3.1.x-dev"
1910 | }
1911 | },
1912 | "autoload": {
1913 | "classmap": [
1914 | "src/"
1915 | ]
1916 | },
1917 | "notification-url": "https://packagist.org/downloads/",
1918 | "license": [
1919 | "BSD-3-Clause"
1920 | ],
1921 | "authors": [
1922 | {
1923 | "name": "Sebastian Bergmann",
1924 | "email": "sebastian@phpunit.de"
1925 | }
1926 | ],
1927 | "description": "Provides functionality to handle HHVM/PHP environments",
1928 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1929 | "keywords": [
1930 | "Xdebug",
1931 | "environment",
1932 | "hhvm"
1933 | ],
1934 | "time": "2017-07-01T08:51:00+00:00"
1935 | },
1936 | {
1937 | "name": "sebastian/exporter",
1938 | "version": "3.1.0",
1939 | "source": {
1940 | "type": "git",
1941 | "url": "https://github.com/sebastianbergmann/exporter.git",
1942 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
1943 | },
1944 | "dist": {
1945 | "type": "zip",
1946 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/exporter/234199f4528de6d12aaa58b612e98f7d36adb937.zip",
1947 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
1948 | "shasum": ""
1949 | },
1950 | "require": {
1951 | "php": "^7.0",
1952 | "sebastian/recursion-context": "^3.0"
1953 | },
1954 | "require-dev": {
1955 | "ext-mbstring": "*",
1956 | "phpunit/phpunit": "^6.0"
1957 | },
1958 | "type": "library",
1959 | "extra": {
1960 | "branch-alias": {
1961 | "dev-master": "3.1.x-dev"
1962 | }
1963 | },
1964 | "autoload": {
1965 | "classmap": [
1966 | "src/"
1967 | ]
1968 | },
1969 | "notification-url": "https://packagist.org/downloads/",
1970 | "license": [
1971 | "BSD-3-Clause"
1972 | ],
1973 | "authors": [
1974 | {
1975 | "name": "Jeff Welch",
1976 | "email": "whatthejeff@gmail.com"
1977 | },
1978 | {
1979 | "name": "Volker Dusch",
1980 | "email": "github@wallbash.com"
1981 | },
1982 | {
1983 | "name": "Bernhard Schussek",
1984 | "email": "bschussek@2bepublished.at"
1985 | },
1986 | {
1987 | "name": "Sebastian Bergmann",
1988 | "email": "sebastian@phpunit.de"
1989 | },
1990 | {
1991 | "name": "Adam Harvey",
1992 | "email": "aharvey@php.net"
1993 | }
1994 | ],
1995 | "description": "Provides the functionality to export PHP variables for visualization",
1996 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1997 | "keywords": [
1998 | "export",
1999 | "exporter"
2000 | ],
2001 | "time": "2017-04-03T13:19:02+00:00"
2002 | },
2003 | {
2004 | "name": "sebastian/global-state",
2005 | "version": "2.0.0",
2006 | "source": {
2007 | "type": "git",
2008 | "url": "https://github.com/sebastianbergmann/global-state.git",
2009 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
2010 | },
2011 | "dist": {
2012 | "type": "zip",
2013 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/global-state/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4.zip",
2014 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
2015 | "shasum": ""
2016 | },
2017 | "require": {
2018 | "php": "^7.0"
2019 | },
2020 | "require-dev": {
2021 | "phpunit/phpunit": "^6.0"
2022 | },
2023 | "suggest": {
2024 | "ext-uopz": "*"
2025 | },
2026 | "type": "library",
2027 | "extra": {
2028 | "branch-alias": {
2029 | "dev-master": "2.0-dev"
2030 | }
2031 | },
2032 | "autoload": {
2033 | "classmap": [
2034 | "src/"
2035 | ]
2036 | },
2037 | "notification-url": "https://packagist.org/downloads/",
2038 | "license": [
2039 | "BSD-3-Clause"
2040 | ],
2041 | "authors": [
2042 | {
2043 | "name": "Sebastian Bergmann",
2044 | "email": "sebastian@phpunit.de"
2045 | }
2046 | ],
2047 | "description": "Snapshotting of global state",
2048 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2049 | "keywords": [
2050 | "global state"
2051 | ],
2052 | "time": "2017-04-27T15:39:26+00:00"
2053 | },
2054 | {
2055 | "name": "sebastian/object-enumerator",
2056 | "version": "3.0.3",
2057 | "source": {
2058 | "type": "git",
2059 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2060 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
2061 | },
2062 | "dist": {
2063 | "type": "zip",
2064 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-enumerator/7cfd9e65d11ffb5af41198476395774d4c8a84c5.zip",
2065 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2066 | "shasum": ""
2067 | },
2068 | "require": {
2069 | "php": "^7.0",
2070 | "sebastian/object-reflector": "^1.1.1",
2071 | "sebastian/recursion-context": "^3.0"
2072 | },
2073 | "require-dev": {
2074 | "phpunit/phpunit": "^6.0"
2075 | },
2076 | "type": "library",
2077 | "extra": {
2078 | "branch-alias": {
2079 | "dev-master": "3.0.x-dev"
2080 | }
2081 | },
2082 | "autoload": {
2083 | "classmap": [
2084 | "src/"
2085 | ]
2086 | },
2087 | "notification-url": "https://packagist.org/downloads/",
2088 | "license": [
2089 | "BSD-3-Clause"
2090 | ],
2091 | "authors": [
2092 | {
2093 | "name": "Sebastian Bergmann",
2094 | "email": "sebastian@phpunit.de"
2095 | }
2096 | ],
2097 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2098 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2099 | "time": "2017-08-03T12:35:26+00:00"
2100 | },
2101 | {
2102 | "name": "sebastian/object-reflector",
2103 | "version": "1.1.1",
2104 | "source": {
2105 | "type": "git",
2106 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2107 | "reference": "773f97c67f28de00d397be301821b06708fca0be"
2108 | },
2109 | "dist": {
2110 | "type": "zip",
2111 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-reflector/773f97c67f28de00d397be301821b06708fca0be.zip",
2112 | "reference": "773f97c67f28de00d397be301821b06708fca0be",
2113 | "shasum": ""
2114 | },
2115 | "require": {
2116 | "php": "^7.0"
2117 | },
2118 | "require-dev": {
2119 | "phpunit/phpunit": "^6.0"
2120 | },
2121 | "type": "library",
2122 | "extra": {
2123 | "branch-alias": {
2124 | "dev-master": "1.1-dev"
2125 | }
2126 | },
2127 | "autoload": {
2128 | "classmap": [
2129 | "src/"
2130 | ]
2131 | },
2132 | "notification-url": "https://packagist.org/downloads/",
2133 | "license": [
2134 | "BSD-3-Clause"
2135 | ],
2136 | "authors": [
2137 | {
2138 | "name": "Sebastian Bergmann",
2139 | "email": "sebastian@phpunit.de"
2140 | }
2141 | ],
2142 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2143 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2144 | "time": "2017-03-29T09:07:27+00:00"
2145 | },
2146 | {
2147 | "name": "sebastian/recursion-context",
2148 | "version": "3.0.0",
2149 | "source": {
2150 | "type": "git",
2151 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2152 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
2153 | },
2154 | "dist": {
2155 | "type": "zip",
2156 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/recursion-context/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8.zip",
2157 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
2158 | "shasum": ""
2159 | },
2160 | "require": {
2161 | "php": "^7.0"
2162 | },
2163 | "require-dev": {
2164 | "phpunit/phpunit": "^6.0"
2165 | },
2166 | "type": "library",
2167 | "extra": {
2168 | "branch-alias": {
2169 | "dev-master": "3.0.x-dev"
2170 | }
2171 | },
2172 | "autoload": {
2173 | "classmap": [
2174 | "src/"
2175 | ]
2176 | },
2177 | "notification-url": "https://packagist.org/downloads/",
2178 | "license": [
2179 | "BSD-3-Clause"
2180 | ],
2181 | "authors": [
2182 | {
2183 | "name": "Jeff Welch",
2184 | "email": "whatthejeff@gmail.com"
2185 | },
2186 | {
2187 | "name": "Sebastian Bergmann",
2188 | "email": "sebastian@phpunit.de"
2189 | },
2190 | {
2191 | "name": "Adam Harvey",
2192 | "email": "aharvey@php.net"
2193 | }
2194 | ],
2195 | "description": "Provides functionality to recursively process PHP variables",
2196 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2197 | "time": "2017-03-03T06:23:57+00:00"
2198 | },
2199 | {
2200 | "name": "sebastian/resource-operations",
2201 | "version": "1.0.0",
2202 | "source": {
2203 | "type": "git",
2204 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
2205 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
2206 | },
2207 | "dist": {
2208 | "type": "zip",
2209 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/resource-operations/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52.zip",
2210 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
2211 | "shasum": ""
2212 | },
2213 | "require": {
2214 | "php": ">=5.6.0"
2215 | },
2216 | "type": "library",
2217 | "extra": {
2218 | "branch-alias": {
2219 | "dev-master": "1.0.x-dev"
2220 | }
2221 | },
2222 | "autoload": {
2223 | "classmap": [
2224 | "src/"
2225 | ]
2226 | },
2227 | "notification-url": "https://packagist.org/downloads/",
2228 | "license": [
2229 | "BSD-3-Clause"
2230 | ],
2231 | "authors": [
2232 | {
2233 | "name": "Sebastian Bergmann",
2234 | "email": "sebastian@phpunit.de"
2235 | }
2236 | ],
2237 | "description": "Provides a list of PHP built-in functions that operate on resources",
2238 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2239 | "time": "2015-07-28T20:34:47+00:00"
2240 | },
2241 | {
2242 | "name": "sebastian/version",
2243 | "version": "2.0.1",
2244 | "source": {
2245 | "type": "git",
2246 | "url": "https://github.com/sebastianbergmann/version.git",
2247 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
2248 | },
2249 | "dist": {
2250 | "type": "zip",
2251 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/version/99732be0ddb3361e16ad77b68ba41efc8e979019.zip",
2252 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
2253 | "shasum": ""
2254 | },
2255 | "require": {
2256 | "php": ">=5.6"
2257 | },
2258 | "type": "library",
2259 | "extra": {
2260 | "branch-alias": {
2261 | "dev-master": "2.0.x-dev"
2262 | }
2263 | },
2264 | "autoload": {
2265 | "classmap": [
2266 | "src/"
2267 | ]
2268 | },
2269 | "notification-url": "https://packagist.org/downloads/",
2270 | "license": [
2271 | "BSD-3-Clause"
2272 | ],
2273 | "authors": [
2274 | {
2275 | "name": "Sebastian Bergmann",
2276 | "email": "sebastian@phpunit.de",
2277 | "role": "lead"
2278 | }
2279 | ],
2280 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2281 | "homepage": "https://github.com/sebastianbergmann/version",
2282 | "time": "2016-10-03T07:35:21+00:00"
2283 | },
2284 | {
2285 | "name": "theseer/tokenizer",
2286 | "version": "1.1.0",
2287 | "source": {
2288 | "type": "git",
2289 | "url": "https://github.com/theseer/tokenizer.git",
2290 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
2291 | },
2292 | "dist": {
2293 | "type": "zip",
2294 | "url": "https://files.phpcomposer.com/files/theseer/tokenizer/cb2f008f3f05af2893a87208fe6a6c4985483f8b.zip",
2295 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2296 | "shasum": ""
2297 | },
2298 | "require": {
2299 | "ext-dom": "*",
2300 | "ext-tokenizer": "*",
2301 | "ext-xmlwriter": "*",
2302 | "php": "^7.0"
2303 | },
2304 | "type": "library",
2305 | "autoload": {
2306 | "classmap": [
2307 | "src/"
2308 | ]
2309 | },
2310 | "notification-url": "https://packagist.org/downloads/",
2311 | "license": [
2312 | "BSD-3-Clause"
2313 | ],
2314 | "authors": [
2315 | {
2316 | "name": "Arne Blankerts",
2317 | "email": "arne@blankerts.de",
2318 | "role": "Developer"
2319 | }
2320 | ],
2321 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2322 | "time": "2017-04-07T12:08:54+00:00"
2323 | },
2324 | {
2325 | "name": "webmozart/assert",
2326 | "version": "1.2.0",
2327 | "source": {
2328 | "type": "git",
2329 | "url": "https://github.com/webmozart/assert.git",
2330 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
2331 | },
2332 | "dist": {
2333 | "type": "zip",
2334 | "url": "https://files.phpcomposer.com/files/webmozart/assert/2db61e59ff05fe5126d152bd0655c9ea113e550f.zip",
2335 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
2336 | "shasum": ""
2337 | },
2338 | "require": {
2339 | "php": "^5.3.3 || ^7.0"
2340 | },
2341 | "require-dev": {
2342 | "phpunit/phpunit": "^4.6",
2343 | "sebastian/version": "^1.0.1"
2344 | },
2345 | "type": "library",
2346 | "extra": {
2347 | "branch-alias": {
2348 | "dev-master": "1.3-dev"
2349 | }
2350 | },
2351 | "autoload": {
2352 | "psr-4": {
2353 | "Webmozart\\Assert\\": "src/"
2354 | }
2355 | },
2356 | "notification-url": "https://packagist.org/downloads/",
2357 | "license": [
2358 | "MIT"
2359 | ],
2360 | "authors": [
2361 | {
2362 | "name": "Bernhard Schussek",
2363 | "email": "bschussek@gmail.com"
2364 | }
2365 | ],
2366 | "description": "Assertions to validate method input/output with nice error messages.",
2367 | "keywords": [
2368 | "assert",
2369 | "check",
2370 | "validate"
2371 | ],
2372 | "time": "2016-11-23T20:04:58+00:00"
2373 | }
2374 | ],
2375 | "aliases": [],
2376 | "minimum-stability": "stable",
2377 | "stability-flags": [],
2378 | "prefer-stable": false,
2379 | "prefer-lowest": false,
2380 | "platform": {
2381 | "php": ">=5.5.0"
2382 | },
2383 | "platform-dev": []
2384 | }
2385 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 | ./tests
14 |
15 |
16 |
17 |
18 | ./app
19 |
20 | ./route/api.php
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | run();
14 | }
15 |
--------------------------------------------------------------------------------
/route/api.php:
--------------------------------------------------------------------------------
1 | any('/', '\App\Api\DemoApi:test');
4 | $app->post('/users', '\App\Api\RegisterApi:action');
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/storage/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/support/helper.php:
--------------------------------------------------------------------------------
1 | 1 && startsWith($value, '"') && endsWith($value, '"')) {
31 | return substr($value, 1, -1);
32 | }
33 |
34 | return $value;
35 | }
36 | }
37 |
38 | /**
39 | * Determine if a given string starts with a given substring
40 | */
41 | if (! function_exists('startsWith')) {
42 | function startsWith($haystack, $needles)
43 | {
44 | $ret = false;
45 |
46 | foreach ((array) $needles as $needle)
47 | {
48 | if ($needle != '' && mb_strpos($haystack, $needle) === 0) {
49 | $ret = true;
50 | }
51 | }
52 |
53 | return $ret;
54 | }
55 | }
56 |
57 | /**
58 | * Determine if a given string ends with a given substring
59 | */
60 | if (! function_exists('endsWith')) {
61 | function endsWith($haystack, $needles)
62 | {
63 | $ret = false;
64 |
65 | foreach ((array) $needles as $needle) {
66 | if ((string) $needle === mb_substr($haystack, -mb_strlen($needle), NULL, 'UTF-8')) {
67 | $ret = true;
68 | }
69 | }
70 |
71 | return $ret;
72 | }
73 | }
74 |
75 | /**
76 | * Determine the IP address is internal
77 | */
78 | if (! function_exists('isInnerIp')) {
79 | function isInnerIp($str)
80 | {
81 | if (0 == strlen($str) || ! filter_var($str, FILTER_VALIDATE_IP)) {
82 | return false;
83 | }
84 |
85 | $ret = false;
86 |
87 | $innerIp = filter_var(
88 | $str,
89 | FILTER_VALIDATE_IP,
90 | FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
91 | );
92 |
93 | if (false === $innerIp) {
94 | $ret = true;
95 | }
96 |
97 | return $ret;
98 | }
99 |
100 | /**
101 | * Generate random string
102 | */
103 | if (! function_exists('randomString')) {
104 | function randomString($length = 6, $numeric = false)
105 | {
106 | $ret = '';
107 |
108 | $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
109 | if (true == $numeric) {
110 | $chars = '0123456789';
111 | }
112 |
113 | $charLen = strlen( $chars );
114 | for ( $i = 0; $i < $length; $i ++ )
115 | {
116 | $ret .= $chars[ rand( 0, $charLen - 1 ) ];
117 | }
118 | return $ret;
119 | }
120 | }
121 |
122 | }
123 |
--------------------------------------------------------------------------------
/task.php:
--------------------------------------------------------------------------------
1 | 1) {
6 | // include class file
7 | require_once(dirname(__FILE__) . '/app/Command/' . ucwords($argv[0]) . 'Command.php');
8 | $class = ucwords($argv[0]) . 'Command';
9 |
10 | $object = new $class;
11 | $method = $argv[1];
12 | $count = count($argv);
13 |
14 | if (2 == $count) {
15 | call_user_func([$object, $method]);
16 | } else {
17 | unset($argv[0]);
18 | unset($argv[1]);
19 | call_user_func_array([$object, $method], $argv);
20 | }
21 | } else {
22 | echo 'Missing necessary parameters!' . PHP_EOL;
23 | }
24 |
25 |
26 |
--------------------------------------------------------------------------------
/tests/HelperTest.php:
--------------------------------------------------------------------------------
1 | assertEquals(6, strlen(randomString()));
15 |
16 | $numStr = randomString(8, true);
17 |
18 | $this->assertEquals(8, strlen($numStr));
19 | $this->assertTrue(is_numeric($numStr));
20 | }
21 |
22 | public function testisInnerIp()
23 | {
24 | // Type A:10.0.0.0 - 10.255.255.255
25 | // Type B:172.16.0.0 - 172.31.255.255
26 | // Type C:192.168.0.0 - 192.168.255.255
27 |
28 | $aTypeStart = ip2long('10.0.0.0');
29 | $aTypeEnd = ip2long('10.255.255.255');
30 |
31 | $bTypeStart = ip2long('172.16.0.0');
32 | $bTypeEnd = ip2long('172.31.255.255');
33 |
34 | $cTypeStart = ip2long('192.168.0.0');
35 | $cTypeEnd = ip2long('192.168.255.255');
36 |
37 | for ($i = $aTypeStart; $i <= $aTypeEnd; ++$i)
38 | {
39 | $this->assertTrue(isInnerIp(long2ip($i)));
40 | }
41 |
42 | for ($i = $bTypeStart; $i <= $bTypeEnd; ++$i)
43 | {
44 | $this->assertTrue(isInnerIp(long2ip($i)));
45 | }
46 |
47 | for ( $i = $cTypeStart; $i <= $cTypeEnd; ++$i )
48 | {
49 | $this->assertTrue( isInnerIp( long2ip( $i ) ) );
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/tests/ServiceTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(is_object(\App\Services\DB::getInstance()));
17 | }
18 |
19 | public function testRedisInstance()
20 | {
21 | $this->assertTrue(is_object(\App\Services\Redis::getInstance()));
22 | }
23 |
24 | }
--------------------------------------------------------------------------------