2 namespace Workspace\UseCase;
7 * Contract execution options.
20 protected $optionData;
25 * @param array $packagedOptions
26 * @return \Workspace\UseCase\Options
28 public function __construct(array $packagedOptions = array(), array $optionData = array())
30 $this->options = array();
31 $this->optionData = array();
32 if (!empty($packagedOptions))
34 $this->hydrate($packagedOptions);
36 if (!empty($optionData))
38 $this->setOptions($optionData);
43 * Boolean option, accepts 0/1, true/false, yes/no.
44 * @param string $optionName
45 * @return \Workspace\UseCase\Options
47 public function optBoolean($optionName, $default = true)
49 $this->options[$optionName] = array(
57 * Option allowing selection of single item from list.
58 * @param string $optionName
59 * @param array $optionList
60 * @param integer $default
61 * @return \Workspace\UseCase\Options
63 public function optOneFromList($optionName, array $optionList, $default = null)
65 $this->options[$optionName] = array(
66 'type' => 'select-one',
67 'list' => $optionList,
74 * Option allowing selection of multiple items from list.
75 * @param string $optionName
76 * @param array $optionList
77 * @param array $defaults
78 * @return \Workspace\UseCase\Options
80 public function optManyFromList($optionName, array $optionList, array $defaults = array())
82 $this->options[$optionName] = array(
83 'type' => 'select-many',
84 'list' => $optionList,
85 'default' => $defaults
91 * Package options into an array.
94 public function package()
96 return $this->options;
100 * Hydrate options from package.
101 * @param array $packagedOptions
102 * @return \Workspace\Contract\Options
104 public function hydrate(array $packagedOptions)
106 $this->options = $packagedOptions;
112 * @param array $optionData
113 * @return \Workspace\UseCase\Options
115 public function setOptions(array $optionData)
117 foreach ($this->options as $option => $spec)
119 if (!isset($optionData[$option]))
121 $this->optionData[$option] = $spec['default'];
124 switch ($this->options[$option]['type'])
127 $this->optionData[$option] = (
128 1 == $optionData[$option]
129 || true === $optionData[$option]
130 || 'true' == $optionData[$option]
131 || 'yes' == $optionData[$option]
137 $this->optionData[$option] = isset($spec['list'][$optionData[$option]])
138 ? $optionData[$option]
142 if (is_array($optionData[$option]))
144 $this->optionData[$option] = array();
145 foreach ($optionData[$option] as $opt)
147 isset($spec['list'][$optionData[$option]])
148 && $this->optionData[$option][$opt] = $opt;
153 $this->optionData[$option] = $spec['default'];
162 * Retrieve filtered options.
165 public function getOptions()
167 return $this->optionData;