/**
  * @author WN
  * @param DataSources $dataSources
  * @param Rule $rule
  * @return Value
  * @throws ProcessingException
  */
 private function fetchValue(DataSources $dataSources, Rule $rule)
 {
     $source = $dataSources->getDataSource($rule->getSource());
     if (!method_exists($source, $rule->getField())) {
         throw new ProcessingException('Field [' . $rule->getField() . '] not exists in source [' . $rule->getSource() . ']');
     }
     $value = $source->{$rule->getField()}();
     if (!$value instanceof Value) {
         throw new ProcessingException('Field [' . $rule->getField() . '] in source [' . $rule->getSource() . '] must be Value type');
     }
     return $value;
 }