From 7f3570dad34e43b77035b7037d303afaac3832d7 Mon Sep 17 00:00:00 2001
From: Gilles Doge <gilles@antistatique.net>
Date: Mon, 19 May 2014 21:44:38 +0200
Subject: [PATCH] add config 'no-parameter-key' to directly use top level keys
 as parameters

---
 Processor.php                                 | 36 ++++++++++++++-----
 .../testcases/no_parameter_key/dist.yml       |  2 ++
 .../testcases/no_parameter_key/existing.yml   |  2 ++
 .../testcases/no_parameter_key/expected.yml   |  3 ++
 .../testcases/no_parameter_key/setup.yml      |  4 +++
 5 files changed, 38 insertions(+), 9 deletions(-)
 create mode 100644 Tests/fixtures/testcases/no_parameter_key/dist.yml
 create mode 100644 Tests/fixtures/testcases/no_parameter_key/existing.yml
 create mode 100644 Tests/fixtures/testcases/no_parameter_key/expected.yml
 create mode 100644 Tests/fixtures/testcases/no_parameter_key/setup.yml

diff --git a/Processor.php b/Processor.php
index 1b960bd..0763dd9 100644
--- a/Processor.php
+++ b/Processor.php
@@ -22,6 +22,7 @@ public function processFile(array $config)
 
         $realFile = $config['file'];
         $parameterKey = $config['parameter-key'];
+        $noParameterKey = $config['no-parameter-key'];
 
         $exists = is_file($realFile);
 
@@ -32,17 +33,26 @@ public function processFile(array $config)
 
         // Find the expected params
         $expectedValues = $yamlParser->parse(file_get_contents($config['dist-file']));
-        if (!isset($expectedValues[$parameterKey])) {
-            throw new \InvalidArgumentException('The dist file seems invalid.');
+        if ($noParameterKey) {
+            $expectedParams = (array) $expectedValues;
+        } else {
+            if (!isset($expectedValues[$parameterKey])) {
+                throw new \InvalidArgumentException('The dist file seems invalid.');
+            }
+            $expectedParams = (array) $expectedValues[$parameterKey];
         }
-        $expectedParams = (array) $expectedValues[$parameterKey];
 
         // find the actual params
-        $actualValues = array_merge(
-            // Preserve other top-level keys than `$parameterKey` in the file
-            $expectedValues,
-            array($parameterKey => array())
-        );
+        if ($noParameterKey) {
+            $actualValues = array();
+        } else {
+            $actualValues = array_merge(
+                // Preserve other top-level keys than `$parameterKey` in the file
+                $expectedValues,
+                array($parameterKey => array())
+            );
+        }
+
         if ($exists) {
             $existingValues = $yamlParser->parse(file_get_contents($realFile));
             if ($existingValues === null) {
@@ -54,7 +64,11 @@ public function processFile(array $config)
             $actualValues = array_merge($actualValues, $existingValues);
         }
 
-        $actualValues[$parameterKey] = $this->processParams($config, $expectedParams, (array) $actualValues[$parameterKey]);
+        if ($noParameterKey) {
+            $actualValues = $this->processParams($config, $expectedParams, (array) $actualValues);
+        } else {
+            $actualValues[$parameterKey] = $this->processParams($config, $expectedParams, (array) $actualValues[$parameterKey]);
+        }
 
         if (!is_dir($dir = dirname($realFile))) {
             mkdir($dir, 0755, true);
@@ -81,6 +95,10 @@ private function processConfig(array $config)
             $config['parameter-key'] = 'parameters';
         }
 
+        if (empty($config['no-parameter-key'])) {
+            $config['no-parameter-key'] = false;
+        }
+
         return $config;
     }
 
diff --git a/Tests/fixtures/testcases/no_parameter_key/dist.yml b/Tests/fixtures/testcases/no_parameter_key/dist.yml
new file mode 100644
index 0000000..4147cb9
--- /dev/null
+++ b/Tests/fixtures/testcases/no_parameter_key/dist.yml
@@ -0,0 +1,2 @@
+foo: bar
+boolean: false
diff --git a/Tests/fixtures/testcases/no_parameter_key/existing.yml b/Tests/fixtures/testcases/no_parameter_key/existing.yml
new file mode 100644
index 0000000..6d51ab1
--- /dev/null
+++ b/Tests/fixtures/testcases/no_parameter_key/existing.yml
@@ -0,0 +1,2 @@
+# This file is auto-generated during the composer install
+foo: existing_foo
diff --git a/Tests/fixtures/testcases/no_parameter_key/expected.yml b/Tests/fixtures/testcases/no_parameter_key/expected.yml
new file mode 100644
index 0000000..7544803
--- /dev/null
+++ b/Tests/fixtures/testcases/no_parameter_key/expected.yml
@@ -0,0 +1,3 @@
+# This file is auto-generated during the composer install
+foo: existing_foo
+boolean: false
diff --git a/Tests/fixtures/testcases/no_parameter_key/setup.yml b/Tests/fixtures/testcases/no_parameter_key/setup.yml
new file mode 100644
index 0000000..b362378
--- /dev/null
+++ b/Tests/fixtures/testcases/no_parameter_key/setup.yml
@@ -0,0 +1,4 @@
+title: "When 'no-parameter-key' config is set to true, top level keys are used as parameters"
+
+config:
+    no-parameter-key: true