| 
									
										
										
										
											2016-02-03 23:01:32 +08:00
										 |  |  | ## The contents of this file are subject to the Mozilla Public License | 
					
						
							|  |  |  | ## Version 1.1 (the "License"); you may not use this file except in | 
					
						
							|  |  |  | ## compliance with the License. You may obtain a copy of the License | 
					
						
							|  |  |  | ## at http://www.mozilla.org/MPL/ | 
					
						
							|  |  |  | ## | 
					
						
							|  |  |  | ## Software distributed under the License is distributed on an "AS IS" | 
					
						
							|  |  |  | ## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See | 
					
						
							|  |  |  | ## the License for the specific language governing rights and | 
					
						
							|  |  |  | ## limitations under the License. | 
					
						
							|  |  |  | ## | 
					
						
							|  |  |  | ## The Original Code is RabbitMQ. | 
					
						
							|  |  |  | ## | 
					
						
							|  |  |  | ## The Initial Developer of the Original Code is GoPivotal, Inc. | 
					
						
							|  |  |  | ## Copyright (c) 2007-2016 Pivotal Software, Inc.  All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  | defmodule Parser do | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 23:15:43 +08:00
										 |  |  |   # Input: A list of strings | 
					
						
							| 
									
										
										
										
											2016-05-05 18:05:11 +08:00
										 |  |  |   # Output: A 2-tuple of lists: one containing the command, | 
					
						
							| 
									
										
										
										
											2016-02-03 23:15:43 +08:00
										 |  |  |   #         one containing flagged options. | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |   def parse(command) do | 
					
						
							| 
									
										
										
										
											2016-05-05 04:21:18 +08:00
										 |  |  |     {options, cmd, invalid} = OptionParser.parse( | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |       command, | 
					
						
							| 
									
										
										
										
											2016-05-05 18:05:11 +08:00
										 |  |  |       switches: [node: :atom, quiet: :boolean, timeout: :integer, | 
					
						
							|  |  |  |                  online: :boolean, offline: :boolean], | 
					
						
							| 
									
										
										
										
											2016-05-20 00:28:27 +08:00
										 |  |  |       aliases: [p: :vhost, n: :node, q: :quiet, t: :timeout] | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-05-05 04:21:18 +08:00
										 |  |  |     {clear_on_empty_command(cmd), options_map(options, invalid)} | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-05 04:21:18 +08:00
										 |  |  |   defp options_map(opts, invalid) do | 
					
						
							|  |  |  |     opts ++ invalid | 
					
						
							|  |  |  |     |> Map.new | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-02-03 23:15:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 05:26:10 +08:00
										 |  |  |   # Discards entire command if first command term is empty. | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |   defp clear_on_empty_command(command_args) do | 
					
						
							|  |  |  |     case command_args do | 
					
						
							|  |  |  |       [] -> [] | 
					
						
							|  |  |  |       [""|_] -> [] | 
					
						
							| 
									
										
										
										
											2016-03-04 00:06:30 +08:00
										 |  |  |       [_head|_] -> command_args | 
					
						
							| 
									
										
										
										
											2016-02-03 02:54:36 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |