Completed
Push — master ( 38e6f2...0b2dff )
by Greg
02:30
created

ArgumentEngine   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 1
dl 0
loc 59
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A selectArgs() 0 10 1
A appendOptions() 0 10 2
A sshWrap() 0 12 2
A interpolate() 0 5 1
A replacements() 0 15 4
1
<?php
2
namespace Consolidation\SiteProcess;
3
4
use Consolidation\SiteAlias\AliasRecord;
5
use Symfony\Component\Process\Process;
6
7
class ArgumentEngine
8
{
9
    public function selectArgs(AliasRecord $siteAlias, $args, $options = [])
10
    {
11
    		$result = $args;
12
13
    		$result = $this->appendOptions($result, $options);
14
    		$result = $this->sshWrap($siteAlias, $result);
15
    		$result = $this->interpolate($siteAlias, $result);
16
17
    		return $result;
18
    }
19
20
    protected function appendOptions($result, $options)
21
    {
22
    	  foreach ($options as $option => $value)
23
    	  {
24
    	  		// TODO: escape as necessary
25
    	  		$result[] = "--{$option}={$value}";
26
    	  }
27
28
    	  return $result;
29
    }
30
31
    protected function sshWrap(AliasRecord $siteAlias, $result)
32
    {
33
    		// Exit early if not remote
34
    	  if (!$siteAlias.has('remote')) {
35
    	  	  return $result;
36
    	  }
37
38
    	  // TODO: Pull out ssh info from site alias and wrap
39
    	  // commands in $result in an ssh command.
40
41
    	  return $result;
42
    }
43
44
    protected function interpolate(AliasRecord $siteAlias, $message)
45
    {
46
    		$replacements = $this->replacements($siteAlias, $message);
47
        return strtr($message, $replacements);
48
    }
49
50
    protected function replacements(AliasRecord $siteAlias, $message, $default = '')
51
    {
52
    	  if (!preg_match_all('#{{([a-zA-Z0-9._-]+)}}#', $message, $matches, PREG_SET_ORDER)) {
53
    	  		return [];
54
    	  }
55
    	  $replacements = [];
56
    	  foreach ($matches as $matchSet) {
57
    	  	  list($sourceText, $key) = $matchSet;
58
    	  	  $replacementText = $siteAlias->get($key, $default);
59
    	  	  if ($replacementText !== null) {
60
		    	  	  $replacements[$sourceText] = $replacementText;
61
		    	  }
62
    	  }
63
    	  return $replacements;
64
    }
65
}
66