コード例 #1
0
ファイル: SingularRead.php プロジェクト: torchline/frest
 /**
  * @param FREST\Resource $resource
  * @throws FREST\Exception
  */
 public function setupWithResource($resource)
 {
     parent::setupWithResource($resource);
     // Resource ID
     if (isset($this->resourceID)) {
         /** @var Setting\Field $fieldSetting */
         $this->resource->getIDField($fieldSetting);
         $idType = $fieldSetting->getVariableType();
         $parsedResourceID = Type\Variable::castValue($this->resourceID, $idType);
         if (!isset($parsedResourceID)) {
             $typeString = Type\Variable::getString($idType);
             throw new FREST\Exception(FREST\Exception::InvalidType, "Resource ID needs to be of type '{$typeString}' but was supplied with '{$this->resourceID}'");
         }
         $this->resourceID = $parsedResourceID;
     }
 }
コード例 #2
0
ファイル: Request.php プロジェクト: torchline/frest
 /**
  * @throws FREST\Exception
  */
 protected function setupResourceFunction()
 {
     $resourceFunctions = $this->resource->getResourceFunctions();
     // check if valid Func name
     if (!isset($resourceFunctions) || !isset($resourceFunctions[$this->resourceFunctionName])) {
         throw new FREST\Exception(FREST\Exception::ResourceFunctionDoesntExist, "Function name: '{$this->resourceFunctionName}'");
     }
     /** @var Func\Resource $resourceFunction */
     $resourceFunction = $resourceFunctions[$this->resourceFunctionName];
     $resourceFunctionParameters = $resourceFunction->getParameters();
     // check method
     $requiredMethod = $resourceFunction->getMethod();
     $currentMethod = $this->frest->getMethod();
     if ($requiredMethod != $currentMethod) {
         $currentMethodString = Type\Method::getString($currentMethod);
         $requiredMethodString = Type\Method::getString($requiredMethod);
         throw new FREST\Exception(FREST\Exception::MismatchingResourceFunctionMethod, "Requires '{$requiredMethodString}' but using '{$currentMethodString}'");
     }
     // check for invalid parameters and build parameter list for Func
     $functionParameters = array();
     foreach ($this->parameters as $parameterName => $value) {
         $isValidMiscParam = isset($this->miscParameters[$parameterName]);
         if (!$isValidMiscParam) {
             if (!isset($resourceFunctionParameters[$parameterName])) {
                 throw new FREST\Exception(FREST\Exception::InvalidFunctionParameter, "Parameter name: '{$parameterName}'");
             }
             $functionParameters[$parameterName] = $value;
         }
     }
     if (isset($resourceFunctionParameters) && count($resourceFunctionParameters) > 0) {
         // check for all required parameters
         /** @var Func\FunctionParam $parameter */
         $missingParameterNames = array();
         foreach ($resourceFunctionParameters as $parameterName => $parameter) {
             // check type
             if (isset($functionParameters[$parameterName])) {
                 $variableType = $parameter->getVariableType();
                 $value = $functionParameters[$parameterName];
                 $castedValue = Type\Variable::castValue($value, $variableType);
                 if (!isset($castedValue)) {
                     $typeString = Type\Variable::getString($variableType);
                     throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting parameter '{$parameterName}' to be of type '{$typeString}' but received '{$value}'");
                 }
                 $functionParameters[$parameterName] = $castedValue;
             } else {
                 if ($parameter->getRequired()) {
                     $missingParameterNames[] = $parameterName;
                 }
             }
         }
         if (count($missingParameterNames) > 0) {
             $missingString = implode(', ', $missingParameterNames);
             throw new FREST\Exception(FREST\Exception::MissingRequiredFunctionParameter, "Parameter name: '{$missingString}'");
         }
     }
     // Check for Func implementation existence
     if (!method_exists($this->resource, $this->resourceFunctionName)) {
         throw new FREST\Exception(FREST\Exception::ResourceFunctionMissing, "Function name: '{$this->resourceFunctionName}', resource: '{$this->resource->getName()}'");
     }
     if ($resourceFunction->getRequiresResourceID()) {
         $functionParameters['resourceID'] = $this->resourceID;
     }
     $this->resourceFunction = $resourceFunction;
     $this->resourceFunctionParameters = $functionParameters;
 }
コード例 #3
0
ファイル: Create.php プロジェクト: torchline/frest
 /**
  * @param FREST\Resource $resource
  * @return array
  * @throws FREST\Exception
  */
 private function generateCreateSpecs($resource)
 {
     $createSpecs = array();
     $createSettings = $resource->getCreateSettings();
     if (isset($this->resourceID)) {
         /** @var Setting\Field $idFieldSetting */
         $idFieldName = $this->resource->getIDField($idFieldSetting);
         $idAlias = $this->resource->getAliasForField($idFieldName);
         $idCreateSpec = new Spec\Create($idAlias, $idFieldName, $this->resourceID, $idFieldSetting->getVariableType());
         $createSpecs[$idAlias] = $idCreateSpec;
     }
     /** @var Setting\Create $createSetting */
     foreach ($createSettings as $createSetting) {
         $alias = $createSetting->getAlias();
         if (isset($this->parameters[$alias])) {
             $value = $this->parameters[$alias];
             $field = $resource->getFieldForAlias($alias);
             $fieldSetting = $resource->getFieldSettingForAlias($alias);
             $variableType = $fieldSetting->getVariableType();
             // Type checking
             $castedValue = Type\Variable::castValue($value, $variableType);
             if (!isset($castedValue)) {
                 $typeString = Type\Variable::getString($variableType);
                 throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting '{$alias}' to be of type '{$typeString}' but received '{$value}'");
             }
             // Condition Func
             $conditionFunction = $createSetting->getConditionFunction();
             if (isset($conditionFunction)) {
                 if (!method_exists($resource, $conditionFunction)) {
                     throw new FREST\Exception(FREST\Exception::ConditionFunctionMissing, "Function name: '{$conditionFunction}', resource: '{$this->resource->getName()}'");
                 }
                 $isValueValid = $resource->{$conditionFunction}($castedValue);
                 if (!$isValueValid) {
                     throw new FREST\Exception(FREST\Exception::InvalidFieldValue, "Field: '{$alias}'");
                 }
             }
             // Filter Func
             $filterFunction = $createSetting->getFilterFunction();
             if (isset($filterFunction)) {
                 if (!method_exists($resource, $filterFunction)) {
                     throw new FREST\Exception(FREST\Exception::FilterFunctionMissing, "Function name: '{$filterFunction}', resource: '{$resource->getName()}'");
                 }
                 $castedValue = $resource->{$filterFunction}($castedValue);
             }
             $createSpec = new Spec\Create($alias, $field, $castedValue, $variableType);
             $createSpecs[$alias] = $createSpec;
         } else {
             if ($createSetting->getRequired()) {
                 // get list of all parameters required but not set
                 $missingParameters = array();
                 /** @var Setting\Create $aCreateSetting */
                 foreach ($createSettings as $aCreateSetting) {
                     $alias = $aCreateSetting->getAlias();
                     if (!isset($this->parameters[$alias]) && $aCreateSetting->getRequired()) {
                         $missingParameters[] = $alias;
                     }
                 }
                 $missingParametersString = implode(', ', $missingParameters);
                 throw new FREST\Exception(FREST\Exception::MissingRequiredParams, "Missing parameters: {$missingParametersString}");
             }
         }
     }
     if (count($createSpecs) > 0) {
         return $createSpecs;
     }
     return NULL;
 }
コード例 #4
0
ファイル: PluralRead.php プロジェクト: torchline/frest
 /**
  * @param mixed $valueToCheck
  * @param int $valueVariableType
  * @param array $functions
  * @param mixed $parsedValue
  * @param int $parsedValueVariableType
  * 
  * @return Func\Condition
  * @throws FREST\Exception
  */
 private function checkForFunctions($valueToCheck, $valueVariableType, $functions, &$parsedValue, &$parsedValueVariableType)
 {
     $functionUsed = NULL;
     /** @var Func\Condition $function */
     foreach ($functions as $function) {
         $functionName = $function->getName();
         $functionParameters = $function->getParameters();
         $functionReplacements = $function->getReplacements();
         /** @var Func\FunctionParam $firstParameter */
         $firstParameter = $functionParameters[0];
         $beginsWithFunctionOpen = substr_compare("{$functionName}(", $valueToCheck, 0, strlen($functionName) + 1, TRUE) === 0;
         $endsWithFunctionClose = substr($valueToCheck, -1) === ')';
         if ($beginsWithFunctionOpen && $endsWithFunctionClose) {
             $functionUsed = $function;
             $innerValue = trim(substr($valueToCheck, strlen($functionName) + 1, -1));
             if (strlen($innerValue) == 0) {
                 throw new FREST\Exception(FREST\Exception::InvalidValue, "Empty value specified in Func '{$functionName}'");
             }
             if (isset($functionReplacements)) {
                 foreach ($functionReplacements as $old => $new) {
                     $innerValue = str_replace($old, $new, $innerValue);
                 }
             }
             $valuesToConcatenate = NULL;
             $innerValueVariableType = Type\Variable::stricterVariableType($firstParameter->getVariableType(), $valueVariableType);
             $castedValue = Type\Variable::castValue($innerValue, $innerValueVariableType);
             if (!isset($castedValue)) {
                 $variableTypeString = Type\Variable::getString($innerValueVariableType);
                 throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting value for Func '{$functionName}' to be of type '{$variableTypeString}' but received '{$innerValue}'");
             }
             $parsedValue = $castedValue;
             $parsedValueVariableType = $innerValueVariableType;
             break;
             // found use of Func already, don't keep checking
         }
     }
     return $functionUsed;
 }
コード例 #5
0
ファイル: Update.php プロジェクト: torchline/frest
 /**
  * @param FREST\Resource $resource
  * @return array
  * @throws FREST\Exception
  */
 private function generateUpdateSpecs($resource)
 {
     $updateSpecs = array();
     $updateSettings = $resource->getUpdateSettings();
     /** @var Setting\Update $updateSetting */
     foreach ($updateSettings as $updateSetting) {
         $alias = $updateSetting->getAlias();
         if (isset($this->parameters[$alias])) {
             $value = $this->parameters[$alias];
             $field = $resource->getFieldForAlias($alias);
             $fieldSetting = $resource->getFieldSettingForAlias($alias);
             $variableType = $fieldSetting->getVariableType();
             // Type checking
             $castedValue = Type\Variable::castValue($value, $variableType);
             if (!isset($castedValue)) {
                 $typeString = Type\Variable::getString($variableType);
                 throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting '{$alias}' to be of type '{$typeString}' but received '{$value}'");
             }
             // Condition Func
             $conditionFunction = $updateSetting->getConditionFunction();
             if (isset($conditionFunction)) {
                 if (!method_exists($resource, $conditionFunction)) {
                     throw new FREST\Exception(FREST\Exception::ConditionFunctionMissing, "Function name: '{$conditionFunction}', resource: '{$resource->getName()}'");
                 }
                 $isValueValid = $resource->{$conditionFunction}($castedValue);
                 if (!$isValueValid) {
                     throw new FREST\Exception(FREST\Exception::InvalidFieldValue, "Field: '{$alias}'");
                 }
             }
             // Filter Func
             $filterFunction = $updateSetting->getFilterFunction();
             if (isset($filterFunction)) {
                 if (!method_exists($resource, $filterFunction)) {
                     throw new FREST\Exception(FREST\Exception::FilterFunctionMissing, "Function name: '{$filterFunction}', resource: '{$resource->getName()}'");
                 }
                 $castedValue = $resource->{$filterFunction}($castedValue);
             }
             $updateSpec = new Spec\Update($alias, $field, $castedValue, $variableType);
             $updateSpecs[$alias] = $updateSpec;
         }
     }
     return $updateSpecs;
 }