/**
  * @return array
  */
 public function crudAction()
 {
     try {
         $url = $this->request->get('_url');
         if (!$url) {
             throw new \PPA\Rest\Exception('_url is mast specific');
         }
         if (Analyzer::isSaving($url)) {
             return $this->save();
         }
         if (Analyzer::isDeleting($url)) {
             return $this->delete();
         }
         $params = Params::getMergeParams($this->request);
         $query = Operators::buildQuery($url, $params);
         $data = $query->execute();
         $this->securityManager->check(array('model' => $data, 'action' => CrudOperations::READ, 'modelName' => Analyzer::getModelName($url), 'params' => $params));
         if (!$data) {
             return array();
         }
         return $this->getFinallyFullData($data, $params, $url);
     } catch (\PPA\Rest\Acl\Exception $e) {
         $this->response->setStatusCode(401);
         return array('msg' => $e->getMessage(), 'url' => $url);
     } catch (\PPA\Rest\Exception $e) {
         $this->response->setStatusCode(500);
         return array('msg' => $e->getMessage(), 'trace' => $e->getTrace());
     }
 }
 public function testBuild()
 {
     foreach (self::$expectedUrls as $url => $expected) {
         $query = Operators::buildQuery($url, $expected['params']);
         $query->execute();
         $this->assertEquals($query->getSql()['sql'], $expected['sql'], '$query->getSql() returns expected value');
         $this->assertEquals($query->getBindParams(), $expected['prepareParams'], '$query->getBindParams() returns expected value');
     }
 }