protected function parseDocuments()
    {
        $this->apis = array(
            3        => Api::build('Meetup', 3, 'Meetup API v3 methods'),
            2        => Api::build('Meetup', 2, 'Meetup API v2 methods'),
            1        => Api::build('Meetup', 1, 'Meetup API v1 methods'),
            'stream' => Api::build('Meetup', 'stream', 'Meetup API Stream methods'),
        );

        $this->output->writeln('Downloading data from API docs ...');
        $data = $this->getApiData();

        /** @var TableHelper $nameConversionTable */
        $nameConversionTable = $this->getHelper('table');
        $nameConversionTable->setHeaders(array('v', 'Docs Name', 'Method', 'Path', 'Final Method Name'));

        $this->output->writeln('Parsing data from API docs ...');
        foreach ($data['docs'] as $definition) {
            $operation = Operation::createFromApiJsonDocs($definition);

            if ($operation === null) {
                continue;
            }

            $nameConversionTable->addRow(array(
                $operation->version,
                arr::get('name', $definition),
                arr::get('http_method', $definition),
                arr::get('path', $definition),
                $operation->name,
            ));

            $this->apis[$operation->version]->addOperation($operation);
        }

        DuplicateResolver::processApis($this->apis);

        if ($this->input->getOption('debug-names')) {
            $nameConversionTable->render($this->output);
        }
    }