Completed
Push — master ( 0b2dff...ab8bfa )
by Moshe
01:19
created

ArgumentEngine::sshWrap()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
namespace Consolidation\SiteProcess\Util;
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, implode(' ', $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->isRemote()) {
35
    	  	  return $result;
36
    	  }
37
    	  
38
    	  $ssh = [
39
    	      'ssh',
40
              // Is this needed or desired?
41
              '-o PasswordAuthentication=example',
42
              // Commands should add this themselves?
43
              '-t',
44
              $siteAlias->remoteHostWithUser(),
45
          ];
46
47
    	  return $ssh + $result;
48
    }
49
50
    protected function interpolate(AliasRecord $siteAlias, $message)
51
    {
52
    		$replacements = $this->replacements($siteAlias, $message);
53
        return strtr($message, $replacements);
54
    }
55
56
    protected function replacements(AliasRecord $siteAlias, $message, $default = '')
57
    {
58
    	  if (!preg_match_all('#{{([a-zA-Z0-9._-]+)}}#', $message, $matches, PREG_SET_ORDER)) {
59
    	  		return [];
60
    	  }
61
    	  $replacements = [];
62
    	  foreach ($matches as $matchSet) {
63
    	  	  list($sourceText, $key) = $matchSet;
64
    	  	  $replacementText = $siteAlias->get($key, $default);
65
    	  	  if ($replacementText !== null) {
66
		    	  	  $replacements[$sourceText] = $replacementText;
67
		    	  }
68
    	  }
69
    	  return $replacements;
70
    }
71
}
72