cosmos 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +195 -0
  3. data/README.md +3 -3
  4. data/data/crc.txt +52 -52
  5. data/lib/cosmos.rb +1 -1
  6. data/lib/cosmos/core_ext/time.rb +11 -9
  7. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +0 -2
  8. data/lib/cosmos/gui/dialogs/about_dialog.rb +2 -2
  9. data/lib/cosmos/gui/dialogs/exception_dialog.rb +2 -2
  10. data/lib/cosmos/gui/dialogs/progress_dialog.rb +11 -5
  11. data/lib/cosmos/gui/dialogs/splash.rb +32 -10
  12. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  13. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +2 -2
  14. data/lib/cosmos/gui/qt.rb +22 -22
  15. data/lib/cosmos/io/json_drb.rb +4 -4
  16. data/lib/cosmos/io/json_rpc.rb +21 -21
  17. data/lib/cosmos/packet_logs/packet_log_writer.rb +18 -20
  18. data/lib/cosmos/packets/commands.rb +8 -6
  19. data/lib/cosmos/packets/limits.rb +3 -2
  20. data/lib/cosmos/packets/packet.rb +14 -11
  21. data/lib/cosmos/packets/parsers/limits_parser.rb +1 -1
  22. data/lib/cosmos/packets/parsers/macro_parser.rb +4 -4
  23. data/lib/cosmos/packets/parsers/state_parser.rb +1 -1
  24. data/lib/cosmos/packets/structure.rb +2 -2
  25. data/lib/cosmos/packets/telemetry.rb +5 -4
  26. data/lib/cosmos/script/script.rb +6 -6
  27. data/lib/cosmos/streams/tcpip_socket_stream.rb +2 -1
  28. data/lib/cosmos/streams/template_stream_protocol.rb +1 -1
  29. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +1 -1
  30. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +5 -8
  31. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +4 -3
  32. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -3
  33. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +15 -11
  34. data/lib/cosmos/tools/data_viewer/data_viewer.rb +1 -1
  35. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +2 -2
  36. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +2 -2
  37. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +0 -2
  38. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +1 -1
  39. data/lib/cosmos/tools/replay/replay.rb +2 -2
  40. data/lib/cosmos/tools/script_runner/script_audit.rb +1 -1
  41. data/lib/cosmos/tools/script_runner/script_runner.rb +1 -1
  42. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +3 -7
  43. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  44. data/lib/cosmos/tools/test_runner/results_writer.rb +1 -1
  45. data/lib/cosmos/tools/test_runner/test_runner.rb +2 -2
  46. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +2 -1
  47. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  48. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +1 -0
  49. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +1 -0
  50. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +1 -0
  51. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +3 -3
  52. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +1 -3
  53. data/lib/cosmos/top_level.rb +2 -6
  54. data/lib/cosmos/utilities/ruby_lex_utils.rb +1 -1
  55. data/lib/cosmos/version.rb +5 -5
  56. data/lib/cosmos/win32/win32_main.rb +11 -7
  57. data/spec/ccsds/ccsds_packet_spec.rb +28 -28
  58. data/spec/ccsds/ccsds_parser_spec.rb +27 -27
  59. data/spec/config/config_parser_spec.rb +88 -88
  60. data/spec/conversions/conversion_spec.rb +3 -3
  61. data/spec/conversions/generic_conversion_spec.rb +9 -9
  62. data/spec/conversions/new_packet_log_conversion_spec.rb +4 -4
  63. data/spec/conversions/polynomial_conversion_spec.rb +7 -7
  64. data/spec/conversions/processor_conversion_spec.rb +9 -9
  65. data/spec/conversions/received_count_conversion_spec.rb +7 -7
  66. data/spec/conversions/received_time_formatted_conversion_spec.rb +9 -9
  67. data/spec/conversions/received_time_seconds_conversion_spec.rb +9 -9
  68. data/spec/conversions/segmented_polynomial_conversion_spec.rb +11 -11
  69. data/spec/conversions/unix_time_formatted_conversion_spec.rb +13 -13
  70. data/spec/conversions/unix_time_seconds_conversion_spec.rb +13 -13
  71. data/spec/core_ext/array_spec.rb +76 -76
  72. data/spec/core_ext/class_spec.rb +3 -3
  73. data/spec/core_ext/cosmos_io_spec.rb +16 -16
  74. data/spec/core_ext/exception_spec.rb +19 -19
  75. data/spec/core_ext/file_spec.rb +16 -16
  76. data/spec/core_ext/hash_spec.rb +3 -3
  77. data/spec/core_ext/io_spec.rb +2 -2
  78. data/spec/core_ext/kernel_spec.rb +2 -2
  79. data/spec/core_ext/math_spec.rb +43 -43
  80. data/spec/core_ext/matrix_spec.rb +22 -22
  81. data/spec/core_ext/objectspace_spec.rb +6 -6
  82. data/spec/core_ext/range_spec.rb +2 -2
  83. data/spec/core_ext/socket_spec.rb +4 -4
  84. data/spec/core_ext/string_spec.rb +67 -67
  85. data/spec/core_ext/stringio_spec.rb +2 -2
  86. data/spec/core_ext/time_spec.rb +82 -82
  87. data/spec/gui/line_graph/line_clip_spec.rb +34 -34
  88. data/spec/interfaces/interface_spec.rb +46 -46
  89. data/spec/interfaces/linc_interface_spec.rb +26 -26
  90. data/spec/interfaces/serial_interface_spec.rb +16 -16
  91. data/spec/interfaces/simulated_target_interface_spec.rb +21 -21
  92. data/spec/interfaces/stream_interface_spec.rb +22 -22
  93. data/spec/interfaces/tcpip_client_interface_spec.rb +14 -14
  94. data/spec/interfaces/tcpip_server_interface_spec.rb +41 -41
  95. data/spec/interfaces/udp_interface_spec.rb +46 -46
  96. data/spec/io/buffered_file_spec.rb +50 -50
  97. data/spec/io/io_multiplexer_spec.rb +9 -9
  98. data/spec/io/json_drb_object_spec.rb +7 -7
  99. data/spec/io/json_drb_spec.rb +55 -55
  100. data/spec/io/json_rpc_spec.rb +68 -68
  101. data/spec/io/raw_logger_pair_spec.rb +28 -28
  102. data/spec/io/raw_logger_spec.rb +22 -22
  103. data/spec/io/serial_driver_spec.rb +3 -3
  104. data/spec/io/stderr_spec.rb +2 -2
  105. data/spec/io/stdout_spec.rb +2 -2
  106. data/spec/io/tcpip_server_spec.rb +62 -62
  107. data/spec/io/udp_sockets_spec.rb +19 -19
  108. data/spec/io/win32_serial_driver_spec.rb +10 -10
  109. data/spec/packet_logs/meta_packet_log_writer_spec.rb +32 -32
  110. data/spec/packet_logs/packet_log_reader_spec.rb +138 -138
  111. data/spec/packet_logs/packet_log_writer_pair_spec.rb +3 -3
  112. data/spec/packet_logs/packet_log_writer_spec.rb +26 -26
  113. data/spec/packets/binary_accessor_spec.rb +672 -672
  114. data/spec/packets/commands_spec.rb +123 -123
  115. data/spec/packets/limits_response_spec.rb +1 -1
  116. data/spec/packets/limits_spec.rb +69 -69
  117. data/spec/packets/packet_config_spec.rb +93 -93
  118. data/spec/packets/packet_item_limits_spec.rb +46 -46
  119. data/spec/packets/packet_item_spec.rb +108 -108
  120. data/spec/packets/packet_spec.rb +364 -348
  121. data/spec/packets/parsers/format_string_parser_spec.rb +13 -13
  122. data/spec/packets/parsers/limits_parser_spec.rb +8 -8
  123. data/spec/packets/parsers/limits_response_parser_spec.rb +9 -9
  124. data/spec/packets/parsers/macro_parser_spec.rb +34 -6
  125. data/spec/packets/parsers/packet_parser_spec.rb +6 -6
  126. data/spec/packets/parsers/processor_parser_spec.rb +7 -7
  127. data/spec/packets/parsers/state_parser_spec.rb +23 -23
  128. data/spec/packets/structure_item_spec.rb +62 -62
  129. data/spec/packets/structure_spec.rb +183 -183
  130. data/spec/packets/telemetry_spec.rb +174 -174
  131. data/spec/processors/new_packet_log_processor_spec.rb +4 -4
  132. data/spec/processors/processor_spec.rb +9 -9
  133. data/spec/processors/statistics_processor_spec.rb +21 -21
  134. data/spec/processors/watermark_processor_spec.rb +12 -12
  135. data/spec/script/script_spec.rb +158 -158
  136. data/spec/spec_helper.rb +44 -13
  137. data/spec/streams/burst_stream_protocol_spec.rb +8 -8
  138. data/spec/streams/fixed_stream_protocol_spec.rb +26 -26
  139. data/spec/streams/length_stream_protocol_spec.rb +27 -27
  140. data/spec/streams/preidentified_stream_protocol_spec.rb +25 -25
  141. data/spec/streams/serial_stream_spec.rb +19 -19
  142. data/spec/streams/stream_protocol_spec.rb +52 -52
  143. data/spec/streams/stream_spec.rb +1 -1
  144. data/spec/streams/tcpip_client_stream_spec.rb +7 -7
  145. data/spec/streams/tcpip_socket_stream_spec.rb +84 -49
  146. data/spec/streams/template_stream_protocol_spec.rb +17 -17
  147. data/spec/streams/terminated_stream_protocol_spec.rb +19 -19
  148. data/spec/system/system_spec.rb +95 -95
  149. data/spec/system/target_spec.rb +32 -32
  150. data/spec/tools/cmd_tlm_server/api_spec.rb +386 -386
  151. data/spec/tools/cmd_tlm_server/background_task_spec.rb +3 -3
  152. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +8 -8
  153. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +57 -57
  154. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +85 -85
  155. data/spec/tools/cmd_tlm_server/commanding_spec.rb +11 -11
  156. data/spec/tools/cmd_tlm_server/connections_spec.rb +23 -23
  157. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +57 -57
  158. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +32 -32
  159. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +17 -17
  160. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +15 -15
  161. data/spec/tools/cmd_tlm_server/routers_spec.rb +36 -36
  162. data/spec/top_level/top_level_spec.rb +60 -60
  163. data/spec/utilities/crc_spec.rb +6 -6
  164. data/spec/utilities/csv_spec.rb +13 -13
  165. data/spec/utilities/logger_spec.rb +20 -20
  166. data/spec/utilities/message_log_spec.rb +13 -13
  167. data/spec/utilities/quaternion_spec.rb +30 -30
  168. data/spec/utilities/ruby_lex_utils_spec.rb +14 -14
  169. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  170. data/test/benchmarks/gsub_benchmark.rb +114 -0
  171. data/test/performance/PACKETS.bat +1 -0
  172. data/test/performance/Rakefile +77 -0
  173. data/test/performance/THREADS.bat +1 -0
  174. data/test/performance/config/data/attitude.bin +0 -0
  175. data/test/performance/config/data/crc.txt +206 -0
  176. data/test/performance/config/data/diamond.STL +58 -0
  177. data/test/performance/config/data/groundoff.gif +0 -0
  178. data/test/performance/config/data/groundon.gif +0 -0
  179. data/test/performance/config/data/hselectoff.gif +0 -0
  180. data/test/performance/config/data/hselecton.gif +0 -0
  181. data/test/performance/config/data/hswitchoff.gif +0 -0
  182. data/test/performance/config/data/hswitchon.gif +0 -0
  183. data/test/performance/config/data/meta_init.txt +4 -0
  184. data/test/performance/config/data/position.bin +0 -0
  185. data/test/performance/config/data/poweroff.gif +0 -0
  186. data/test/performance/config/data/poweron.gif +0 -0
  187. data/test/performance/config/data/satellite.gif +0 -0
  188. data/test/performance/config/data/tada.wav +0 -0
  189. data/test/performance/config/data/vswitchoff.gif +0 -0
  190. data/test/performance/config/data/vswitchon.gif +0 -0
  191. data/test/performance/config/system/system_packets.txt +39 -0
  192. data/test/performance/config/system/system_threads.txt +59 -0
  193. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  194. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  195. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  196. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  197. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  198. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  199. data/test/performance/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +17 -0
  200. data/test/performance/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +18 -0
  201. data/test/performance/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  202. data/test/performance/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
  203. data/test/performance/config/targets/EXAMPLE/target.txt +7 -0
  204. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  205. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +34 -0
  206. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  207. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  208. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  209. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  210. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  211. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  212. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  213. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  214. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  215. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  216. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  217. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  218. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  219. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  220. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  221. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  222. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  223. data/test/performance/config/tools/launcher/launcher_packets.txt +29 -0
  224. data/test/performance/config/tools/launcher/launcher_threads.txt +70 -0
  225. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  226. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  227. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  228. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  229. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  230. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  231. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  232. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  233. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  234. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  235. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  236. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  237. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  238. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  239. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  240. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  241. data/test/performance/lib/example_background_task.rb +57 -0
  242. data/test/performance/lib/example_target.rb +120 -0
  243. data/test/performance/lib/scpi_target.rb +74 -0
  244. data/test/performance/lib/user_version.rb +3 -0
  245. data/test/performance/outputs/handbooks/README.txt +1 -0
  246. data/test/performance/outputs/logs/README.txt +1 -0
  247. data/test/performance/outputs/saved_config/README.txt +1 -0
  248. data/test/performance/outputs/tables/README.txt +1 -0
  249. data/test/performance/outputs/tmp/README.txt +1 -0
  250. data/test/performance/procedures/checks.rb +11 -0
  251. data/test/performance/procedures/clear_util.rb +7 -0
  252. data/test/performance/procedures/collect.rb +18 -0
  253. data/test/performance/procedures/collect_util.rb +14 -0
  254. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  255. data/test/performance/procedures/disconnect.rb +29 -0
  256. data/test/performance/procedures/example_test.rb +182 -0
  257. data/test/performance/procedures/plot_test.rb +8 -0
  258. data/test/performance/procedures/procedure.rb +3 -0
  259. data/test/performance/procedures/run_example_test.rb +3 -0
  260. data/test/performance/procedures/test.rb +51 -0
  261. data/test/performance/tools/CmdExtractor +14 -0
  262. data/test/performance/tools/CmdExtractor.bat +59 -0
  263. data/test/performance/tools/CmdSender +14 -0
  264. data/test/performance/tools/CmdSender.bat +59 -0
  265. data/test/performance/tools/CmdTlmServer +16 -0
  266. data/test/performance/tools/CmdTlmServer.bat +59 -0
  267. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  268. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  269. data/test/performance/tools/DataViewer +14 -0
  270. data/test/performance/tools/DataViewer.bat +59 -0
  271. data/test/performance/tools/ExampleTarget +14 -0
  272. data/test/performance/tools/ExampleTarget.bat +59 -0
  273. data/test/performance/tools/HandbookCreator +14 -0
  274. data/test/performance/tools/HandbookCreator.bat +61 -0
  275. data/test/performance/tools/Launcher +14 -0
  276. data/test/performance/tools/Launcher.bat +59 -0
  277. data/test/performance/tools/LimitsMonitor +14 -0
  278. data/test/performance/tools/LimitsMonitor.bat +59 -0
  279. data/test/performance/tools/OpenGLBuilder +14 -0
  280. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  281. data/test/performance/tools/PacketViewer +14 -0
  282. data/test/performance/tools/PacketViewer.bat +59 -0
  283. data/test/performance/tools/Replay +14 -0
  284. data/test/performance/tools/Replay.bat +59 -0
  285. data/test/performance/tools/ScpiTarget +14 -0
  286. data/test/performance/tools/ScpiTarget.bat +59 -0
  287. data/test/performance/tools/ScriptRunner +14 -0
  288. data/test/performance/tools/ScriptRunner.bat +59 -0
  289. data/test/performance/tools/TableManager +14 -0
  290. data/test/performance/tools/TableManager.bat +59 -0
  291. data/test/performance/tools/TestRunner +14 -0
  292. data/test/performance/tools/TestRunner.bat +59 -0
  293. data/test/performance/tools/TlmExtractor +14 -0
  294. data/test/performance/tools/TlmExtractor.bat +59 -0
  295. data/test/performance/tools/TlmGrapher +14 -0
  296. data/test/performance/tools/TlmGrapher.bat +59 -0
  297. data/test/performance/tools/TlmViewer +14 -0
  298. data/test/performance/tools/TlmViewer.bat +59 -0
  299. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  300. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  301. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  302. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  303. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  304. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  305. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  306. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  307. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  308. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  309. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  310. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  311. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  312. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  313. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  314. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  315. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  316. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  317. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  318. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  319. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  320. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  321. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  322. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  323. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  324. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  325. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  326. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  327. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  328. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  329. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  330. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  331. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  332. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  333. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  334. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  335. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  336. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  337. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  338. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  339. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  340. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  341. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  342. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  343. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  344. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  345. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  346. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  347. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  348. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  349. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  350. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  351. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  352. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  353. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  354. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  355. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  356. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  357. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  358. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  359. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  360. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  361. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  362. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  363. data/test/performance/userpath.txt +1 -0
  364. metadata +197 -2
@@ -36,7 +36,7 @@ else
36
36
  end
37
37
  require 'cosmos/ext/platform'
38
38
 
39
- # Remove warning about dl deprecation
39
+ # Remove warning about dl deprecation in Ruby 2.0 and 2.1
40
40
  saved_verbose = $VERBOSE; $VERBOSE = nil
41
41
  begin
42
42
  require 'dl'
@@ -78,27 +78,27 @@ class Time
78
78
  dd, hh = hh.divmod(24)
79
79
  if dd != 0
80
80
  if dd == 1
81
- result += "%d day, " % dd
81
+ result << "%d day, " % dd
82
82
  else
83
- result += "%d days, " % dd
83
+ result << "%d days, " % dd
84
84
  end
85
85
  end
86
86
  if hh != 0
87
87
  if hh == 1
88
- result += "%d hour, " % hh
88
+ result << "%d hour, " % hh
89
89
  else
90
- result += "%d hours, " % hh
90
+ result << "%d hours, " % hh
91
91
  end
92
92
  end
93
93
  if mm != 0
94
94
  if mm == 1
95
- result += "%d minute, " % mm
95
+ result << "%d minute, " % mm
96
96
  else
97
- result += "%d minutes, " % mm
97
+ result << "%d minutes, " % mm
98
98
  end
99
99
  end
100
100
  if ss > 0
101
- result += "%.2f seconds" % ss
101
+ result << "%.2f seconds" % ss
102
102
  else
103
103
  result = result[0..-3]
104
104
  end
@@ -353,14 +353,16 @@ class Time
353
353
  # @param ms [Integer] CCSDS milliseconds
354
354
  # @param us [Integer] CCSDS microseconds
355
355
  # @param sec_epoch_jd [Float] Epoch to convert seconds from as a julian date
356
- def self.ccsds2sec (day, ms, us, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
356
+ # @return [Float] The number of seconds from the given epoch to the given
357
+ # CCSDS day, milliseconds, and microseconds.
358
+ def self.ccsds2sec(day, ms, us, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
357
359
  (self.ccsds2julian(day, ms, us) - sec_epoch_jd) * SEC_PER_DAY_FLOAT
358
360
  end
359
361
 
360
362
  # @param seconds [Float]
361
363
  # @param sec_epoch_jd [Float] Epoch to of seconds value
362
364
  # @return [Array<day, ms, us>] CCSDS date
363
- def self.sec2ccsds (sec, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
365
+ def self.sec2ccsds(sec, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
364
366
  self.julian2ccsds((sec / SEC_PER_DAY_FLOAT) + sec_epoch_jd)
365
367
  end
366
368
 
@@ -134,7 +134,6 @@ module Cosmos
134
134
  @item_changed_callback = nil
135
135
  @select_button_callback = nil
136
136
  @support_latest = support_latest
137
- update()
138
137
  end
139
138
 
140
139
  # Update items
@@ -249,7 +248,6 @@ module Cosmos
249
248
  def update_targets
250
249
  @target_combobox.clearItems()
251
250
  target_names = System.telemetry.target_names
252
- target_names.delete('UNKNOWN')
253
251
 
254
252
  # Delete targets with only hidden packets
255
253
  target_names_to_delete = []
@@ -67,9 +67,9 @@ module Cosmos
67
67
  configurable_about_text = File.read(filename)
68
68
  configurable_about_text.gsub!("\r", '') unless Kernel.is_windows?
69
69
  if Kernel.is_windows?
70
- configurable_about_text += "\n" + "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width + 16} height:#{parent.frameGeometry.height + 38}\n\n" + ABOUT_COSMOS
70
+ configurable_about_text << "\n" + "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width + 16} height:#{parent.frameGeometry.height + 38}\n\n" + ABOUT_COSMOS
71
71
  else
72
- configurable_about_text += "\n" + "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width} height:#{parent.frameGeometry.height}\n\n" + ABOUT_COSMOS end
72
+ configurable_about_text << "\n" + "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width} height:#{parent.frameGeometry.height}\n\n" + ABOUT_COSMOS end
73
73
 
74
74
  # Set the application about text
75
75
  about = Qt::Label.new(about_string + "\n\n" + configurable_about_text)
@@ -61,9 +61,9 @@ module Cosmos
61
61
  rescue
62
62
  end
63
63
  text = "The following error occurred:<br/>#{message}"
64
- text += "<br/><br/>Please contact your local COSMOS expert.<br/><br/>This error has been logged:<br/>#{log_file}<br/><br/> <a href='mailto:rmelton@ball.com;jmthomas@ball.com?subject=COSMOS exception&body=#{file_contents}'>Click here</a> to email this log to the COSMOS developers." if log_file
64
+ text << "<br/><br/>Please contact your local COSMOS expert.<br/><br/>This error has been logged:<br/>#{log_file}<br/><br/> <a href='mailto:rmelton@ball.com;jmthomas@ball.com?subject=COSMOS exception&body=#{file_contents}'>Click here</a> to email this log to the COSMOS developers." if log_file
65
65
  end
66
- text += "<br/><br/>NOTE!: The application will exit once you accept or dismiss this dialog!" if exit_afterwards
66
+ text << "<br/><br/>NOTE!: The application will exit once you accept or dismiss this dialog!" if exit_afterwards
67
67
  msg.setText(text)
68
68
  if log_file
69
69
  open_button = Qt::PushButton.new("Open Exception Log in Text Editor")
@@ -93,7 +93,7 @@ module Cosmos
93
93
  # Create Progress Text Notifications
94
94
  @progress_text = Qt::PlainTextEdit.new
95
95
  @progress_text.setReadOnly(true)
96
- @progress_text.setMaximumBlockCount(10000)
96
+ @progress_text.setMaximumBlockCount(100)
97
97
  end
98
98
 
99
99
  @button_layout = Qt::HBoxLayout.new
@@ -125,6 +125,8 @@ module Cosmos
125
125
 
126
126
  @thread = nil
127
127
  @cancel_callback = nil
128
+ @overall_progress = 0
129
+ @step_progress = 0
128
130
  end
129
131
 
130
132
  def self.canceled?
@@ -199,17 +201,21 @@ module Cosmos
199
201
  end
200
202
 
201
203
  def set_step_progress (value)
202
- unless @complete
204
+ progress_int = (value * 100).to_i
205
+ if !@complete and @step_progress != progress_int
206
+ @step_progress = progress_int
203
207
  Qt.execute_in_main_thread(false) do
204
- @step_bar.setValue(value * 100.0) if @step_bar
208
+ @step_bar.setValue(progress_int) if @step_bar
205
209
  end
206
210
  end
207
211
  end
208
212
 
209
213
  def set_overall_progress (value)
210
- unless @complete
214
+ progress_int = (value * 100).to_i
215
+ if !@complete and @overall_progress != progress_int
216
+ @overall_progress = progress_int
211
217
  Qt.execute_in_main_thread(false) do
212
- @overall_bar.setValue(value * 100.0) if @overall_bar
218
+ @overall_bar.setValue(progress_int) if @overall_bar
213
219
  end
214
220
  end
215
221
  end
@@ -37,19 +37,27 @@ module Cosmos
37
37
  layout.addWidget(@message_box)
38
38
  @progress_bar = Qt::ProgressBar.new
39
39
  layout.addWidget(@progress_bar)
40
-
41
40
  setLayout(layout)
41
+
42
+ @progress = 0
43
+ @complete = false
42
44
  end
43
45
 
44
46
  def message=(message)
45
- Qt.execute_in_main_thread(true) do
46
- @message_box.setText(message)
47
+ unless @complete
48
+ Qt.execute_in_main_thread(false) do
49
+ @message_box.setText(message)
50
+ end
47
51
  end
48
52
  end
49
53
 
50
54
  def progress=(progress)
51
- Qt.execute_in_main_thread(true) do
52
- @progress_bar.setValue(progress * 100)
55
+ progress_int = (progress * 100).to_i
56
+ if !@complete and @progress != progress_int
57
+ @progress = progress_int
58
+ Qt.execute_in_main_thread(false) do
59
+ @progress_bar.setValue(progress_int)
60
+ end
53
61
  end
54
62
  end
55
63
 
@@ -82,7 +90,6 @@ module Cosmos
82
90
  # Qt.execute_in_main_thread(true) do
83
91
  # < Update the GUI >
84
92
  # end
85
- complete = false
86
93
  Thread.new do
87
94
  error = nil
88
95
  begin
@@ -91,6 +98,8 @@ module Cosmos
91
98
  error = e
92
99
  end
93
100
 
101
+ @complete = true
102
+
94
103
  # If the block threw an error show it before allowing the application to crash
95
104
  if error
96
105
  Qt.execute_in_main_thread(true) do
@@ -101,12 +110,25 @@ module Cosmos
101
110
  Qt.execute_in_main_thread(true) do
102
111
  # Once the block has completed we hide and dispose the dialog to allow the main application to take over
103
112
  dialog.hide
104
- dialog.dispose unless wait_for_complete
113
+
114
+ unless wait_for_complete
115
+ # Need to make sure all Qt.execute_in_main_thread() have completed before disposing or
116
+ # we will segfault
117
+ Qt::RubyThreadFix.queue.pop.call until Qt::RubyThreadFix.queue.empty?
118
+
119
+ dialog.dispose
120
+ end
105
121
  end
106
- complete = true
107
122
  end
108
- dialog.exec if wait_for_complete
109
- dialog.dispose if wait_for_complete
123
+ if wait_for_complete
124
+ dialog.exec
125
+
126
+ # Need to make sure all Qt.execute_in_main_thread() have completed before disposing or
127
+ # we will segfault
128
+ Qt::RubyThreadFix.queue.pop.call until Qt::RubyThreadFix.queue.empty?
129
+
130
+ dialog.dispose
131
+ end
110
132
  end
111
133
  end
112
134
 
@@ -146,7 +146,7 @@ module Cosmos
146
146
  if limits_settings[0]
147
147
  label_text = "RL/#{limits_settings[0][0]} YL/#{limits_settings[0][1]} YH/#{limits_settings[0][2]} RH/#{limits_settings[0][3]}"
148
148
  if limits_settings[0][4] and limits_settings[0][5]
149
- label_text += " GL/#{limits_settings[0][4]} GH/#{limits_settings[0][5]}"
149
+ label_text << " GL/#{limits_settings[0][4]} GH/#{limits_settings[0][5]}"
150
150
  end
151
151
  if @limits_labels[limits_set]
152
152
  @limits_labels[limits_set].text = label_text
@@ -360,7 +360,7 @@ module Cosmos
360
360
  right_text_x = text_x + (legend_width / 2)
361
361
  left_text_y = text_y
362
362
  right_text_y = text_y
363
- @lines.legend.reverse.each do |legend_text, color, axis|
363
+ @lines.legend.reverse_each do |legend_text, color, axis|
364
364
  if axis == :LEFT
365
365
  dc.addSimpleTextAt(legend_text, left_text_x, left_text_y, color)
366
366
  left_text_y -= metrics.height
@@ -375,7 +375,7 @@ module Cosmos
375
375
  text_y = right_text_y
376
376
  end
377
377
  else
378
- @lines.legend.reverse.each do |legend_text, color, axis|
378
+ @lines.legend.reverse_each do |legend_text, color, axis|
379
379
  dc.addSimpleTextAt(legend_text, text_x, text_y, color)
380
380
  text_y -= metrics.height
381
381
  end
@@ -428,6 +428,8 @@ class Qt::LineEdit
428
428
  end
429
429
 
430
430
  class Qt::PlainTextEdit
431
+ @@color_cache = {}
432
+
431
433
  def add_formatted_text(text, color = nil)
432
434
  if text =~ /[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F-\xFF]/
433
435
  text.chomp!
@@ -435,16 +437,16 @@ class Qt::PlainTextEdit
435
437
  text << "\n"
436
438
  end
437
439
  if text =~ /<G>/ or color == Cosmos::GREEN
438
- text.gsub!('<G>', '')
440
+ text.gsub!(/<G>/, '')
439
441
  addText(text, Cosmos::GREEN)
440
442
  elsif text =~ /<Y>/ or color == Cosmos::YELLOW
441
- text.gsub!('<Y>', '')
443
+ text.gsub!(/<Y>/, '')
442
444
  addText(text, Cosmos::YELLOW)
443
445
  elsif text =~ /<R>/ or color == Cosmos::RED
444
- text.gsub!('<R>', '')
446
+ text.gsub!(/<R>/, '')
445
447
  addText(text, Cosmos::RED)
446
448
  elsif text =~ /<B>/ or color == Cosmos::BLUE
447
- text.gsub!('<B>', '')
449
+ text.gsub!(/<B>/, '')
448
450
  addText(text, Cosmos::BLUE)
449
451
  else
450
452
  addText(text) # default is Cosmos::BLACK
@@ -452,30 +454,17 @@ class Qt::PlainTextEdit
452
454
  end
453
455
 
454
456
  def addText(text, color = Cosmos::BLACK)
455
- @current_text = "" if !defined? @current_text or @current_text.nil?
456
- text = text.gsub("&", "&amp;")
457
- text.gsub!("\n", '')
458
- text.gsub!(' ', '&nbsp;')
459
- text.gsub!(">", "&gt;")
460
- text.gsub!("<", "&lt;")
461
- rgb_color = "#%02X%02X%02X" % [color.red, color.green, color.blue]
462
- @current_text +="<font color=\"#{rgb_color}\">#{text}</font><br/>"
457
+ @current_text ||= ''
458
+ @current_text << escape_text(text.chomp, color) << '<br/>'.freeze
463
459
  end
464
460
 
465
461
  def flush
466
462
  appendHtml(@current_text)
467
- @current_text = nil
463
+ @current_text.clear
468
464
  end
469
465
 
470
466
  def appendText(text, color = Cosmos::BLACK)
471
- text = text.chomp
472
- text.gsub!(/\n/, '<br/>') # replace newlines with html breaks
473
- text.gsub!("&", "&amp;")
474
- text.gsub!(' ', '&nbsp;')
475
- text.gsub!(">", "&gt;")
476
- text.gsub!("<", "&lt;")
477
- rgb_color = "#%02X%02X%02X" % [color.red, color.green, color.blue]
478
- appendHtml("<font color=\"#{rgb_color}\">#{text}</font>")
467
+ appendHtml(escape_text(text.chomp, color))
479
468
  end
480
469
 
481
470
  # Return the selected lines. If a partial line is selected the entire line will be returned.
@@ -522,6 +511,17 @@ class Qt::PlainTextEdit
522
511
  cursor.setPosition(textCursor.selectionEnd)
523
512
  cursor.blockNumber
524
513
  end
514
+
515
+ private
516
+
517
+ def escape_text(text, color)
518
+ # You might think gsub! would use less memory but benchmarking proves gsub
519
+ # with a regular express argument is the fastest and uses the least memory.
520
+ # However, this is still an expensive operation due to how many times it is called.
521
+ text = text.gsub(/&/,'&amp;'.freeze).gsub(/\n/,'<br/>'.freeze).gsub(/\s/, '&nbsp;'.freeze).gsub(/>/,'&gt;'.freeze).gsub(/</,'&lt;'.freeze)
522
+ @@color_cache[color] ||= "#%02X%02X%02X" % [color.red, color.green, color.blue]
523
+ "<font color=\"#{@@color_cache[color]}\">#{text}</font>"
524
+ end
525
525
  end
526
526
 
527
527
  class Qt::TextEdit
@@ -533,7 +533,7 @@ end
533
533
  class Qt::ComboBox
534
534
  # Helper method to remove all items from a ComboBox
535
535
  def clearItems
536
- (0...count).to_a.reverse.each do |index|
536
+ (0...count).to_a.reverse_each do |index|
537
537
  removeItem(index)
538
538
  end
539
539
  end
@@ -72,7 +72,7 @@ module Cosmos
72
72
  def start_service(hostname = nil, port = nil, object = nil)
73
73
  if hostname and port and object
74
74
  @object = object
75
- hostname = '127.0.0.1' if (hostname.to_s.upcase == 'LOCALHOST')
75
+ hostname = '127.0.0.1'.freeze if (hostname.to_s.upcase == 'LOCALHOST'.freeze)
76
76
 
77
77
  # Create a socket to accept connections from clients
78
78
  begin
@@ -171,7 +171,7 @@ module Cosmos
171
171
  def self.receive_message(socket, data)
172
172
  self.get_at_least_x_bytes_of_data(socket, data, 4)
173
173
  if data.length >= 4
174
- length = data[0..3].unpack('N')[0]
174
+ length = data[0..3].unpack('N'.freeze)[0]
175
175
  data.replace(data[4..-1])
176
176
  else
177
177
  return nil
@@ -200,7 +200,7 @@ module Cosmos
200
200
  return
201
201
  end
202
202
  current_data << data
203
- rescue Errno::EAGAIN, Errno::EWOULDBLOCK
203
+ rescue IO::WaitReadable
204
204
  IO.fast_select([socket], nil, nil, nil)
205
205
  retry
206
206
  end
@@ -215,7 +215,7 @@ module Cosmos
215
215
  num_bytes_to_send = data.length + 4
216
216
  total_bytes_sent = 0
217
217
  bytes_sent = 0
218
- data_to_send = [data.length].pack('N') << data.clone
218
+ data_to_send = [data.length].pack('N'.freeze) << data.clone
219
219
 
220
220
  loop do
221
221
  begin
@@ -183,28 +183,28 @@ module Cosmos
183
183
  # @param id [Integer] The identifier which will be matched to the response
184
184
  def initialize(method_name, method_params, id)
185
185
  super()
186
- @hash['jsonrpc'] = "2.0"
187
- @hash['method'] = method_name.to_s
186
+ @hash['jsonrpc'.freeze] = "2.0".freeze
187
+ @hash['method'.freeze] = method_name.to_s
188
188
  if method_params and method_params.length != 0
189
- @hash['params'] = method_params
189
+ @hash['params'.freeze] = method_params
190
190
  end
191
- @hash['id'] = id.to_i
191
+ @hash['id'.freeze] = id.to_i
192
192
  end
193
193
 
194
194
  # @return [String] The method to call
195
195
  def method
196
- @hash['method']
196
+ @hash['method'.freeze]
197
197
  end
198
198
 
199
199
  # @return [Array<String>] Array of strings which represent the
200
200
  # parameters to send to the method
201
201
  def params
202
- @hash['params'] || []
202
+ @hash['params'.freeze] || []
203
203
  end
204
204
 
205
205
  # @return [Integer] The request identifier
206
206
  def id
207
- @hash['id']
207
+ @hash['id'.freeze]
208
208
  end
209
209
 
210
210
  # Creates a JsonRpcRequest object from a JSON encoded String. The version
@@ -216,7 +216,7 @@ module Cosmos
216
216
  begin
217
217
  hash = JSON.parse(request_data, :allow_nan => true, :create_additions => true)
218
218
  # Verify the jsonrpc version is correct and there is a method and id
219
- raise unless (hash['jsonrpc'] == "2.0" && hash['method'] && hash['id'])
219
+ raise unless (hash['jsonrpc'.freeze] == "2.0".freeze && hash['method'.freeze] && hash['id'.freeze])
220
220
  self.from_hash(hash)
221
221
  rescue
222
222
  raise "Invalid JSON-RPC 2.0 Request"
@@ -229,7 +229,7 @@ module Cosmos
229
229
  # and id
230
230
  # @return [JsonRpcRequest]
231
231
  def self.from_hash(hash)
232
- self.new(hash['method'], hash['params'], hash['id'])
232
+ self.new(hash['method'.freeze], hash['params'.freeze], hash['id'.freeze])
233
233
  end
234
234
  end
235
235
 
@@ -239,8 +239,8 @@ module Cosmos
239
239
  # @param id [Integer] The identifier which will be matched to the request
240
240
  def initialize(id)
241
241
  super()
242
- @hash['jsonrpc'] = "2.0"
243
- @hash['id'] = id
242
+ @hash['jsonrpc'.freeze] = "2.0".freeze
243
+ @hash['id'.freeze] = id
244
244
  end
245
245
 
246
246
  # Creates a JsonRpcResponse object from a JSON encoded String. The version
@@ -258,13 +258,13 @@ module Cosmos
258
258
  end
259
259
 
260
260
  # Verify the jsonrpc version is correct and there is an ID
261
- raise msg unless hash['jsonrpc'] == "2.0" and hash.key?('id')
261
+ raise msg unless hash['jsonrpc'.freeze] == "2.0".freeze and hash.key?('id'.freeze)
262
262
  # If there is a result this is probably a good response
263
- if hash.key?('result')
263
+ if hash.key?('result'.freeze)
264
264
  # Can't have an error key in a good response
265
- raise msg if hash.key?('error')
265
+ raise msg if hash.key?('error'.freeze)
266
266
  JsonRpcSuccessResponse.from_hash(hash)
267
- elsif hash.key?('error')
267
+ elsif hash.key?('error'.freeze)
268
268
  # There was an error key so create an error response
269
269
  JsonRpcErrorResponse.from_hash(hash)
270
270
  else
@@ -280,12 +280,12 @@ module Cosmos
280
280
  # @param id [Integer] The identifier which will be matched to the request
281
281
  def initialize(result, id)
282
282
  super(id)
283
- @hash['result'] = result
283
+ @hash['result'.freeze] = result
284
284
  end
285
285
 
286
286
  # @return [Object] The result of the method request
287
287
  def result
288
- @hash['result']
288
+ @hash['result'.freeze]
289
289
  end
290
290
 
291
291
  # Creates a JsonRpcSuccessResponse object from a Hash
@@ -293,7 +293,7 @@ module Cosmos
293
293
  # @param hash [Hash] Hash containing the following keys: result and id
294
294
  # @return [JsonRpcSuccessResponse]
295
295
  def self.from_hash(hash)
296
- self.new(hash['result'], hash['id'])
296
+ self.new(hash['result'.freeze], hash['id'.freeze])
297
297
  end
298
298
  end
299
299
 
@@ -304,12 +304,12 @@ module Cosmos
304
304
  # @param id [Integer] The identifier which will be matched to the request
305
305
  def initialize(error, id)
306
306
  super(id)
307
- @hash['error'] = error
307
+ @hash['error'.freeze] = error
308
308
  end
309
309
 
310
310
  # @return [JsonRpcError] The error object
311
311
  def error
312
- @hash['error']
312
+ @hash['error'.freeze]
313
313
  end
314
314
 
315
315
  # Creates a JsonRpcErrorResponse object from a Hash
@@ -317,7 +317,7 @@ module Cosmos
317
317
  # @param hash [Hash] Hash containing the following keys: error and id
318
318
  # @return [JsonRpcErrorResponse]
319
319
  def self.from_hash(hash)
320
- self.new(JsonRpcError.from_hash(hash['error']), hash['id'])
320
+ self.new(JsonRpcError.from_hash(hash['error'.freeze]), hash['id'.freeze])
321
321
  end
322
322
  end
323
323