From: Raphaƫl Gertz <git@rapsys.eu>
Date: Tue, 26 Nov 2019 21:58:37 +0000 (+0100)
Subject: Update documentation
X-Git-Tag: 0.1.3
X-Git-Url: https://git.rapsys.eu/packbundle/commitdiff_plain/f86a3843cac9cddecd718697c8ce401fa6637dc3

Update documentation
---

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
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8" />
+		<title>{% block title %}Welcome!{% endblock %}</title>
+		{% stylesheet '//fonts.googleapis.com/css?family=Irish+Grover|La+Belle+Aurore' '@NamedBundle/Resources/public/css/{reset,screen}.css' '@Short/css/example.css' %}
+			<link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
+		{% endstylesheet %}
+	</head>
+	<body>
+		{% block body %}{% endblock %}
+		{% javascript '@Short/js/*.js' %}
+			<script type="text/javascript" src="{{ asset_url }}"></script>
+		{% endjavascript %}
+	</body>
+</html>
+```
+
+### 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
+<?php
+
+namespace Rapsys\PackBundle\Twig\Filter;
+
+use Rapsys\PackBundle\Twig\Filter\FilterInterface;
+use Twig\Error\Error;
+
+//This class will be defined in the parameter rapsys_pack.filters.(css|img|js).[x].class string
+class MyPackFilter implements FilterInterface {
+	//The constructor arguments ... will be replaced defined in the parameter rapsys_pack.filters.(css|img|js).[x].args array
+	public function __construct($fileName, $line, $bin = 'mypack', ...) {
+		//Set fileName
+		$this->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.