lib/cosmos/script/extract.rb in cosmos-3.5.1 vs lib/cosmos/script/extract.rb in cosmos-3.5.2
- old
+ new
@@ -1,123 +1,123 @@
-# encoding: ascii-8bit
-
-# Copyright 2014 Ball Aerospace & Technologies Corp.
-# All Rights Reserved.
-#
-# This program is free software; you can modify and/or redistribute it
-# under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 3 with
-# attribution addendums as found in the LICENSE.txt
-
-module Cosmos
-
- module Extract
- SCANNING_REGULAR_EXPRESSION = %r{ (?:"(?:[^\\"]|\\.)*") | (?:'(?:[^\\']|\\.)*') | (?:\[.*\]) | \S+ }x #"
-
- private
-
- def add_cmd_parameter(keyword, value, cmd_params)
- quotes_removed = value.remove_quotes
- if value == quotes_removed
- cmd_params[keyword] = value.convert_to_value
- else
- cmd_params[keyword] = quotes_removed
- end
- end
-
- def extract_fields_from_cmd_text(text)
- split_string = text.split(/\s*with\s*/i, 2)
- raise "ERROR: 'with' must be followed by parameters : #{text}" if split_string.length == 1 and text =~ /\s*with\s*/i
-
- # Extract target_name and cmd_name
- first_half = split_string[0].split
- raise "ERROR: Both Target Name and Command Name must be given : #{text}" if first_half.length < 2
- raise "ERROR: Only Target Name and Command Name must be given before 'with' : #{text}" if first_half.length > 2
- target_name = first_half[0]
- cmd_name = first_half[1]
- cmd_params = {}
-
- if split_string.length == 2
- # Extract Command Parameters
- second_half = split_string[1].scan(SCANNING_REGULAR_EXPRESSION)
- keyword = nil
- value = nil
- comma = nil
- second_half.each do |item|
- unless keyword
- keyword = item
- next
- end
- unless value
- if item[-1..-1] == ','
- value = item[0..-2]
- comma = true
- else
- value = item
- next
- end
- end
- unless comma
- raise "Missing comma in command parameters: #{text}" if item != ','
- end
- add_cmd_parameter(keyword, value, cmd_params)
- keyword = nil
- value = nil
- comma = nil
- end
- if keyword
- if value
- add_cmd_parameter(keyword, value, cmd_params)
- else
- raise "Missing value for last command parameter: #{text}"
- end
- end
- end
-
- return [target_name, cmd_name, cmd_params]
- end
-
- def extract_fields_from_tlm_text(text)
- split_string = text.split
- raise "ERROR: Telemetry Item must be specified as 'TargetName PacketName ItemName' : #{text}" if split_string.length != 3
- target_name = split_string[0]
- packet_name = split_string[1]
- item_name = split_string[2]
- return [target_name, packet_name, item_name]
- end
-
- def extract_fields_from_set_tlm_text(text)
- error_msg = "ERROR: Set Telemetry Item must be specified as 'TargetName PacketName ItemName = Value' : #{text}"
- # We have to handle these cases:
- # set_tlm("TGT PKT ITEM='new item'")
- # set_tlm("TGT PKT ITEM = 'new item'")
- # set_tlm("TGT PKT ITEM= 'new item'")
- # set_tlm("TGT PKT ITEM ='new item'")
- split_string = text.split('=')
- raise error_msg if split_string.length < 2 || split_string[1].strip.empty?
- split_string = split_string[0].strip.split << split_string[1..-1].join('=').strip
- raise error_msg if split_string.length != 4 # Ensure tgt,pkt,item,value
- target_name = split_string[0]
- packet_name = split_string[1]
- item_name = split_string[2]
- value = split_string[3].strip.convert_to_value
- value = value.remove_quotes if String === value
- return [target_name, packet_name, item_name, value]
- end
-
- def extract_fields_from_check_text(text)
- split_string = text.split
- raise "ERROR: Check improperly specified: #{text}" if split_string.length < 3
- target_name = split_string[0]
- packet_name = split_string[1]
- item_name = split_string[2]
- comparison_to_eval = nil
- return [target_name, packet_name, item_name, comparison_to_eval] if split_string.length == 3
- raise "ERROR: Check improperly specified: #{text}" if split_string.length < 4
- comparison_to_eval = split_string[3..(split_string.length - 1)].join(" ")
- raise "ERROR: Use '==' instead of '=': #{text}" if split_string[3] == '='
- return [target_name, packet_name, item_name, comparison_to_eval]
- end
-
- end # module Extract
-
-end # module Cosmos
+# encoding: ascii-8bit
+
+# Copyright 2014 Ball Aerospace & Technologies Corp.
+# All Rights Reserved.
+#
+# This program is free software; you can modify and/or redistribute it
+# under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 3 with
+# attribution addendums as found in the LICENSE.txt
+
+module Cosmos
+
+ module Extract
+ SCANNING_REGULAR_EXPRESSION = %r{ (?:"(?:[^\\"]|\\.)*") | (?:'(?:[^\\']|\\.)*') | (?:\[.*\]) | \S+ }x #"
+
+ private
+
+ def add_cmd_parameter(keyword, value, cmd_params)
+ quotes_removed = value.remove_quotes
+ if value == quotes_removed
+ cmd_params[keyword] = value.convert_to_value
+ else
+ cmd_params[keyword] = quotes_removed
+ end
+ end
+
+ def extract_fields_from_cmd_text(text)
+ split_string = text.split(/\s*with\s*/i, 2)
+ raise "ERROR: 'with' must be followed by parameters : #{text}" if split_string.length == 1 and text =~ /\s*with\s*/i
+
+ # Extract target_name and cmd_name
+ first_half = split_string[0].split
+ raise "ERROR: Both Target Name and Command Name must be given : #{text}" if first_half.length < 2
+ raise "ERROR: Only Target Name and Command Name must be given before 'with' : #{text}" if first_half.length > 2
+ target_name = first_half[0]
+ cmd_name = first_half[1]
+ cmd_params = {}
+
+ if split_string.length == 2
+ # Extract Command Parameters
+ second_half = split_string[1].scan(SCANNING_REGULAR_EXPRESSION)
+ keyword = nil
+ value = nil
+ comma = nil
+ second_half.each do |item|
+ unless keyword
+ keyword = item
+ next
+ end
+ unless value
+ if item[-1..-1] == ','
+ value = item[0..-2]
+ comma = true
+ else
+ value = item
+ next
+ end
+ end
+ unless comma
+ raise "Missing comma in command parameters: #{text}" if item != ','
+ end
+ add_cmd_parameter(keyword, value, cmd_params)
+ keyword = nil
+ value = nil
+ comma = nil
+ end
+ if keyword
+ if value
+ add_cmd_parameter(keyword, value, cmd_params)
+ else
+ raise "Missing value for last command parameter: #{text}"
+ end
+ end
+ end
+
+ return [target_name, cmd_name, cmd_params]
+ end
+
+ def extract_fields_from_tlm_text(text)
+ split_string = text.split
+ raise "ERROR: Telemetry Item must be specified as 'TargetName PacketName ItemName' : #{text}" if split_string.length != 3
+ target_name = split_string[0]
+ packet_name = split_string[1]
+ item_name = split_string[2]
+ return [target_name, packet_name, item_name]
+ end
+
+ def extract_fields_from_set_tlm_text(text)
+ error_msg = "ERROR: Set Telemetry Item must be specified as 'TargetName PacketName ItemName = Value' : #{text}"
+ # We have to handle these cases:
+ # set_tlm("TGT PKT ITEM='new item'")
+ # set_tlm("TGT PKT ITEM = 'new item'")
+ # set_tlm("TGT PKT ITEM= 'new item'")
+ # set_tlm("TGT PKT ITEM ='new item'")
+ split_string = text.split('=')
+ raise error_msg if split_string.length < 2 || split_string[1].strip.empty?
+ split_string = split_string[0].strip.split << split_string[1..-1].join('=').strip
+ raise error_msg if split_string.length != 4 # Ensure tgt,pkt,item,value
+ target_name = split_string[0]
+ packet_name = split_string[1]
+ item_name = split_string[2]
+ value = split_string[3].strip.convert_to_value
+ value = value.remove_quotes if String === value
+ return [target_name, packet_name, item_name, value]
+ end
+
+ def extract_fields_from_check_text(text)
+ split_string = text.split
+ raise "ERROR: Check improperly specified: #{text}" if split_string.length < 3
+ target_name = split_string[0]
+ packet_name = split_string[1]
+ item_name = split_string[2]
+ comparison_to_eval = nil
+ return [target_name, packet_name, item_name, comparison_to_eval] if split_string.length == 3
+ raise "ERROR: Check improperly specified: #{text}" if split_string.length < 4
+ comparison_to_eval = split_string[3..(split_string.length - 1)].join(" ")
+ raise "ERROR: Use '==' instead of '=': #{text}" if split_string[3] == '='
+ return [target_name, packet_name, item_name, comparison_to_eval]
+ end
+
+ end # module Extract
+
+end # module Cosmos