X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/3ddf076ca3e59ab12b7237bd31702300dcbb3164..f86a3843cac9cddecd718697c8ce401fa6637dc3:/README.md?ds=sidebyside diff --git a/README.md b/README.md index ebc9136..3f3ab87 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,38 @@ Installation Applications that use Symfony Flex ---------------------------------- -Open a command console, enter your project directory and execute: +Add bundle custom repository to your project's `composer.json` file: + +```json +{ + ..., + "repositories": [ + { + "type": "package", + "package": { + "name": "rapsys/packbundle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://git.rapsys.eu/packbundle", + "reference": "master" + }, + "autoload": { + "psr-4": { + "Rapsys\\PackBundle\\": "" + } + } + } + } + ], + ... +} +``` + +Then open a command console, enter your project directory and execute: ```console -$ composer require +$ composer require rapsys/packbundle dev-master ``` Applications that don't use Symfony Flex @@ -19,7 +47,7 @@ Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle: ```console -$ composer require +$ composer require rapsys/packbundle dev-master ``` This command requires you to have Composer installed globally, as explained @@ -42,7 +70,7 @@ class AppKernel extends Kernel { $bundles = array( // ... - new \\(), + new Rapsys\PackBundle\RapsysPackBundle(), ); // ... @@ -51,3 +79,172 @@ class AppKernel extends Kernel // ... } ``` + +### Step 3: Configure the Bundle + +Verify that you have the configuration file `config/packages/rapsys_pack.yaml` +with the following content: + +```yaml +#Services configuration +services: + #Register assets pack package + assets.pack_package: + class: Rapsys\PackBundle\Asset\PathPackage + arguments: [ '/', '@assets.empty_version_strategy', '@assets.context' ] + #Register twig pack extension + rapsys_pack.twig.pack_extension: + class: Rapsys\PackBundle\Twig\PackExtension + arguments: [ '@file_locator', '@service_container', '@assets.pack_package' ] + tags: [ twig.extension ] +``` + +Open a command console, enter your project directory and execute the +following command to see default bundle configuration: + +```console +$ php bin/console config:dump-reference RapsysPackBundle +``` + +Open a command console, enter your project directory and execute the +following command to see current bundle configuration: + +```console +$ php bin/console debug:config RapsysPackBundle +``` + +### Step 4: Use the twig extension in your Template + +You can use a template like this to generate your first `rapsys_pack` enabled template: + +```twig + + + + + {% block title %}Welcome!{% endblock %} + {% stylesheet '//fonts.googleapis.com/css?family=Irish+Grover|La+Belle+Aurore' '@NamedBundle/Resources/public/css/{reset,screen}.css' '@Short/css/example.css' %} + + {% endstylesheet %} + + + {% block body %}{% endblock %} + {% javascript '@Short/js/*.js' %} + + {% endjavascript %} + + +``` + +### Step 5: Make sure you have local binary installed + +You need to have cpack and jpack scripts from https://git.rapsys.eu/packer/ repository +set as executable and installed in /usr/local/bin. + +To install cpack and jpack required packages open a root console and execute the +following command: + +```console +# urpmi perl-base perl-CSS-Packer perl-JavaScript-Packer +``` + +or stone age distributions: + +```console +# apt-get install libcss-packer-perl libjavascript-packer-perl +``` + +or other distributions through cpan: + +```console +# cpan App::cpanminus +# cpanm CSS::Packer +# cpanm JavaScript::Packer +``` + +### Step 6: Create your own filter + +You can create you own mypackfilter class which call a mypack binary: + +```php +fileName = $fileName; + + //Set line + $this->line = $line; + + //Set bin + $this->bin = $bin; + + //Check argument presence + if (!empty($this->...)) { + //Append argument + if ($this->... == '...') { + $this->bin .= ' ...'; + } else { + //Throw an error on ... + throw new Error(sprintf('Got ... for %s: %s', $this->bin, $this->...), $this->line, $this->fileName); + } + } + } + + //Pass merge of all inputs in content + public function process($content) { + //Create descriptors + $descriptorSpec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ); + + //Open process + if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) { + //Set stderr as non blocking + stream_set_blocking($pipes[2], 0); + + //Send content to stdin + fwrite($pipes[0], $content); + + //Close stdin + fclose($pipes[0]); + + //Read content from stdout + if ($stdout = stream_get_contents($pipes[1])) { + $content = $stdout; + } + + //Close stdout + fclose($pipes[1]); + + //Read content from stderr + if (($stderr = stream_get_contents($pipes[2]))) { + throw new Error(sprintf('Got unexpected strerr for %s: %s', $this->bin, $stderr), $this->line, $this->fileName); + } + + //Close stderr + fclose($pipes[2]); + + //Close process + if (($ret = proc_close($proc))) { + throw new Error(sprintf('Got unexpected non zero return code %s: %d', $this->bin, $ret), $this->line, $this->fileName); + } + } + + //Return content + return $content; + } +} +``` + +The class is required to get it's arguments through constructor and have a process method.