Commit a038055e45357da202ebc96d235d77eab496f467

Authored by development server
0 parents
Exists in master

added ext libs loader component

.gitignore
... ... @@ -0,0 +1,2 @@
  1 +vendor/**
  2 +tests/_output/logs/**
... ...
README.md
... ... @@ -0,0 +1,49 @@
  1 +# Webapp tools - web components
  2 +
  3 +This presents a collection of web components to integrate with the [FCCN's webapp skeleton](https://github.com/fccn/webapp-skeleton.git) project. The following components are provided:
  4 +
  5 +- External libraries loader - loads external javascript libraries installed by composer and npm.
  6 +
  7 +## Installation
  8 +
  9 +You can install this collection in your project using composer:
  10 +```
  11 +composer require fccn/webapp-tools/web-components
  12 +
  13 +```
  14 +
  15 +## Configuration
  16 +
  17 +The site configuration loader from the [Webapp Tools - common](https://github.com/fccn/wt-common) project is used to centralize the configuration of each of component. You need to add a specific set of key-value pairs to the site configuration file, as described in the sections below.
  18 +
  19 +Some of the web components provide twig views to render HTML content. All the twig template files are located in the **templates** folder. To load them in your project you need to register a twig namespace for this directory. When integrating with the [FCCN's webapp skeleton project](https://github.com/fccn/webapp-skeleton.git) you need to add the following line to the *templates_path* variable in the site configuration:
  20 +```
  21 +$templates_path = array(
  22 + ...
  23 + 'web_components' => $fs_root.'/vendor/fccn/webapp-tools/web-components/templates' #add this line
  24 + ...
  25 + );
  26 +```
  27 +
  28 +### External libraries loader
  29 +
  30 +For cleaner paths it is advised to create variables for the node modules and vendor folders in the configuration file:
  31 +```php
  32 + $node_mods_path = $fs_root.'/node_modules/';
  33 + $vendor_path = $fs_root.'/vendor/';
  34 +
  35 +```
  36 +You can than add the following key-value pairs to the config file's *$c* array:
  37 +```php
  38 +//---- External libraries loader --------------------
  39 +"ext_libs" => array(
  40 + //add libraries with the format name => path like for example:
  41 + "headjs" => $node_mods_path."/headjs/dist/1.0.0/head.min.js",
  42 +
  43 + );
  44 +
  45 +
  46 +```
  47 +
  48 +
  49 +## Usage
... ...
app/ExtLibsLoader.php
... ... @@ -0,0 +1,57 @@
  1 +<?php
  2 +/*
  3 +* Singleton class to load external web resources located in vendor and node modules folders
  4 +*/
  5 +
  6 +namespace Fccn\WebComponents;
  7 +
  8 +class ExtLibsLoader
  9 +{
  10 + private static $instance;
  11 + private $libraries;
  12 +
  13 + public function __construct()
  14 + {
  15 + $config = \Fccn\Lib\SiteConfig::getInstance();
  16 + //load library paths from config file
  17 + $this->libraries = $config->get('ext_libs');
  18 + }
  19 +
  20 + public static function getInstance()
  21 + {
  22 + if (!ExtLibsLoader::$instance instanceof self) {
  23 + ExtLibsLoader::$instance = new self();
  24 + }
  25 +
  26 + return ExtLibsLoader::$instance;
  27 + }
  28 +
  29 + /*
  30 + * checks if library is registered and file exists
  31 + */
  32 + public function exists($lib_name)
  33 + {
  34 + if (isset($this->libraries[$lib_name])) {
  35 + $path = $this->libraries[$lib_name];
  36 + \Fccn\Lib\FileLogger::debug("ExtLibsLoader::exists there is a record for library [$lib_name], located in: $path");
  37 + return file_exists($path);
  38 + }
  39 + return false;
  40 + }
  41 +
  42 + public function load($lib_name)
  43 + {
  44 + if ($this->exists($lib_name)) {
  45 + return file_get_contents($this->libraries[$lib_name]);
  46 + }
  47 + return false;
  48 + }
  49 +
  50 + public function add($lib_name, $path)
  51 + {
  52 + if (!file_exists($path)) {
  53 + \Fccn\Lib\FileLogger::error("ExtLibsLoader::add - Could not find library - $lib_name - in path: $path");
  54 + }
  55 + $this->libraries[$lib_name] = $path;
  56 + }
  57 +}
... ...
codeception.yml
... ... @@ -0,0 +1,14 @@
  1 +actor: Tester
  2 +paths:
  3 + tests: tests
  4 + log: tests/_output
  5 + data: tests/_data
  6 + support: tests/_support
  7 + envs: tests/_envs
  8 +settings:
  9 + bootstrap: _bootstrap.php
  10 + colors: true
  11 + memory_limit: 1024M
  12 +extensions:
  13 + enabled:
  14 + - Codeception\Extension\RunFailed
... ...
composer.json
... ... @@ -0,0 +1,36 @@
  1 +{
  2 + "name": "fccn/webapp-tools-web-components",
  3 + "description": "Collection of twig templates with web utilities",
  4 + "keywords": ["fccn", "webapp-tools", "twig", "utilities"],
  5 + "license": "MIT",
  6 + "authors": [
  7 + {
  8 + "name": "Paulo Costa",
  9 + "email": "paulo.costa@fccn.pt"
  10 + }
  11 + ],
  12 + "require": {
  13 + "php": ">=5.5.0",
  14 + "fccn/webapp-tools-common": "^1.0"
  15 + },
  16 + "autoload":{
  17 + "psr-4": {
  18 + "Fccn\\WebComponents\\": "app"
  19 + }
  20 + },
  21 + "require-dev": {
  22 + "codeception/codeception": "^2.3"
  23 + },
  24 + "autoload-dev": {
  25 + "psr-4": {
  26 + "Fccn\\Tests\\": "tests/"
  27 + }
  28 + },
  29 + "config": {
  30 + "process-timeout" : 0
  31 + },
  32 + "scripts": {
  33 + "test": "codecept run"
  34 + }
  35 +
  36 +}
... ...
composer.lock
... ... @@ -0,0 +1,2600 @@
  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#composer-lock-the-lock-file",
  5 + "This file is @generated automatically"
  6 + ],
  7 + "content-hash": "f95a452e972744224eba1da330ca043f",
  8 + "packages": [
  9 + {
  10 + "name": "fccn/webapp-tools-common",
  11 + "version": "1.0.1",
  12 + "source": {
  13 + "type": "git",
  14 + "url": "https://github.com/fccn/wt-common.git",
  15 + "reference": "3dcc431e2d2858c7c49e163c7fa5f10a28d4f8ab"
  16 + },
  17 + "dist": {
  18 + "type": "zip",
  19 + "url": "https://api.github.com/repos/fccn/wt-common/zipball/3dcc431e2d2858c7c49e163c7fa5f10a28d4f8ab",
  20 + "reference": "3dcc431e2d2858c7c49e163c7fa5f10a28d4f8ab",
  21 + "shasum": ""
  22 + },
  23 + "require": {
  24 + "ircmaxell/random-lib": "^1.2",
  25 + "monolog/monolog": "^1.17",
  26 + "php": ">=5.5.0"
  27 + },
  28 + "require-dev": {
  29 + "codeception/codeception": "^2.3"
  30 + },
  31 + "type": "library",
  32 + "autoload": {
  33 + "psr-4": {
  34 + "Fccn\\Lib\\": "src"
  35 + }
  36 + },
  37 + "notification-url": "https://packagist.org/downloads/",
  38 + "license": [
  39 + "MIT"
  40 + ],
  41 + "authors": [
  42 + {
  43 + "name": "Paulo Costa",
  44 + "email": "paulo.costa@fccn.pt"
  45 + }
  46 + ],
  47 + "description": "A collection of common tools to be used when developing web applications",
  48 + "keywords": [
  49 + "fccn",
  50 + "framework",
  51 + "psr7"
  52 + ],
  53 + "time": "2017-11-06T15:15:26+00:00"
  54 + },
  55 + {
  56 + "name": "ircmaxell/random-lib",
  57 + "version": "v1.2.0",
  58 + "source": {
  59 + "type": "git",
  60 + "url": "https://github.com/ircmaxell/RandomLib.git",
  61 + "reference": "e9e0204f40e49fa4419946c677eccd3fa25b8cf4"
  62 + },
  63 + "dist": {
  64 + "type": "zip",
  65 + "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/e9e0204f40e49fa4419946c677eccd3fa25b8cf4",
  66 + "reference": "e9e0204f40e49fa4419946c677eccd3fa25b8cf4",
  67 + "shasum": ""
  68 + },
  69 + "require": {
  70 + "ircmaxell/security-lib": "^1.1",
  71 + "php": ">=5.3.2"
  72 + },
  73 + "require-dev": {
  74 + "friendsofphp/php-cs-fixer": "^1.11",
  75 + "mikey179/vfsstream": "^1.6",
  76 + "phpunit/phpunit": "^4.8|^5.0"
  77 + },
  78 + "type": "library",
  79 + "extra": {
  80 + "branch-alias": {
  81 + "dev-master": "1.1.x-dev"
  82 + }
  83 + },
  84 + "autoload": {
  85 + "psr-0": {
  86 + "RandomLib": "lib"
  87 + }
  88 + },
  89 + "notification-url": "https://packagist.org/downloads/",
  90 + "license": [
  91 + "MIT"
  92 + ],
  93 + "authors": [
  94 + {
  95 + "name": "Anthony Ferrara",
  96 + "email": "ircmaxell@ircmaxell.com",
  97 + "homepage": "http://blog.ircmaxell.com"
  98 + }
  99 + ],
  100 + "description": "A Library For Generating Secure Random Numbers",
  101 + "homepage": "https://github.com/ircmaxell/RandomLib",
  102 + "keywords": [
  103 + "cryptography",
  104 + "random",
  105 + "random-numbers",
  106 + "random-strings"
  107 + ],
  108 + "time": "2016-09-07T15:52:06+00:00"
  109 + },
  110 + {
  111 + "name": "ircmaxell/security-lib",
  112 + "version": "v1.1.0",
  113 + "source": {
  114 + "type": "git",
  115 + "url": "https://github.com/ircmaxell/SecurityLib.git",
  116 + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5"
  117 + },
  118 + "dist": {
  119 + "type": "zip",
  120 + "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
  121 + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
  122 + "shasum": ""
  123 + },
  124 + "require": {
  125 + "php": ">=5.3.2"
  126 + },
  127 + "require-dev": {
  128 + "mikey179/vfsstream": "1.1.*"
  129 + },
  130 + "type": "library",
  131 + "extra": {
  132 + "branch-alias": {
  133 + "dev-master": "1.0.x-dev"
  134 + }
  135 + },
  136 + "autoload": {
  137 + "psr-0": {
  138 + "SecurityLib": "lib"
  139 + }
  140 + },
  141 + "notification-url": "https://packagist.org/downloads/",
  142 + "license": [
  143 + "MIT"
  144 + ],
  145 + "authors": [
  146 + {
  147 + "name": "Anthony Ferrara",
  148 + "email": "ircmaxell@ircmaxell.com",
  149 + "homepage": "http://blog.ircmaxell.com"
  150 + }
  151 + ],
  152 + "description": "A Base Security Library",
  153 + "homepage": "https://github.com/ircmaxell/SecurityLib",
  154 + "time": "2015-03-20T14:31:23+00:00"
  155 + },
  156 + {
  157 + "name": "monolog/monolog",
  158 + "version": "1.23.0",
  159 + "source": {
  160 + "type": "git",
  161 + "url": "https://github.com/Seldaek/monolog.git",
  162 + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
  163 + },
  164 + "dist": {
  165 + "type": "zip",
  166 + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
  167 + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
  168 + "shasum": ""
  169 + },
  170 + "require": {
  171 + "php": ">=5.3.0",
  172 + "psr/log": "~1.0"
  173 + },
  174 + "provide": {
  175 + "psr/log-implementation": "1.0.0"
  176 + },
  177 + "require-dev": {
  178 + "aws/aws-sdk-php": "^2.4.9 || ^3.0",
  179 + "doctrine/couchdb": "~1.0@dev",
  180 + "graylog2/gelf-php": "~1.0",
  181 + "jakub-onderka/php-parallel-lint": "0.9",
  182 + "php-amqplib/php-amqplib": "~2.4",
  183 + "php-console/php-console": "^3.1.3",
  184 + "phpunit/phpunit": "~4.5",
  185 + "phpunit/phpunit-mock-objects": "2.3.0",
  186 + "ruflin/elastica": ">=0.90 <3.0",
  187 + "sentry/sentry": "^0.13",
  188 + "swiftmailer/swiftmailer": "^5.3|^6.0"
  189 + },
  190 + "suggest": {
  191 + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
  192 + "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
  193 + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
  194 + "ext-mongo": "Allow sending log messages to a MongoDB server",
  195 + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
  196 + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
  197 + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
  198 + "php-console/php-console": "Allow sending log messages to Google Chrome",
  199 + "rollbar/rollbar": "Allow sending log messages to Rollbar",
  200 + "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
  201 + "sentry/sentry": "Allow sending log messages to a Sentry server"
  202 + },
  203 + "type": "library",
  204 + "extra": {
  205 + "branch-alias": {
  206 + "dev-master": "2.0.x-dev"
  207 + }
  208 + },
  209 + "autoload": {
  210 + "psr-4": {
  211 + "Monolog\\": "src/Monolog"
  212 + }
  213 + },
  214 + "notification-url": "https://packagist.org/downloads/",
  215 + "license": [
  216 + "MIT"
  217 + ],
  218 + "authors": [
  219 + {
  220 + "name": "Jordi Boggiano",
  221 + "email": "j.boggiano@seld.be",
  222 + "homepage": "http://seld.be"
  223 + }
  224 + ],
  225 + "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
  226 + "homepage": "http://github.com/Seldaek/monolog",
  227 + "keywords": [
  228 + "log",
  229 + "logging",
  230 + "psr-3"
  231 + ],
  232 + "time": "2017-06-19T01:22:40+00:00"
  233 + },
  234 + {
  235 + "name": "psr/log",
  236 + "version": "1.0.2",
  237 + "source": {
  238 + "type": "git",
  239 + "url": "https://github.com/php-fig/log.git",
  240 + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
  241 + },
  242 + "dist": {
  243 + "type": "zip",
  244 + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
  245 + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
  246 + "shasum": ""
  247 + },
  248 + "require": {
  249 + "php": ">=5.3.0"
  250 + },
  251 + "type": "library",
  252 + "extra": {
  253 + "branch-alias": {
  254 + "dev-master": "1.0.x-dev"
  255 + }
  256 + },
  257 + "autoload": {
  258 + "psr-4": {
  259 + "Psr\\Log\\": "Psr/Log/"
  260 + }
  261 + },
  262 + "notification-url": "https://packagist.org/downloads/",
  263 + "license": [
  264 + "MIT"
  265 + ],
  266 + "authors": [
  267 + {
  268 + "name": "PHP-FIG",
  269 + "homepage": "http://www.php-fig.org/"
  270 + }
  271 + ],
  272 + "description": "Common interface for logging libraries",
  273 + "homepage": "https://github.com/php-fig/log",
  274 + "keywords": [
  275 + "log",
  276 + "psr",
  277 + "psr-3"
  278 + ],
  279 + "time": "2016-10-10T12:19:37+00:00"
  280 + }
  281 + ],
  282 + "packages-dev": [
  283 + {
  284 + "name": "behat/gherkin",
  285 + "version": "v4.4.5",
  286 + "source": {
  287 + "type": "git",
  288 + "url": "https://github.com/Behat/Gherkin.git",
  289 + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74"
  290 + },
  291 + "dist": {
  292 + "type": "zip",
  293 + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74",
  294 + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74",
  295 + "shasum": ""
  296 + },
  297 + "require": {
  298 + "php": ">=5.3.1"
  299 + },
  300 + "require-dev": {
  301 + "phpunit/phpunit": "~4.5|~5",
  302 + "symfony/phpunit-bridge": "~2.7|~3",
  303 + "symfony/yaml": "~2.3|~3"
  304 + },
  305 + "suggest": {
  306 + "symfony/yaml": "If you want to parse features, represented in YAML files"
  307 + },
  308 + "type": "library",
  309 + "extra": {
  310 + "branch-alias": {
  311 + "dev-master": "4.4-dev"
  312 + }
  313 + },
  314 + "autoload": {
  315 + "psr-0": {
  316 + "Behat\\Gherkin": "src/"
  317 + }
  318 + },
  319 + "notification-url": "https://packagist.org/downloads/",
  320 + "license": [
  321 + "MIT"
  322 + ],
  323 + "authors": [
  324 + {
  325 + "name": "Konstantin Kudryashov",
  326 + "email": "ever.zet@gmail.com",
  327 + "homepage": "http://everzet.com"
  328 + }
  329 + ],
  330 + "description": "Gherkin DSL parser for PHP 5.3",
  331 + "homepage": "http://behat.org/",
  332 + "keywords": [
  333 + "BDD",
  334 + "Behat",
  335 + "Cucumber",
  336 + "DSL",
  337 + "gherkin",
  338 + "parser"
  339 + ],
  340 + "time": "2016-10-30T11:50:56+00:00"
  341 + },
  342 + {
  343 + "name": "codeception/codeception",
  344 + "version": "2.3.6",
  345 + "source": {
  346 + "type": "git",
  347 + "url": "https://github.com/Codeception/Codeception.git",
  348 + "reference": "c3dd3b5d9e0b1ea6c2fcca52457736dc756716f8"
  349 + },
  350 + "dist": {
  351 + "type": "zip",
  352 + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c3dd3b5d9e0b1ea6c2fcca52457736dc756716f8",
  353 + "reference": "c3dd3b5d9e0b1ea6c2fcca52457736dc756716f8",
  354 + "shasum": ""
  355 + },
  356 + "require": {
  357 + "behat/gherkin": "~4.4.0",
  358 + "ext-json": "*",
  359 + "ext-mbstring": "*",
  360 + "facebook/webdriver": ">=1.1.3 <2.0",
  361 + "guzzlehttp/guzzle": ">=4.1.4 <7.0",
  362 + "guzzlehttp/psr7": "~1.0",
  363 + "php": ">=5.4.0 <8.0",
  364 + "phpunit/php-code-coverage": ">=2.2.4 <6.0",
  365 + "phpunit/phpunit": ">4.8.20 <7.0",
  366 + "phpunit/phpunit-mock-objects": ">2.3 <5.0",
  367 + "sebastian/comparator": ">1.1 <3.0",
  368 + "sebastian/diff": ">=1.4 <3.0",
  369 + "stecman/symfony-console-completion": "^0.7.0",
  370 + "symfony/browser-kit": ">=2.7 <4.0",
  371 + "symfony/console": ">=2.7 <4.0",
  372 + "symfony/css-selector": ">=2.7 <4.0",
  373 + "symfony/dom-crawler": ">=2.7.5 <4.0",
  374 + "symfony/event-dispatcher": ">=2.7 <4.0",
  375 + "symfony/finder": ">=2.7 <4.0",
  376 + "symfony/yaml": ">=2.7 <4.0"
  377 + },
  378 + "require-dev": {
  379 + "codeception/specify": "~0.3",
  380 + "facebook/graph-sdk": "~5.3",
  381 + "flow/jsonpath": "~0.2",
  382 + "league/factory-muffin": "^3.0",
  383 + "league/factory-muffin-faker": "^1.0",
  384 + "monolog/monolog": "~1.8",
  385 + "pda/pheanstalk": "~3.0",
  386 + "php-amqplib/php-amqplib": "~2.4",
  387 + "predis/predis": "^1.0",
  388 + "squizlabs/php_codesniffer": "~2.0",
  389 + "symfony/process": ">=2.7 <4.0",
  390 + "vlucas/phpdotenv": "^2.4.0"
  391 + },
  392 + "suggest": {
  393 + "codeception/specify": "BDD-style code blocks",
  394 + "codeception/verify": "BDD-style assertions",
  395 + "flow/jsonpath": "For using JSONPath in REST module",
  396 + "league/factory-muffin": "For DataFactory module",
  397 + "league/factory-muffin-faker": "For Faker support in DataFactory module",
  398 + "phpseclib/phpseclib": "for SFTP option in FTP Module",
  399 + "symfony/phpunit-bridge": "For phpunit-bridge support"
  400 + },
  401 + "bin": [
  402 + "codecept"
  403 + ],
  404 + "type": "library",
  405 + "extra": {
  406 + "branch-alias": []
  407 + },
  408 + "autoload": {
  409 + "psr-4": {
  410 + "Codeception\\": "src\\Codeception",
  411 + "Codeception\\Extension\\": "ext"
  412 + }
  413 + },
  414 + "notification-url": "https://packagist.org/downloads/",
  415 + "license": [
  416 + "MIT"
  417 + ],
  418 + "authors": [
  419 + {
  420 + "name": "Michael Bodnarchuk",
  421 + "email": "davert@mail.ua",
  422 + "homepage": "http://codegyre.com"
  423 + }
  424 + ],
  425 + "description": "BDD-style testing framework",
  426 + "homepage": "http://codeception.com/",
  427 + "keywords": [
  428 + "BDD",
  429 + "TDD",
  430 + "acceptance testing",
  431 + "functional testing",
  432 + "unit testing"
  433 + ],
  434 + "time": "2017-09-28T23:19:49+00:00"
  435 + },
  436 + {
  437 + "name": "doctrine/instantiator",
  438 + "version": "1.0.5",
  439 + "source": {
  440 + "type": "git",
  441 + "url": "https://github.com/doctrine/instantiator.git",
  442 + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
  443 + },
  444 + "dist": {
  445 + "type": "zip",
  446 + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
  447 + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
  448 + "shasum": ""
  449 + },
  450 + "require": {
  451 + "php": ">=5.3,<8.0-DEV"
  452 + },
  453 + "require-dev": {
  454 + "athletic/athletic": "~0.1.8",
  455 + "ext-pdo": "*",
  456 + "ext-phar": "*",
  457 + "phpunit/phpunit": "~4.0",
  458 + "squizlabs/php_codesniffer": "~2.0"
  459 + },
  460 + "type": "library",
  461 + "extra": {
  462 + "branch-alias": {
  463 + "dev-master": "1.0.x-dev"
  464 + }
  465 + },
  466 + "autoload": {
  467 + "psr-4": {
  468 + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
  469 + }
  470 + },
  471 + "notification-url": "https://packagist.org/downloads/",
  472 + "license": [
  473 + "MIT"
  474 + ],
  475 + "authors": [
  476 + {
  477 + "name": "Marco Pivetta",
  478 + "email": "ocramius@gmail.com",
  479 + "homepage": "http://ocramius.github.com/"
  480 + }
  481 + ],
  482 + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
  483 + "homepage": "https://github.com/doctrine/instantiator",
  484 + "keywords": [
  485 + "constructor",
  486 + "instantiate"
  487 + ],
  488 + "time": "2015-06-14T21:17:01+00:00"
  489 + },
  490 + {
  491 + "name": "facebook/webdriver",
  492 + "version": "1.4.1",
  493 + "source": {
  494 + "type": "git",
  495 + "url": "https://github.com/facebook/php-webdriver.git",
  496 + "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83"
  497 + },
  498 + "dist": {
  499 + "type": "zip",
  500 + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/eadb0b7a7c3e6578185197fd40158b08c3164c83",
  501 + "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83",
  502 + "shasum": ""
  503 + },
  504 + "require": {
  505 + "ext-curl": "*",
  506 + "ext-zip": "*",
  507 + "php": "^5.5 || ~7.0",
  508 + "symfony/process": "^2.8 || ^3.1"
  509 + },
  510 + "require-dev": {
  511 + "friendsofphp/php-cs-fixer": "^2.0",
  512 + "php-mock/php-mock-phpunit": "^1.1",
  513 + "phpunit/phpunit": "4.6.* || ~5.0",
  514 + "satooshi/php-coveralls": "^1.0",
  515 + "squizlabs/php_codesniffer": "^2.6"
  516 + },
  517 + "type": "library",
  518 + "extra": {
  519 + "branch-alias": {
  520 + "dev-community": "1.5-dev"
  521 + }
  522 + },
  523 + "autoload": {
  524 + "psr-4": {
  525 + "Facebook\\WebDriver\\": "lib/"
  526 + }
  527 + },
  528 + "notification-url": "https://packagist.org/downloads/",
  529 + "license": [
  530 + "Apache-2.0"
  531 + ],
  532 + "description": "A PHP client for Selenium WebDriver",
  533 + "homepage": "https://github.com/facebook/php-webdriver",
  534 + "keywords": [
  535 + "facebook",
  536 + "php",
  537 + "selenium",
  538 + "webdriver"
  539 + ],
  540 + "time": "2017-04-28T14:54:49+00:00"
  541 + },
  542 + {
  543 + "name": "guzzlehttp/guzzle",
  544 + "version": "6.3.0",
  545 + "source": {
  546 + "type": "git",
  547 + "url": "https://github.com/guzzle/guzzle.git",
  548 + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
  549 + },
  550 + "dist": {
  551 + "type": "zip",
  552 + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
  553 + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
  554 + "shasum": ""
  555 + },
  556 + "require": {
  557 + "guzzlehttp/promises": "^1.0",
  558 + "guzzlehttp/psr7": "^1.4",
  559 + "php": ">=5.5"
  560 + },
  561 + "require-dev": {
  562 + "ext-curl": "*",
  563 + "phpunit/phpunit": "^4.0 || ^5.0",
  564 + "psr/log": "^1.0"
  565 + },
  566 + "suggest": {
  567 + "psr/log": "Required for using the Log middleware"
  568 + },
  569 + "type": "library",
  570 + "extra": {
  571 + "branch-alias": {
  572 + "dev-master": "6.2-dev"
  573 + }
  574 + },
  575 + "autoload": {
  576 + "files": [
  577 + "src/functions_include.php"
  578 + ],
  579 + "psr-4": {
  580 + "GuzzleHttp\\": "src/"
  581 + }
  582 + },
  583 + "notification-url": "https://packagist.org/downloads/",
  584 + "license": [
  585 + "MIT"
  586 + ],
  587 + "authors": [
  588 + {
  589 + "name": "Michael Dowling",
  590 + "email": "mtdowling@gmail.com",
  591 + "homepage": "https://github.com/mtdowling"
  592 + }
  593 + ],
  594 + "description": "Guzzle is a PHP HTTP client library",
  595 + "homepage": "http://guzzlephp.org/",
  596 + "keywords": [
  597 + "client",
  598 + "curl",
  599 + "framework",
  600 + "http",
  601 + "http client",
  602 + "rest",
  603 + "web service"
  604 + ],
  605 + "time": "2017-06-22T18:50:49+00:00"
  606 + },
  607 + {
  608 + "name": "guzzlehttp/promises",
  609 + "version": "v1.3.1",
  610 + "source": {
  611 + "type": "git",
  612 + "url": "https://github.com/guzzle/promises.git",
  613 + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
  614 + },
  615 + "dist": {
  616 + "type": "zip",
  617 + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
  618 + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
  619 + "shasum": ""
  620 + },
  621 + "require": {
  622 + "php": ">=5.5.0"
  623 + },
  624 + "require-dev": {
  625 + "phpunit/phpunit": "^4.0"
  626 + },
  627 + "type": "library",
  628 + "extra": {
  629 + "branch-alias": {
  630 + "dev-master": "1.4-dev"
  631 + }
  632 + },
  633 + "autoload": {
  634 + "psr-4": {
  635 + "GuzzleHttp\\Promise\\": "src/"
  636 + },
  637 + "files": [
  638 + "src/functions_include.php"
  639 + ]
  640 + },
  641 + "notification-url": "https://packagist.org/downloads/",
  642 + "license": [
  643 + "MIT"
  644 + ],
  645 + "authors": [
  646 + {
  647 + "name": "Michael Dowling",
  648 + "email": "mtdowling@gmail.com",
  649 + "homepage": "https://github.com/mtdowling"
  650 + }
  651 + ],
  652 + "description": "Guzzle promises library",
  653 + "keywords": [
  654 + "promise"
  655 + ],
  656 + "time": "2016-12-20T10:07:11+00:00"
  657 + },
  658 + {
  659 + "name": "guzzlehttp/psr7",
  660 + "version": "1.4.2",
  661 + "source": {
  662 + "type": "git",
  663 + "url": "https://github.com/guzzle/psr7.git",
  664 + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
  665 + },
  666 + "dist": {
  667 + "type": "zip",
  668 + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
  669 + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
  670 + "shasum": ""
  671 + },
  672 + "require": {
  673 + "php": ">=5.4.0",
  674 + "psr/http-message": "~1.0"
  675 + },
  676 + "provide": {
  677 + "psr/http-message-implementation": "1.0"
  678 + },
  679 + "require-dev": {
  680 + "phpunit/phpunit": "~4.0"
  681 + },
  682 + "type": "library",
  683 + "extra": {
  684 + "branch-alias": {
  685 + "dev-master": "1.4-dev"
  686 + }
  687 + },
  688 + "autoload": {
  689 + "psr-4": {
  690 + "GuzzleHttp\\Psr7\\": "src/"
  691 + },
  692 + "files": [
  693 + "src/functions_include.php"
  694 + ]
  695 + },
  696 + "notification-url": "https://packagist.org/downloads/",
  697 + "license": [
  698 + "MIT"
  699 + ],
  700 + "authors": [
  701 + {
  702 + "name": "Michael Dowling",
  703 + "email": "mtdowling@gmail.com",
  704 + "homepage": "https://github.com/mtdowling"
  705 + },
  706 + {
  707 + "name": "Tobias Schultze",
  708 + "homepage": "https://github.com/Tobion"
  709 + }
  710 + ],
  711 + "description": "PSR-7 message implementation that also provides common utility methods",
  712 + "keywords": [
  713 + "http",
  714 + "message",
  715 + "request",
  716 + "response",
  717 + "stream",
  718 + "uri",
  719 + "url"
  720 + ],
  721 + "time": "2017-03-20T17:10:46+00:00"
  722 + },
  723 + {
  724 + "name": "myclabs/deep-copy",
  725 + "version": "1.7.0",
  726 + "source": {
  727 + "type": "git",
  728 + "url": "https://github.com/myclabs/DeepCopy.git",
  729 + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
  730 + },
  731 + "dist": {
  732 + "type": "zip",
  733 + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
  734 + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
  735 + "shasum": ""
  736 + },
  737 + "require": {
  738 + "php": "^5.6 || ^7.0"
  739 + },
  740 + "require-dev": {
  741 + "doctrine/collections": "^1.0",
  742 + "doctrine/common": "^2.6",
  743 + "phpunit/phpunit": "^4.1"
  744 + },
  745 + "type": "library",
  746 + "autoload": {
  747 + "psr-4": {
  748 + "DeepCopy\\": "src/DeepCopy/"
  749 + },
  750 + "files": [
  751 + "src/DeepCopy/deep_copy.php"
  752 + ]
  753 + },
  754 + "notification-url": "https://packagist.org/downloads/",
  755 + "license": [
  756 + "MIT"
  757 + ],
  758 + "description": "Create deep copies (clones) of your objects",
  759 + "keywords": [
  760 + "clone",
  761 + "copy",
  762 + "duplicate",
  763 + "object",
  764 + "object graph"
  765 + ],
  766 + "time": "2017-10-19T19:58:43+00:00"
  767 + },
  768 + {
  769 + "name": "phpdocumentor/reflection-common",
  770 + "version": "1.0.1",
  771 + "source": {
  772 + "type": "git",
  773 + "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
  774 + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
  775 + },
  776 + "dist": {
  777 + "type": "zip",
  778 + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
  779 + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
  780 + "shasum": ""
  781 + },
  782 + "require": {
  783 + "php": ">=5.5"
  784 + },
  785 + "require-dev": {
  786 + "phpunit/phpunit": "^4.6"
  787 + },
  788 + "type": "library",
  789 + "extra": {
  790 + "branch-alias": {
  791 + "dev-master": "1.0.x-dev"
  792 + }
  793 + },
  794 + "autoload": {
  795 + "psr-4": {
  796 + "phpDocumentor\\Reflection\\": [
  797 + "src"
  798 + ]
  799 + }
  800 + },
  801 + "notification-url": "https://packagist.org/downloads/",
  802 + "license": [
  803 + "MIT"
  804 + ],
  805 + "authors": [
  806 + {
  807 + "name": "Jaap van Otterdijk",
  808 + "email": "opensource@ijaap.nl"
  809 + }
  810 + ],
  811 + "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
  812 + "homepage": "http://www.phpdoc.org",
  813 + "keywords": [
  814 + "FQSEN",
  815 + "phpDocumentor",
  816 + "phpdoc",
  817 + "reflection",
  818 + "static analysis"
  819 + ],
  820 + "time": "2017-09-11T18:02:19+00:00"
  821 + },
  822 + {
  823 + "name": "phpdocumentor/reflection-docblock",
  824 + "version": "3.2.2",
  825 + "source": {
  826 + "type": "git",
  827 + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
  828 + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
  829 + },
  830 + "dist": {
  831 + "type": "zip",
  832 + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
  833 + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
  834 + "shasum": ""
  835 + },
  836 + "require": {
  837 + "php": ">=5.5",
  838 + "phpdocumentor/reflection-common": "^1.0@dev",
  839 + "phpdocumentor/type-resolver": "^0.3.0",
  840 + "webmozart/assert": "^1.0"
  841 + },
  842 + "require-dev": {
  843 + "mockery/mockery": "^0.9.4",
  844 + "phpunit/phpunit": "^4.4"
  845 + },
  846 + "type": "library",
  847 + "autoload": {
  848 + "psr-4": {
  849 + "phpDocumentor\\Reflection\\": [
  850 + "src/"
  851 + ]
  852 + }
  853 + },
  854 + "notification-url": "https://packagist.org/downloads/",
  855 + "license": [
  856 + "MIT"
  857 + ],
  858 + "authors": [
  859 + {
  860 + "name": "Mike van Riel",
  861 + "email": "me@mikevanriel.com"
  862 + }