laravel['queue']->connection(); if (! $iron instanceof IronQueue) { throw new RuntimeException('Iron.io based queue must be default.'); } $iron->getIron()->updateQueue($this->argument('queue'), $this->getQueueOptions()); $this->line('Queue subscriber added: '.$this->argument('url').''); } /** * Get the queue options. * * @return array */ protected function getQueueOptions() { return [ 'push_type' => $this->getPushType(), 'subscribers' => $this->getSubscriberList(), ]; } /** * Get the push type for the queue. * * @return string */ protected function getPushType() { if ($this->option('type')) { return $this->option('type'); } try { return $this->getQueue()->push_type; } catch (Exception $e) { return 'multicast'; } } /** * Get the current subscribers for the queue. * * @return array */ protected function getSubscriberList() { $subscribers = $this->getCurrentSubscribers(); $url = $this->argument('url'); if (! Str::startsWith($url, ['http://', 'https://'])) { $url = $this->laravel['url']->to($url); } $subscribers[] = ['url' => $url]; return $subscribers; } /** * Get the current subscriber list. * * @return array */ protected function getCurrentSubscribers() { try { return $this->getQueue()->subscribers; } catch (Exception $e) { return []; } } /** * Get the queue information from Iron.io. * * @return object */ protected function getQueue() { if (isset($this->meta)) { return $this->meta; } return $this->meta = $this->laravel['queue']->getIron()->getQueue($this->argument('queue')); } /** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ['queue', InputArgument::REQUIRED, 'The name of Iron.io queue.'], ['url', InputArgument::REQUIRED, 'The URL to be subscribed.'], ]; } /** * Get the console command options. * * @return array */ protected function getOptions() { return [ ['type', null, InputOption::VALUE_OPTIONAL, 'The push type for the queue.'], ]; } }