1
0
mirror of https://github.com/ovh/php-ovh.git synced 2023-11-05 03:20:26 +01:00

Use a PHP build tool, Phing instead of Grunt.

As I already mentioned in the #35 issue, I think it's more suitable to use a PHP build tool instead of a JS one. I don't tell that Grunt is not a powerful tool but it's a complicated installation process to be able to run tests.

Phing is required as a composer package and can be run directly after the composer install.

Examples:

```
vendor/bin/phing
vendor/bin/phing test
vendor/bin/phing clean
vendor/bin/phing phplint
vendor/bin/phing phpcs
vendor/bin/phing phpunit
vendor/bin/phing phpunit -Donly.units=true #The travis test process
```

The only difference here is the watch process. Phing doesn't have that kind of feature. It can be emulated with different tasks but require a lot more work. I think that PR is the first step, maybe we can go further if necessary.

Signed-off-by: Stéphane HULARD <s.hulard@chstudio.fr>
This commit is contained in:
Stéphane HULARD 2016-04-05 14:49:08 +02:00
parent 815b07ba22
commit c13758720b
8 changed files with 133 additions and 111 deletions

2
.gitignore vendored
View File

@ -3,3 +3,5 @@ vendor
composer.lock
composer.phar
/phpunit.xml
/build.properties
/docs

View File

@ -6,7 +6,7 @@ addons:
language: php
php:
- hhvm
- 7.0
- 7.0
- 5.6
- 5.5
- 7.0
@ -15,4 +15,4 @@ before_script:
- composer self-update
- composer install
script: phpunit tests/ApiTest.php
script: vendor/bin/phing test -Donly.units=true

View File

@ -1,77 +0,0 @@
/**
* Gruntfile.js
*/
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
php: {
dist: {
options: {
port: 8080,
base: 'web',
open: true,
keepalive: true
}
}
},
phpcs: {
application: {
dir: ['src/']
},
options: {
bin: 'vendor/bin/phpcs',
standard: 'PSR2'
}
},
phplint: {
options: {
swapPath: '/tmp'
},
all: ['src/*.php']
},
phpdocumentor: {
dist: {
options: {
directory: './src/',
bin: 'vendor/bin/phpdoc.php',
target: 'docs/'
}
}
},
clean: {
phpdocumentor: 'docs/'
},
phpunit: {
unit: {
dir: 'tests'
},
options: {
bin: 'vendor/bin/phpunit',
colors: true,
testdox: true
}
},
watch: {
scripts: {
files: ['src/*.php', 'src/**/*.php', 'tests/*.php', 'tests/**/*.php'],
tasks: ['precommit'],
},
},
});
grunt.loadNpmTasks('grunt-phpcs');
grunt.loadNpmTasks('grunt-php');
grunt.loadNpmTasks('grunt-phplint');
grunt.loadNpmTasks('grunt-phpunit');
grunt.loadNpmTasks('grunt-phpdocumentor');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.registerTask('phpdocs', [
'clean:phpdocumentor',
'phpdocumentor'
]);
grunt.registerTask('precommit', ['phplint:all', 'phpcs', 'phpunit:unit']);
grunt.registerTask('default', ['phplint:all', 'phpcs', 'phpunit:unit', 'phpdocs']);
grunt.registerTask('server', ['php']);
};

View File

@ -27,7 +27,7 @@ Quickstart
To download this wrapper and integrate it inside your PHP application, you can use [Composer](https://getcomposer.org).
Add the repository in your **composer.json** file or, if you don't already have
Add the repository in your **composer.json** file or, if you don't already have
this file, create it at the root of your project with this content:
```json
@ -58,7 +58,7 @@ How to login as a user?
To communicate with APIs, the SDK uses a token on each request to identify the
user. This token is called *Consumer Key*. To have a validated *Consumer Key*,
you need to redirect your user on specific authentication page. Once the user has
you need to redirect your user on specific authentication page. Once the user has
logged in, the token is validated and user will be redirected on __$redirection__ url.
```php
@ -173,11 +173,10 @@ you can install local npm project in a clone a project
git clone https://github.com/ovh/php-ovh.git
cd php-ovh
php composer.phar install
npm install
To generate documentation, it's possible to use directly:
grunt default
vendor/bin/phing phpdocs
Documentation is available in docs/ directory.
@ -190,12 +189,15 @@ local npm project in a clone a project
git https://github.com/ovh/php-ovh.git
cd php-ovh
php composer.phar install
npm install
Edit **phpunit.xml** file with your credentials to pass functionals tests. Then,
you can run directly unit and functionals tests with grunt.
you can run directly unit and functionals tests with [phing](http://www.phing.info/).
grunt
vendor/bin/phing test
To skip functionals and run unit tests only, you can use the `only.units` option :
vendor/bin/phing test -Donly.units=true
Supported APIs
--------------

114
build.xml Normal file
View File

@ -0,0 +1,114 @@
<?xml version="1.0"?>
<project name="ovh/ovh" default="all">
<property name="base" value="${project.basedir}/" />
<property environment="env" />
<if>
<available file="${base}build.properties" property="" />
<then>
<property file="${base}build.properties" override="true" />
</then>
</if>
<!--##########################################################################################################-->
<target name="help">
<echo message="${phing.project.name} on [${git.branch}]" />
<echo message=" Available commands are:" />
<echo message=" test -> Run unit tests" />
<echo message=" clean -> Clean current environment" />
<echo message=" server -> Launch PHP built-in server" />
<echo message=" watch -> Run precommit task on every file changed" />
<echo message=" precommit -> Source code validation before commit" />
<echo message=" Specific tools tasks:" />
<echo message=" phpcs -> Run PHP Code Sniffer" />
<echo message=" phplint -> Run PHP Lint" />
<echo message=" phpdocs -> Run PHP Documentor" />
<echo message=" phpunit -> Run PHPUnit" />
</target>
<!--##########################################################################################################-->
<target name="test" description="Run unit tests">
<phingcall target="phpunit" />
</target>
<target name="clean" description="Clean current environment">
<delete dir="docs" includeemptydirs="true" verbose="true" failonerror="true" />
</target>
<target name="precommit" description="Source code validation before commit">
<phingcall target="phplint" />
<phingcall target="phpcs" />
<phingcall target="phpunit" />
</target>
<target name="all" description="Make a full integration check">
<phingcall target="phplint" />
<phingcall target="phpcs" />
<phingcall target="phpunit" />
<phingcall target="phpdocs" />
</target>
<!--##########################################################################################################-->
<target name="phpcs" description="Run PHP Code Sniffer">
<phpcodesniffer
standard="PSR2"
format="summary"
>
<fileset dir=".">
<include name="src/**/*.php"/>
<include name="test/**/*.php"/>
</fileset>
</phpcodesniffer>
</target>
<target name="phpcbf" description="Run PHP Code Sniffer">
<exec command="vendor/bin/phpcbf --standard=PSR2 src" logoutput="true" />
</target>
<target name="phplint" description="Run PHP Lint">
<phplint deprecatedAsError="true">
<fileset dir=".">
<include name="src/**/*.php"/>
<include name="test/**/*.php"/>
</fileset>
</phplint>
</target>
<target name="phpdocs" description="Run PHP Documentor" depends="clean">
<if>
<not><available file="docs" /></not>
<then>
<mkdir dir="docs" />
</then>
</if>
<phpdoc2 destdir="docs">
<fileset dir="src">
<include name="**/*.php" />
</fileset>
</phpdoc2>
</target>
<target name="phpunit" description="Run PHPUnit">
<if>
<and>
<isset property="only.units" />
<equals arg1="${only.units}" arg2="true" />
</and>
<then>
<fileset dir="tests" id="tests">
<include name="ApiTest.php"/>
</fileset>
</then>
<else>
<fileset dir="tests" id="tests">
<include name="**/*.php"/>
</fileset>
</else>
</if>
<phpunit
haltonfailure="true"
haltonerror="true"
bootstrap="tests/bootstrap.php"
printsummary="true"
>
<formatter type="plain" usefile="false"/>
<batchtest>
<fileset refid="tests" />
</batchtest>
</phpunit>
</target>
<!--##########################################################################################################-->
</project>

View File

@ -11,6 +11,7 @@
"require-dev": {
"phpunit/phpunit": "4.*",
"phpdocumentor/phpdocumentor": "2.*",
"squizlabs/php_codesniffer": "1.*"
"squizlabs/php_codesniffer": "2.*",
"phing/phing": "^2.14"
}
}

View File

@ -1,15 +0,0 @@
{
"name": "ovh-ovh",
"version": "1.1.0",
"project": "Ovh",
"dependencies": {
"grunt": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-phpcs": "~0.2.2",
"grunt-php": "~0.3.2",
"grunt-phplint": "~0.0.5",
"grunt-phpunit": "~0.3.3",
"grunt-phpdocumentor": "~0.4.1",
"grunt-contrib-watch ": "~0.6.1"
}
}

View File

@ -228,13 +228,12 @@ class Api
$url = $this->endpoint . $path;
$request = new Request($method, $url);
if (isset($content) && $method == 'GET') {
$query_string = $request->getUri()->getQuery();
$query = array();
if (!empty($query_string)) {
$queries = explode('&', $query_string);
foreach($queries as $element) {
foreach ($queries as $element) {
$key_value_query = explode('=', $element, 2);
$query[$key_value_query[0]] = $key_value_query[1];
}
@ -243,14 +242,10 @@ class Api
$query = array_merge($query, (array)$content);
// rewrite query args to properly dump true/false parameters
foreach($query as $key => $value)
{
if ($value === false)
{
foreach ($query as $key => $value) {
if ($value === false) {
$query[$key] = "false";
}
elseif ($value === true)
{
} elseif ($value === true) {
$query[$key] = "true";
}
}