X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/74728125f4c1dbae4c513d01bc83724c18c4108f..3bca35c39f756b70a01fd2f2391cba66beb2b3d3:/README.md?ds=sidebyside diff --git a/README.md b/README.md index ee7b0bb..3f3ab87 100644 --- a/README.md +++ b/README.md @@ -79,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.