code: private function parse20VersionConstraint(array $data)
      {
          static $dep20toOperatorMap = array('has' => '==', 'min' => '>=', 'max' => '<=', 'exclude' => '!=');
  
          $versions = array();
          $values = array_intersect_key($data, $dep20toOperatorMap);
          if (0 == count($values)) {
              return '*';
          }
          if (isset($values['min']) && isset($values['exclude']) && $data['min'] == $data['exclude']) {
              $versions[] = '>' . $this->parseVersion($values['min']);
          } elseif (isset($values['max']) && isset($values['exclude']) && $data['max'] == $data['exclude']) {
              $versions[] = '<' . $this->parseVersion($values['max']);
          } else {
              foreach ($values as $op => $version) {
                  if ('exclude' == $op && is_array($version)) {
                      foreach ($version as $versionPart) {
                          $versions[] = $dep20toOperatorMap[$op] . $this->parseVersion($versionPart);
                      }
                  } else {
                      $versions[] = $dep20toOperatorMap[$op] . $this->parseVersion($version);
                  }
              }
          }
  
          return implode(',', $versions);
      }
docs: Parses version constraint
  
  @param  array  $data array containing several 'min', 'max', 'has', 'exclude' and other keys.
  @return string