rookout 0.1.35 → 0.1.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rookout/augs/actions/action_run_processor.rb +1 -0
  3. data/lib/rookout/augs/aug_factory.rb +2 -2
  4. data/lib/rookout/augs/aug_rate_limiter.rb +2 -2
  5. data/lib/rookout/augs/locations/location_file_line.rb +5 -1
  6. data/lib/rookout/com_ws/agent_com_ws.rb +5 -3
  7. data/lib/rookout/com_ws/envelope_wrapper.rb +12 -10
  8. data/lib/rookout/com_ws/git.rb +1 -1
  9. data/lib/rookout/com_ws/information.rb +45 -1
  10. data/lib/rookout/com_ws/output.rb +13 -7
  11. data/lib/rookout/commit.rb +1 -1
  12. data/lib/rookout/config.rb +35 -17
  13. data/lib/rookout/exceptions.rb +3 -9
  14. data/lib/rookout/interface.rb +9 -8
  15. data/lib/rookout/logger.rb +13 -7
  16. data/lib/rookout/processor/namespace_serializer.rb +1 -1
  17. data/lib/rookout/processor/namespace_serializer2.rb +26 -12
  18. data/lib/rookout/processor/namespaces/container_namespace.rb +1 -0
  19. data/lib/rookout/processor/namespaces/frame_namespace.rb +2 -3
  20. data/lib/rookout/processor/namespaces/namespace.rb +1 -0
  21. data/lib/rookout/processor/namespaces/noop_namespace.rb +0 -4
  22. data/lib/rookout/processor/namespaces/ruby_object_namespace.rb +31 -16
  23. data/lib/rookout/processor/namespaces/ruby_object_serializer.rb +9 -7
  24. data/lib/rookout/processor/namespaces/ruby_utils_namespace.rb +0 -4
  25. data/lib/rookout/processor/namespaces/stack_namespace.rb +1 -0
  26. data/lib/rookout/processor/namespaces/traceback_namespace.rb +4 -1
  27. data/lib/rookout/processor/operations/set_operation.rb +2 -0
  28. data/lib/rookout/processor/paths/arithmetic_path.rb +3 -1
  29. data/lib/rookout/processor/paths/canopy/actions.rb +5 -1
  30. data/lib/rookout/processor/paths/canopy/consts.rb +6 -4
  31. data/lib/rookout/processor/paths/canopy/markers.rb +15 -5
  32. data/lib/rookout/processor/processor_factory.rb +0 -2
  33. data/lib/rookout/processor/rook_error.rb +3 -1
  34. data/lib/rookout/rookout_singleton.rb +4 -3
  35. data/lib/rookout/services/position.rb +3 -2
  36. data/lib/rookout/services/tracer.rb +2 -2
  37. data/lib/rookout/utils.rb +1 -1
  38. data/lib/rookout/version.rb +1 -1
  39. metadata +39 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd31c0f01c107b7021219e64446be074d1a8094109409898083a180391b23d46
4
- data.tar.gz: 7d8aa024f5578c422d5e2cc339b6f28b29a52b26ac1aa5bfdaf2e18c8582246f
3
+ metadata.gz: e7230e6476d46d4184cd1887296f946c67fcc2e5e35b3b404f9f66444ef4d964
4
+ data.tar.gz: '098f43b827ae84b56adb3e19905899487d3082ce66862b1938bf823ec2cee7de'
5
5
  SHA512:
6
- metadata.gz: 1523b333105dddf6bed502509ce9f772156040f2aa6cc80cd2ab759547470a1aca42d379d653cb23dcedd5182b54b4ec11db947c6050f464605fc9c6e6c92ffb
7
- data.tar.gz: 0a764fb7ada3a92345c0effe38115d129db972c6fe7b1eda6c2da3157aa528f0abcec2219c0038d55a3e6c77624dcbcbab5fba2bca5005f22ba1d26140925ac3
6
+ metadata.gz: 81e11a89868203775659bcab8b1a9ac4141cba01ca33ab6bd3f33f71d4be46c39f2652d1b3a2c413260104cf8b215c448ba8251081bb2e389fe32c12238fe5c4
7
+ data.tar.gz: 22c3bbe9a67a1cefa8cc1928c4882fb585c479bb0e36b75c4ebf9abe0c7b5839e364169347b7c37b8dd40aec14641449e7ddf55db968378e9f2bcc876c9bcf4e
@@ -5,6 +5,7 @@ module Rookout
5
5
  module Actions
6
6
  class ActionRunProcessor < Action
7
7
  def initialize arguments, processor_factory
8
+ super()
8
9
  @processor = processor_factory.create_processor arguments["operations"]
9
10
 
10
11
  post_operations = arguments["post_operations"]
@@ -52,9 +52,9 @@ module Rookout
52
52
 
53
53
  case name
54
54
  when "file_line"
55
- return Locations::LocationFileLine.new configuration, @output, aug
55
+ Locations::LocationFileLine.new configuration, @output, aug
56
56
  when "exception_handler"
57
- return Locations::LocationExceptionHandler.new configuration, @output, aug
57
+ Locations::LocationExceptionHandler.new configuration, @output, aug
58
58
  when "log_handler"
59
59
  raise Exceptions::RookUnsupportedLiveLogger
60
60
  else
@@ -75,7 +75,7 @@ module Rookout
75
75
  prev_window_usage = @windows[prev_window_key] || 0
76
76
 
77
77
  # Previous window weight
78
- prev_weight = 1 - (now_ns - current_window_key) / @window_size.to_f
78
+ prev_weight = 1 - ((now_ns - current_window_key) / @window_size.to_f)
79
79
 
80
80
  # Final weighted usage
81
81
  (prev_window_usage * prev_weight) + (@active_count * @active_weight) + current_window_usage
@@ -91,7 +91,7 @@ module Rookout
91
91
  end
92
92
 
93
93
  def cleanup now_ns
94
- @windows.reject! { |key, _| key < (now_ns - @window_size * 5) } if @windows.length > 10
94
+ @windows.reject! { |key, _| key < (now_ns - (@window_size * 5)) } if @windows.length > 10
95
95
  end
96
96
  end
97
97
  end
@@ -21,7 +21,11 @@ module Rookout
21
21
  @line_unique = arguments["line_unique"] || false
22
22
  end
23
23
 
24
- attr_reader :filename, :lineno, :file_hash, :line_crc, :line_unique
24
+ attr_reader :filename
25
+ attr_reader :lineno
26
+ attr_reader :file_hash
27
+ attr_reader :line_crc
28
+ attr_reader :line_unique
25
29
 
26
30
  def add_aug trigger_services
27
31
  trigger_services.get_service("position").add_aug self
@@ -68,6 +68,7 @@ module Rookout
68
68
  end
69
69
 
70
70
  @pending_messages.push envelope_wrapper
71
+ @pending_messages_length += msg_size
71
72
  end
72
73
 
73
74
  def queue_full?
@@ -117,7 +118,7 @@ module Rookout
117
118
 
118
119
  if @print_on_initial_connection
119
120
  @print_on_initial_connection = false
120
- STDERR.puts "[Rookout] Successfully connected to controller"
121
+ $stderr.puts "[Rookout] Successfully connected to controller"
121
122
  end
122
123
  Logger.instance.debug "WebSocket connected successfully"
123
124
  Logger.instance.info "Finished initialization"
@@ -204,9 +205,10 @@ module Rookout
204
205
  msg = envelope_wrapper.envelope
205
206
  @pending_messages_length -= envelope_wrapper.calculate_size
206
207
 
207
- if msg.is_a? ExitMessage
208
+ case msg
209
+ when ExitMessage
208
210
  break if msg.thread == Thread.current
209
- elsif msg.is_a? FlushMessage
211
+ when FlushMessage
210
212
  msg.event.set
211
213
  else
212
214
  begin
@@ -8,8 +8,7 @@ class EnvelopeWrapperBase
8
8
  timestamp = Google::Protobuf::Timestamp.new
9
9
  timestamp.from_time Time.new
10
10
  envelope = Com::Rookout::Envelope.new msg: any_message, timestamp: timestamp
11
- serialized = Com::Rookout::Envelope.encode envelope
12
- serialized
11
+ Com::Rookout::Envelope.encode envelope
13
12
  end
14
13
 
15
14
  def envelope
@@ -23,27 +22,30 @@ end
23
22
 
24
23
  class Variant2EnvelopeWrapper < EnvelopeWrapperBase
25
24
  def initialize agent_id, aug_id, report_id, arguments
25
+ super()
26
+
26
27
  @aug_report_message = Com::Rookout::AugReportMessage.new agent_id: agent_id,
27
- aug_id: aug_id,
28
- report_id: report_id
28
+ aug_id: aug_id,
29
+ report_id: report_id
29
30
  @serializer = Rookout::Processor::NamespaceSerializer2.new
30
- @aug_report_message.arguments2 = @serializer.dump arguments
31
- end
32
-
33
- def envelope
34
- return @envelope unless @envelope.nil?
31
+ @aug_report_message.arguments2 = @serializer.dump arguments, true
35
32
  @serializer.string_cache.each { |key, value| @aug_report_message.strings_cache[key] = value }
36
33
  @envelope = wrap_in_envelope @aug_report_message
37
34
  @aug_report_message = nil
38
35
  end
39
36
 
37
+ def envelope
38
+ @envelope
39
+ end
40
+
40
41
  def calculate_size
41
- @envelope.length + @serializer.estimated_pending_bytes
42
+ @envelope.length
42
43
  end
43
44
  end
44
45
 
45
46
  class EnvelopeWrapper < EnvelopeWrapperBase
46
47
  def initialize message
48
+ super()
47
49
  @envelope = wrap_in_envelope message
48
50
  end
49
51
 
@@ -42,7 +42,7 @@ module Rookout
42
42
  link_contents = File.read link_path
43
43
 
44
44
  if link_contents.start_with? "ref:"
45
- next_link = (link_contents.split " ")[1].strip
45
+ next_link = link_contents.split[1].strip
46
46
  follow_sym_links root, next_link
47
47
  else
48
48
  link_contents.strip
@@ -21,6 +21,8 @@ module Rookout
21
21
  @labels["k8s_namespace"] = k8_namespace
22
22
  end
23
23
 
24
+ collect_serverless_labels
25
+
24
26
  @ip_addr = local_ip
25
27
 
26
28
  @scm_info = create_scm_information
@@ -54,7 +56,8 @@ module Rookout
54
56
  scm: @scm_info
55
57
  end
56
58
 
57
- attr_accessor :agent_id, :labels
59
+ attr_accessor :agent_id
60
+ attr_accessor :labels
58
61
 
59
62
  private
60
63
 
@@ -97,6 +100,47 @@ module Rookout
97
100
 
98
101
  Com::Rookout::SCMInformation.new origin: user_git_origin, commit: user_git_commit
99
102
  end
103
+
104
+ def aws_lambda?
105
+ !ENV["AWS_LAMBDA_FUNCTION_NAME"].nil?
106
+ end
107
+
108
+ def google_cloud_function?
109
+ !ENV["FUNCTION_TARGET"].nil? && !ENV["FUNCTION_SIGNATURE_TYPE"].nil?
110
+ end
111
+
112
+ def cloud_run_or_fire_base?
113
+ !ENV["K_SERVICE"].nil? &&
114
+ !ENV["K_REVISION"].nil? &&
115
+ !ENV["K_CONFIGURATION"].nil? &&
116
+ !ENV["PORT"].nil?
117
+ end
118
+
119
+ def azure_function?
120
+ !ENV["FUNCTIONS_WORKER_RUNTIME"].nil? && !ENV["WEBSITE_SITE_NAME"].nil?
121
+ end
122
+
123
+ def collect_serverless_labels
124
+ if aws_lambda?
125
+ @labels["function_name"] = ENV["AWS_LAMBDA_FUNCTION_NAME"]
126
+ @labels["aws_region"] = ENV["AWS_REGION"]
127
+
128
+ elsif google_cloud_function? || cloud_run_or_fire_base?
129
+ function_name = ENV["FUNCTION_NAME"]
130
+ if function_name.nil?
131
+ function_name = ENV["K_SERVICE"]
132
+ end
133
+ @labels["function_name"] = function_name
134
+
135
+ elsif azure_function?
136
+ @labels["function_name"] = ENV["WEBSITE_SITE_NAME"]
137
+ @labels["azure_region"] = ENV["REGION_NAME"]
138
+ end
139
+
140
+ return unless @labels.key? "function_name"
141
+
142
+ @labels["rookout_serverless"] = "true"
143
+ end
100
144
  end
101
145
  end
102
146
  end
@@ -42,7 +42,8 @@ module Rookout
42
42
  @closing = false
43
43
  end
44
44
 
45
- attr_accessor :agent_id, :agent_com
45
+ attr_accessor :agent_id
46
+ attr_accessor :agent_com
46
47
 
47
48
  def close
48
49
  @closing = true
@@ -86,13 +87,17 @@ module Rookout
86
87
  if arguments.nil? || arguments.call_method("size", "") == 0
87
88
  protobuf_arguments = nil
88
89
  else
89
- protobuf_arguments = Processor::NamespaceSerializer.dump arguments
90
+ protobuf_arguments = Processor::NamespaceSerializer.dump arguments, true
90
91
  end
91
92
 
92
- envelope_wrapper = EnvelopeWrapper.new(Com::Rookout::AugReportMessage.new(agent_id: @agent_id,
93
- aug_id: aug_id,
94
- report_id: report_id,
95
- arguments: protobuf_arguments))
93
+ envelope_wrapper = EnvelopeWrapper.new(
94
+ Com::Rookout::AugReportMessage.new(
95
+ agent_id: @agent_id,
96
+ aug_id: aug_id,
97
+ report_id: report_id,
98
+ arguments: protobuf_arguments
99
+ )
100
+ )
96
101
  end
97
102
 
98
103
  @agent_com.add envelope_wrapper
@@ -123,7 +128,8 @@ module Rookout
123
128
  protobuf_arguments = nil
124
129
  else
125
130
  protobuf_arguments = Processor::NamespaceSerializer.dump(
126
- Processor::Namespaces::RubyObjectNamespace.new(arguments)
131
+ Processor::Namespaces::RubyObjectNamespace.new(arguments),
132
+ true
127
133
  )
128
134
  end
129
135
 
@@ -1,3 +1,3 @@
1
1
  module Rookout
2
- COMMIT = "3d8b5f2d4b28b5d191fa303cf7a6f5f0da50405b".freeze
2
+ COMMIT = "d0495f7919f4fa023c9192c095b24bcdfbf4c825".freeze
3
3
  end
@@ -6,21 +6,26 @@ module Rookout
6
6
  # Magic to allow for module variables to be easily accessible
7
7
  class << self
8
8
  attr_accessor :debug
9
+
9
10
  Rookout::Config.debug = false
10
11
 
11
- attr_accessor :logger_filename, :logger_log_to_stderr, :logger_log_level
12
+ attr_accessor :logger_filename
13
+ attr_accessor :logger_log_to_stderr
14
+ attr_accessor :logger_log_level
15
+
12
16
  Rookout::Config.logger_filename = "rookout/ruby-rook.log".freeze
13
17
  Rookout::Config.logger_log_to_stderr = false
14
18
  Rookout::Config.logger_log_level = :info
15
19
 
16
- attr_accessor :agent_com_configuration_command_thread_name,
17
- :agent_com_max_message_limit,
18
- :agent_com_max_queue_messages_length,
19
- :agent_com_timeout,
20
- :agent_com_ping_interval,
21
- :agent_com_ping_timeout,
22
- :agent_com_flush_timeout,
23
- :agent_com_max_queued_messages
20
+ attr_accessor :agent_com_configuration_command_thread_name
21
+ attr_accessor :agent_com_max_message_limit
22
+ attr_accessor :agent_com_max_queue_messages_length
23
+ attr_accessor :agent_com_timeout
24
+ attr_accessor :agent_com_ping_interval
25
+ attr_accessor :agent_com_ping_timeout
26
+ attr_accessor :agent_com_flush_timeout
27
+ attr_accessor :agent_com_max_queued_messages
28
+
24
29
  Rookout::Config.agent_com_max_message_limit = 1024 * 1024
25
30
  Rookout::Config.agent_com_max_queue_messages_length = 15 * 1024 * 1024
26
31
  Rookout::Config.agent_com_timeout = 3
@@ -29,47 +34,60 @@ module Rookout
29
34
  Rookout::Config.agent_com_flush_timeout = 3
30
35
  Rookout::Config.agent_com_max_queued_messages = 100
31
36
 
32
- attr_accessor :backoff_factor, :backoff_reset_time, :backoff_max_time
37
+ attr_accessor :backoff_factor
38
+ attr_accessor :backoff_reset_time
39
+ attr_accessor :backoff_max_time
40
+
33
41
  Rookout::Config.backoff_factor = 0.2
34
42
  Rookout::Config.backoff_max_time = 60
35
43
  Rookout::Config.backoff_reset_time = 3 * 60.0
36
44
 
37
- attr_accessor :output_max_status_updates,
38
- :output_max_aug_messages,
39
- :output_max_log_items,
40
- :output_bucket_refresh_rate
45
+ attr_accessor :output_max_status_updates
46
+ attr_accessor :output_max_aug_messages
47
+ attr_accessor :output_max_log_items
48
+ attr_accessor :output_bucket_refresh_rate
49
+
41
50
  Rookout::Config.output_max_status_updates = 200
42
51
  Rookout::Config.output_max_aug_messages = 100
43
52
  Rookout::Config.output_max_log_items = 200
44
53
  Rookout::Config.output_bucket_refresh_rate = 10
45
54
 
46
55
  attr_accessor :instrumentation_max_aug_time
56
+
47
57
  Rookout::Config.instrumentation_max_aug_time = 400
48
58
 
49
- attr_accessor :user_git_commit, :user_git_origin
59
+ attr_accessor :user_git_commit
60
+ attr_accessor :user_git_origin
61
+
50
62
  Rookout::Config.user_git_commit = nil
51
63
  Rookout::Config.user_git_origin = nil
52
64
 
53
- attr_accessor :rookout_version, :rookout_commit
65
+ attr_accessor :rookout_version
66
+ attr_accessor :rookout_commit
67
+
54
68
  Rookout::Config.rookout_version = Rookout::VERSION
55
69
  Rookout::Config.rookout_commit = Rookout::COMMIT
56
70
 
57
71
  attr_accessor :protobuf_version2
72
+
58
73
  Rookout::Config.protobuf_version2 = false
59
74
 
60
75
  attr_accessor :true_values
76
+
61
77
  Rookout::Config.true_values = ["y", "Y", "yes", "Yes", "YES", "true", "True", "TRUE", "1"]
62
78
 
63
79
 
64
80
  def update_config configuration
65
81
  is_config_proto2 = configuration["RUBY_PROTOBUF_VERSION_2"]
66
82
  return if is_config_proto2.nil?
67
- is_env_proto2 = ENV["PROTOBUF_VERSION_2"]
83
+ is_env_proto2 = ENV["ROOKOUT_Protobuf_Version2"]
68
84
  if is_env_proto2.nil?
69
85
  @protobuf_version2 = true if @true_values.include? is_config_proto2
70
86
  elsif @true_values.include? is_env_proto2
87
+ Logger.instance.debug "ROOKOUT_Protobuf_Version2 env is preset: #{is_env_proto2}"
71
88
  @protobuf_version2 = true
72
89
  end
90
+ Logger.instance.info "Updating ROOKOUT_Protobuf_Version2 value to: #{@protobuf_version2}"
73
91
  end
74
92
  end
75
93
  end
@@ -11,9 +11,6 @@ module Rookout
11
11
  end
12
12
 
13
13
  class RookInterfaceException < ToolException
14
- def initialize message
15
- super message
16
- end
17
14
  end
18
15
 
19
16
  class RookVersionNotSupported < ToolException
@@ -92,8 +89,8 @@ module Rookout
92
89
  class RookMessageSizeExceeded < ToolException
93
90
  def initialize message_size, max_message_size
94
91
  super "Message size of #{message_size} exceeds max size limit of #{max_message_size}. " \
95
- "Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
96
- "as environment variable or system property",
92
+ "Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
93
+ "as environment variable or system property",
97
94
  { "message_size" => message_size, "max_message_size" => max_message_size }
98
95
  end
99
96
  end
@@ -101,7 +98,7 @@ module Rookout
101
98
  class RookRuleRateLimited < ToolException
102
99
  def initialize
103
100
  super "Breakpoint was disabled due to rate-limiting. " \
104
- "For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
101
+ "For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
105
102
  end
106
103
  end
107
104
 
@@ -139,9 +136,6 @@ module Rookout
139
136
  end
140
137
 
141
138
  class RookInvalidOptions < ToolException
142
- def initialize description
143
- super description
144
- end
145
139
  end
146
140
 
147
141
  class RookInvalidLabel < ToolException
@@ -14,7 +14,7 @@ module Rookout
14
14
 
15
15
  def print_debug_messages
16
16
  puts "[Rookout] Running in debug mode"
17
- puts "[Rookout] Rookout SDK for ruby: " + Config.rookout_version
17
+ puts "[Rookout] Rookout SDK for ruby: #{Config.rookout_version}"
18
18
  end
19
19
 
20
20
  def start options = {}
@@ -36,16 +36,16 @@ module Rookout
36
36
  rook.connect(**@start_options)
37
37
  rescue LoadError
38
38
  raise if throw_errors
39
- STDERR.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
40
- "'bundle config force_ruby_platform true'"
39
+ $stderr.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
40
+ "'bundle config force_ruby_platform true'"
41
41
  rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported, RookBadProtobuf => e
42
42
  raise if throw_errors
43
- STDERR.puts "[Rookout] Failed to start Rookout: #{e.message}"
43
+ $stderr.puts "[Rookout] Failed to start Rookout: #{e.message}"
44
44
  rescue RookCommunicationException => e
45
45
  raise if throw_errors
46
- Logger.instance.warning "[Rookout] " + e.message
46
+ Logger.instance.warning "[Rookout] #{e.message}"
47
47
  rescue Exception => e
48
- STDERR.puts e.full_message if Config.debug
48
+ $stderr.puts e.full_message if Config.debug
49
49
  raise if throw_errors
50
50
  end
51
51
  end
@@ -82,12 +82,13 @@ module Rookout
82
82
  # Only test alpine
83
83
  return unless File.exist? "/etc/alpine-release"
84
84
 
85
+ # Make sure protobuf is built from source
85
86
  protobuf = Gem::Specification.find_by_path "google/protobuf"
86
- STDERR.puts RookBadProtobuf.new.message if protobuf.nil?
87
+ $stderr.puts RookBadProtobuf.new.message if protobuf.nil?
87
88
  return unless protobuf.platform != "ruby"
88
89
 
89
90
  error = RookBadProtobufPlatform.new protobuf.platform
90
- STDERR.puts error.message
91
+ $stderr.puts error.message
91
92
  end
92
93
 
93
94
  def configure_globals options
@@ -66,7 +66,7 @@ module Rookout
66
66
 
67
67
  arguments.each do |argument|
68
68
  if argument.is_a? Exception
69
- @formatted_message += "\n" + argument.message + "\n" + argument.backtrace.join("\n\t")
69
+ @formatted_message += "\n#{argument.message}\n#{argument.backtrace.join "\n\t"}"
70
70
  end
71
71
  end
72
72
 
@@ -74,7 +74,13 @@ module Rookout
74
74
  set_caller
75
75
  end
76
76
 
77
- attr_reader :level, :time, :filename, :lineno, :message, :formatted_message, :arguments
77
+ attr_reader :level
78
+ attr_reader :time
79
+ attr_reader :filename
80
+ attr_reader :lineno
81
+ attr_reader :message
82
+ attr_reader :formatted_message
83
+ attr_reader :arguments
78
84
 
79
85
  def format
80
86
  "#{@time} #{Process.pid}:#{Thread.current.name}-" \
@@ -137,19 +143,19 @@ module Rookout
137
143
  file = nil
138
144
 
139
145
  if Config.debug
140
- STDERR.puts "[Rookout] Failed to open log file: #{log_file_path}"
141
- STDERR.puts e.backtrace
146
+ $stderr.puts "[Rookout] Failed to open log file: #{log_file_path}"
147
+ $stderr.puts e.backtrace
142
148
  end
143
149
  end
144
150
 
145
- ->(record) { file.write record.format + "\n" if file }
151
+ ->(record) { file.write "#{record.format}\n" if file }
146
152
  end
147
153
 
148
154
  def calculate_log_file_path
149
155
  return Config.logger_filename if absolute_path? Config.logger_filename
150
156
 
151
157
  if RUBY_PLATFORM.include? "darwin"
152
- File.join ENV["HOME"], Config.logger_filename
158
+ File.join Dir.home, Config.logger_filename
153
159
  elsif RUBY_PLATFORM.match?(/cygwin|mswin|mingw|bccwin|wince|emx/)
154
160
  File.join ENV["USERPROFILE"], Config.logger_filename
155
161
  else
@@ -158,7 +164,7 @@ module Rookout
158
164
  end
159
165
 
160
166
  def new_stderr_handler
161
- ->(record) { STDERR.puts record.format }
167
+ ->(record) { $stderr.puts record.format }
162
168
  end
163
169
 
164
170
  def new_remote_handler
@@ -7,7 +7,7 @@ module Rookout
7
7
 
8
8
  module_function
9
9
 
10
- def dump namespace, log_errors = true
10
+ def dump namespace, log_errors
11
11
  namespace.dump log_errors
12
12
  rescue StandardError => e
13
13
  message = "Failed to serialize namespace"
@@ -9,12 +9,20 @@ module Rookout
9
9
  require_relative "./namespaces/container_namespace"
10
10
  require_relative "./namespaces/traceback_namespace"
11
11
 
12
+ begin
13
+ require "hashie/mash"
14
+ MASH = ::Hashie::Mash
15
+ rescue LoadError
16
+ MASH = nil
17
+ end
18
+
12
19
  def initialize
13
20
  @string_cache = {}
14
21
  @estimated_pending_bytes = 0
15
22
  end
16
23
 
17
- attr_reader :string_cache, :estimated_pending_bytes
24
+ attr_reader :string_cache
25
+ attr_reader :estimated_pending_bytes
18
26
 
19
27
  def get_string_index_in_cache str
20
28
  if @string_cache.key? str
@@ -35,13 +43,16 @@ module Rookout
35
43
  variant.variant_type_max_depth = (type << 1) | 1
36
44
  end
37
45
 
38
- def dump namespace, log_errors = true
39
- if namespace.is_a? Namespaces::RubyObjectNamespace
46
+ def dump namespace, log_errors
47
+ case namespace
48
+ when Namespaces::RubyObjectNamespace
40
49
  dump_ruby_object_namespace namespace, log_errors
41
- elsif namespace.is_a? Namespaces::ContainerNamespace
50
+ when Namespaces::ContainerNamespace
42
51
  dump_container_namespace namespace, log_errors
43
- elsif namespace.is_a? Namespaces::TracebackNamespace
52
+ when Namespaces::TracebackNamespace
44
53
  dump_traceback_namespace namespace
54
+ else
55
+ raise NotImplementedError
45
56
  end
46
57
  rescue StandardError => e
47
58
  message = "Failed to serialize namespace"
@@ -80,6 +91,7 @@ module Rookout
80
91
  # rubocop:disable Metrics/AbcSize
81
92
  # rubocop:disable Metrics/PerceivedComplexity
82
93
  # rubocop:disable Metrics/CyclomaticComplexity
94
+ # rubocop:disable Style/ClassEqualityComparison
83
95
  def unsafe_dump_object obj, current_depth, config, log_object_errors
84
96
  variant = Com::Rookout::Variant2.new original_type_index_in_cache: get_string_index_in_cache(obj.class.to_s)
85
97
 
@@ -93,7 +105,7 @@ module Rookout
93
105
  dump_time obj, variant
94
106
  elsif obj.class == Array
95
107
  dump_array obj, variant, current_depth, config, log_object_errors
96
- elsif obj.class == Hash
108
+ elsif obj.class == Hash || (!MASH.nil? && obj.is_a?(MASH))
97
109
  dump_hash obj, variant, current_depth, config, log_object_errors
98
110
  elsif obj.is_a? Exception
99
111
  dump_exception obj, variant, current_depth, config, log_object_errors
@@ -105,6 +117,7 @@ module Rookout
105
117
 
106
118
  variant
107
119
  end
120
+ # rubocop:enable Style/ClassEqualityComparison
108
121
  # rubocop:enable Metrics/AbcSize
109
122
  # rubocop:enable Metrics/PerceivedComplexity
110
123
  # rubocop:enable Metrics/CyclomaticComplexity
@@ -120,20 +133,21 @@ module Rookout
120
133
  INT64_MAX = (1 << 63) - 1
121
134
 
122
135
  def dump_numeric obj, variant, config
123
- if obj == true
136
+ case obj
137
+ when true
124
138
  dump_variant_type variant, Com::Rookout::Variant::Type::VARIANT_LONG
125
139
  variant.long_value = 1
126
- elsif obj == false
140
+ when false
127
141
  dump_variant_type variant, Com::Rookout::Variant::Type::VARIANT_LONG
128
142
  variant.long_value = 0
129
- elsif obj.is_a? Integer
143
+ when Integer
130
144
  dump_integer obj, variant
131
- elsif obj.is_a? Float
145
+ when Float
132
146
  dump_variant_type variant, Com::Rookout::Variant::Type::VARIANT_DOUBLE
133
147
  variant.double_value = obj.to_f
134
- elsif obj.is_a? BigDecimal
148
+ when BigDecimal
135
149
  dump_string obj.to_s, variant, config # TODO: NS: This might cut the decimal value, is that ok?
136
- elsif obj.is_a? Complex
150
+ when Complex
137
151
  dump_variant_type variant, Com::Rookout::Variant::Type::VARIANT_COMPLEX
138
152
  variant.complex_value = Com::Rookout::Variant::Complex.new real: obj.real.to_f,
139
153
  imaginary: obj.imaginary.to_f
@@ -11,6 +11,7 @@ module Rookout
11
11
 
12
12
  class ContainerNamespace < Namespace
13
13
  def initialize hash = {}
14
+ super()
14
15
  @hash = hash
15
16
  end
16
17
 
@@ -8,6 +8,7 @@ module Rookout
8
8
 
9
9
  class FrameNamespace < Namespace
10
10
  def initialize binding
11
+ super()
11
12
  @binding = binding
12
13
  end
13
14
 
@@ -19,14 +20,12 @@ module Rookout
19
20
 
20
21
  def call_method name, args
21
22
  case name
22
- when "filename"
23
+ when "filename", "module"
23
24
  RubyObjectNamespace.new @binding.source_location[0]
24
25
  when "line"
25
26
  RubyObjectNamespace.new @binding.source_location[1]
26
27
  when "function"
27
28
  RubyObjectNamespace.new @binding.eval("__method__").to_s
28
- when "module"
29
- RubyObjectNamespace.new @binding.source_location[0]
30
29
  when "locals"
31
30
  locals args
32
31
  when "dump"
@@ -3,6 +3,7 @@ module Rookout
3
3
  module Namespaces
4
4
  class Namespace
5
5
  require_relative "../../exceptions"
6
+
6
7
  def call_method name, _args
7
8
  raise Exceptions::RookMethodNotFound.new(self.class.to_s, name)
8
9
  end
@@ -7,10 +7,6 @@ module Rookout
7
7
  require_relative "../../protobuf/variant_pb"
8
8
 
9
9
  class NoopNamespace < Namespace
10
- def initialize
11
- super
12
- end
13
-
14
10
  def call_method _name, _args
15
11
  Rookout::Processor::Namespaces::RubyObjectNamespace.new nil
16
12
  end
@@ -17,7 +17,10 @@ module Rookout
17
17
  @max_string = max_string
18
18
  end
19
19
 
20
- attr_reader :max_depth, :max_width, :max_collection_depth, :max_string
20
+ attr_reader :max_depth
21
+ attr_reader :max_width
22
+ attr_reader :max_collection_depth
23
+ attr_reader :max_string
21
24
  end
22
25
 
23
26
  OBJECT_DUMP_CONFIG_STRICT = ObjectDumpConfig.new 2, 10, 2, 128
@@ -37,12 +40,14 @@ module Rookout
37
40
  class RubyObjectNamespace < Namespace
38
41
  include RubyObjectSerializer
39
42
 
40
- def initialize obj, dump_config = OBJECT_DUMP_CONFIG_DEFAULT
43
+ def initialize obj, dump_config = nil
44
+ super()
41
45
  @obj = obj
42
- @dump_config = dump_config
46
+ @dump_config = dump_config || OBJECT_DUMP_CONFIG_DEFAULT
43
47
  end
44
48
 
45
- attr_reader :obj, :dump_config
49
+ attr_reader :obj
50
+ attr_reader :dump_config
46
51
 
47
52
  def tailor_limits!
48
53
  if @obj.is_a? String
@@ -62,18 +67,11 @@ module Rookout
62
67
  end
63
68
 
64
69
  def read_key key
65
- if @obj.is_a?(Array) || @obj.is_a?(String)
66
- key_int = key.to_i
67
- return RubyObjectNamespace.new @obj[key_int] if key_int >= 0 && key_int < @obj.length
68
- raise Exceptions::RookKeyNotFound, key
69
-
70
- elsif @obj.is_a? Hash
71
- return RubyObjectNamespace.new @obj[key] if @obj.key? key
72
- return RubyObjectNamespace.new @obj[key.to_sym] if @obj.key? key.to_s.to_sym
73
-
74
- @obj.each { |it, value| return RubyObjectNamespace.new value if it.to_s == key }
75
-
76
- raise Exceptions::RookKeyNotFound, key
70
+ case @obj
71
+ when Array, String
72
+ read_key_as_int key
73
+ when Hash
74
+ read_key_from_hash key
77
75
  else
78
76
  raise Exceptions::RookInvalidObjectForAccess.new(@obj.class.to_s, "ReadKey")
79
77
  end
@@ -94,6 +92,23 @@ module Rookout
94
92
  dump_raw_object @obj, 0, @dump_config, log_object_errors
95
93
  end
96
94
  end
95
+
96
+ private
97
+
98
+ def read_key_as_int key
99
+ key_int = key.to_i
100
+ return RubyObjectNamespace.new @obj[key_int] if key_int >= 0 && key_int < @obj.length
101
+ raise Exceptions::RookKeyNotFound, key
102
+ end
103
+
104
+ def read_key_from_hash key
105
+ return RubyObjectNamespace.new @obj[key] if @obj.key? key
106
+ return RubyObjectNamespace.new @obj[key.to_sym] if @obj.key? key.to_s.to_sym
107
+
108
+ @obj.each { |it, value| return RubyObjectNamespace.new value if it.to_s == key }
109
+
110
+ raise Exceptions::RookKeyNotFound, key
111
+ end
97
112
  end
98
113
  end
99
114
  end
@@ -24,6 +24,7 @@ module Rookout
24
24
 
25
25
  # rubocop:disable Metrics/PerceivedComplexity
26
26
  # rubocop:disable Metrics/CyclomaticComplexity
27
+ # rubocop:disable Style/ClassEqualityComparison
27
28
  def unsafe_dump_object obj, current_depth, config, log_object_errors
28
29
  variant = create_base_variant obj, current_depth, config, log_object_errors
29
30
 
@@ -49,7 +50,7 @@ module Rookout
49
50
 
50
51
  variant
51
52
  end
52
-
53
+ # rubocop:enable Style/ClassEqualityComparison
53
54
  # rubocop:enable Metrics/CyclomaticComplexity
54
55
  # rubocop:enable Metrics/PerceivedComplexity
55
56
 
@@ -83,23 +84,24 @@ module Rookout
83
84
  INT64_MAX = (1 << 63) - 1
84
85
 
85
86
  def dump_numeric obj, variant
86
- if obj == true
87
+ case obj
88
+ when true
87
89
  variant.variant_type = :VARIANT_INT
88
90
  variant.int_value = 1
89
- elsif obj == false
91
+ when false
90
92
  variant.variant_type = :VARIANT_INT
91
93
  variant.int_value = 0
92
- elsif obj.is_a? Integer
94
+ when Integer
93
95
  dump_integer obj, variant
94
- elsif obj.is_a? Float
96
+ when Float
95
97
  variant.variant_type = :VARIANT_DOUBLE
96
98
  variant.double_value = obj.to_f
97
- elsif obj.is_a? BigDecimal
99
+ when BigDecimal
98
100
  serialized_decimal = obj.to_s
99
101
  variant.variant_type = :VARIANT_STRING
100
102
  variant.string_value = Com::Rookout::Variant::String.new value: serialized_decimal,
101
103
  original_size: serialized_decimal.length
102
- elsif obj.is_a? Complex
104
+ when Complex
103
105
  variant.variant_type = :VARIANT_COMPLEX
104
106
  variant.complex_value = Com::Rookout::Variant::Complex.new real: obj.real.to_f,
105
107
  imaginary: obj.imaginary.to_f
@@ -9,10 +9,6 @@ module Rookout
9
9
  require_relative "ruby_object_namespace"
10
10
 
11
11
  class RubyUtilsNamespace < Namespace
12
- def initialize
13
- super
14
- end
15
-
16
12
  def call_method name, args
17
13
  case name
18
14
  when "exception"
@@ -7,6 +7,7 @@ module Rookout
7
7
 
8
8
  class StackNamespace < Namespace
9
9
  def initialize backtrace, offset = 0
10
+ super()
10
11
  @backtrace = backtrace
11
12
  @offset = offset
12
13
  end
@@ -8,12 +8,15 @@ module Rookout
8
8
 
9
9
  class TracebackNamespace < Namespace
10
10
  def initialize backtrace, offset, depth
11
+ super()
11
12
  @backtrace = backtrace
12
13
  @offset = offset
13
14
  @depth = depth
14
15
  end
15
16
 
16
- attr_reader :backtrace, :offset, :depth
17
+ attr_reader :backtrace
18
+ attr_reader :offset
19
+ attr_reader :depth
17
20
 
18
21
  def read_key key
19
22
  FrameNamespace.new @backtrace[key + @offset]
@@ -11,6 +11,8 @@ module Rookout
11
11
 
12
12
  class SetOperation < Operation
13
13
  def initialize configuration, factory
14
+ super()
15
+
14
16
  @paths = []
15
17
 
16
18
  configuration["paths"].each do |key, value|
@@ -13,6 +13,8 @@ module Rookout
13
13
 
14
14
  class ArithmeticPath < Path
15
15
  def initialize path
16
+ super()
17
+
16
18
  if path.is_a? Hash
17
19
  path = path["path"] || path[:path]
18
20
  end
@@ -20,7 +22,7 @@ module Rookout
20
22
  @raw_path = path
21
23
 
22
24
  if path.start_with?("NOT(") && path.end_with?(")")
23
- @path = path["NOT(".length..-2]
25
+ @path = path[("NOT(".length)..-2]
24
26
  @negation = true
25
27
  else
26
28
  @path = path
@@ -79,6 +79,8 @@ module Rookout
79
79
  end
80
80
 
81
81
  # rubocop:disable Metrics/AbcSize
82
+ # rubocop:disable Metrics/CyclomaticComplexity
83
+ # rubocop:disable Metrics/PerceivedComplexity
82
84
  def make_comp_exp _input, _start, _finish, elements
83
85
  # We can assume the following: atom ( opt_ atom )*
84
86
  # the first (which must be) will be simple atom
@@ -108,7 +110,7 @@ module Rookout
108
110
  flat_elements.each_with_index do |e, index|
109
111
  if e.is_a?(Opt) && e.level == level
110
112
  result = e.execute_operation flat_elements[index - 1], flat_elements[index + 1]
111
- flat_elements = flat_elements[0...index - 1] + [result] + flat_elements[index + 2..-1]
113
+ flat_elements = flat_elements[0...index - 1] + [result] + flat_elements[index + 2..]
112
114
  restart_scan = true
113
115
  break
114
116
  end
@@ -122,6 +124,8 @@ module Rookout
122
124
 
123
125
  flat_elements[0]
124
126
  end
127
+ # rubocop:enable Metrics/PerceivedComplexity
128
+ # rubocop:enable Metrics/CyclomaticComplexity
125
129
  # rubocop:enable Metrics/AbcSize
126
130
 
127
131
  def make_opt _input, _start, _finish, elements
@@ -50,9 +50,10 @@ module Rookout
50
50
  # If it's a dict, scan the keys, compensating for additional abstraction
51
51
  if b.is_a? Hash
52
52
  b.each_key do |key|
53
- if key.is_a? ObjectMarker
53
+ case key
54
+ when ObjectMarker
54
55
  return true if key.obj == a
55
- elsif key == a
56
+ when a
56
57
  return true
57
58
  end
58
59
  end
@@ -62,9 +63,10 @@ module Rookout
62
63
  # If it's an array, scan the value, compensating for additional abstraction
63
64
  if b.is_a? Array
64
65
  b.each do |value|
65
- if value.is_a? ObjectMarker
66
+ case value
67
+ when ObjectMarker
66
68
  return true if value.obj == a
67
- elsif value == a
69
+ when a
68
70
  return true
69
71
  end
70
72
  end
@@ -7,7 +7,11 @@ module Rookout
7
7
  require_relative "../../../exceptions"
8
8
  require_relative "../../namespaces/container_namespace"
9
9
 
10
- class Marker; end
10
+ # rubocop:disable Lint/EmptyClass
11
+ class Marker
12
+ # Empty base class
13
+ end
14
+ # rubocop:enable Lint/EmptyClass
11
15
 
12
16
  class Operation < Marker
13
17
  def read _namespace, _create
@@ -21,6 +25,7 @@ module Rookout
21
25
 
22
26
  class FunctionOperation < Operation
23
27
  def initialize name, args
28
+ super()
24
29
  @name = name
25
30
  @args = args
26
31
  end
@@ -32,6 +37,7 @@ module Rookout
32
37
 
33
38
  class AttributeOperation < Operation
34
39
  def initialize name
40
+ super()
35
41
  @name = name
36
42
  end
37
43
 
@@ -49,6 +55,7 @@ module Rookout
49
55
 
50
56
  class LookupOperation < Operation
51
57
  def initialize text
58
+ super()
52
59
  if (text.start_with?("'") && text.end_with?("'")) || (text.start_with?("\"") && text.end_with?("\""))
53
60
  @key = text[1...-1]
54
61
  else
@@ -63,11 +70,13 @@ module Rookout
63
70
 
64
71
  class ObjectMarker < Marker
65
72
  def initialize text, obj
73
+ super()
66
74
  @text = text
67
75
  @obj = obj
68
76
  end
69
77
 
70
- attr_reader :text, :obj
78
+ attr_reader :text
79
+ attr_reader :obj
71
80
 
72
81
  def to_s
73
82
  @obj.to_s
@@ -136,6 +145,8 @@ module Rookout
136
145
 
137
146
  class Opt < Marker
138
147
  def initialize opt
148
+ super()
149
+
139
150
  @opt = opt
140
151
  @level = nil
141
152
 
@@ -160,9 +171,8 @@ module Rookout
160
171
  return
161
172
  end
162
173
 
163
- unless first_obj.nil?
164
- raise Exceptions::RookNonPrimitiveObjectType, first_obj.class.to_s unless
165
- PRIMITIVES.include? first_obj.class
174
+ if !first_obj.nil? && !(PRIMITIVES.include? first_obj.class)
175
+ raise Exceptions::RookNonPrimitiveObjectType, first_obj.class.to_s
166
176
  end
167
177
 
168
178
  return if second_obj.nil?
@@ -5,8 +5,6 @@ module Rookout
5
5
  require_relative "paths/arithmetic_path"
6
6
 
7
7
  class ProcessorFactory
8
- def initialize; end
9
-
10
8
  def create_operation configuration
11
9
  Operations::SetOperation.new configuration, self
12
10
  end
@@ -24,7 +24,9 @@ module Rookout
24
24
  end
25
25
  end
26
26
 
27
- attr_reader :message, :exception, :parameters
27
+ attr_reader :message
28
+ attr_reader :exception
29
+ attr_reader :parameters
28
30
 
29
31
  def dumps
30
32
  parameters = NamespaceSerializer.dump Namespaces::RubyObjectNamespace.new(@parameters), false
@@ -40,7 +40,7 @@ module Rookout
40
40
  @services_started = false
41
41
  end
42
42
 
43
- def connect token: nil, host: nil, port: nil, proxy: nil, labels: [], async_start: false, fork: false,
43
+ def connect token: nil, host: nil, port: nil, proxy: nil, labels: {}, async_start: false, fork: false,
44
44
  throw_errors: false
45
45
  raise Exceptions::RookInterfaceException, "Multiple connection attempts not supported!" unless @agent_com.nil?
46
46
 
@@ -82,9 +82,10 @@ module Rookout
82
82
  private
83
83
 
84
84
  def check_version_supported
85
- raise Exceptions:: RookVersionNotSupported.new("platform", RUBY_ENGINE) unless RUBY_ENGINE == "ruby"
85
+ raise Exceptions::RookVersionNotSupported.new("platform", RUBY_ENGINE) unless RUBY_ENGINE == "ruby"
86
86
  raise Exceptions::RookVersionNotSupported.new("version", RUBY_VERSION) unless
87
- RUBY_VERSION.start_with?("2.7") || RUBY_VERSION.start_with?("2.6")
87
+ RUBY_VERSION.start_with?("2.7") || RUBY_VERSION.start_with?("2.6") ||
88
+ RUBY_VERSION.start_with?("3.0") || RUBY_VERSION.start_with?("3.1")
88
89
  end
89
90
  end
90
91
  end
@@ -11,7 +11,8 @@ module Rookout
11
11
  @method = method
12
12
  end
13
13
 
14
- attr_reader :lineno, :method
14
+ attr_reader :lineno
15
+ attr_reader :method
15
16
  end
16
17
 
17
18
  class PositionResolver
@@ -54,7 +55,7 @@ module Rookout
54
55
  end
55
56
 
56
57
  def clear_augs
57
- @augs.values.each do |aug_id|
58
+ @augs.each_value do |aug_id|
58
59
  remove_aug aug_id
59
60
  end
60
61
 
@@ -26,7 +26,7 @@ module Rookout
26
26
 
27
27
  # We add and remove a dummy trace point to re-align the tracing mechanism as a result of some bug in adding
28
28
  # a breakpoint
29
- dummy_trace_point = TracePoint.new(:line) {}
29
+ dummy_trace_point = TracePoint.new(:line) {} # Dummy
30
30
  dummy_trace_point.enable target: position.method, target_line: position.lineno
31
31
  dummy_trace_point.disable
32
32
 
@@ -53,7 +53,7 @@ module Rookout
53
53
  end
54
54
 
55
55
  def clear_augs
56
- @augs.values.each do |aug_id|
56
+ @augs.each_value do |aug_id|
57
57
  remove_aug aug_id
58
58
  end
59
59
 
data/lib/rookout/utils.rb CHANGED
@@ -15,6 +15,6 @@ module Utils
15
15
  def time_to_nanoseconds time_obj
16
16
  secs = time_obj.to_i
17
17
  nsecs = time_obj.nsec
18
- (10**9) * secs + nsecs
18
+ ((10**9) * secs) + nsecs
19
19
  end
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module Rookout
2
- VERSION = "0.1.35".freeze
2
+ VERSION = "0.1.38".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rookout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.35
4
+ version: 0.1.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liran Haimovitch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-15 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: binding_of_caller
@@ -86,56 +86,70 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 1.24.0
89
+ version: 1.26.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 1.24.0
96
+ version: 1.26.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: async
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: minitest
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
102
116
  - !ruby/object:Gem::Version
103
- version: '5.14'
117
+ version: 5.16.2
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
- version: '5.14'
124
+ version: 5.16.2
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: minitest-autotest
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
116
130
  - !ruby/object:Gem::Version
117
- version: '1.0'
131
+ version: 1.1.1
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: '1.0'
138
+ version: 1.1.1
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: minitest-focus
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
130
144
  - !ruby/object:Gem::Version
131
- version: '1.1'
145
+ version: 1.3.1
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
- version: '1.1'
152
+ version: 1.3.1
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: minitest-rg
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +192,20 @@ dependencies:
178
192
  - - ">="
179
193
  - !ruby/object:Gem::Version
180
194
  version: '1.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: hashie
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: 5.0.0
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: 5.0.0
181
209
  description: rookout is the Ruby SDK for the Rookout Debugging Platform
182
210
  email:
183
211
  - support@rookout.com
@@ -271,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
299
  - !ruby/object:Gem::Version
272
300
  version: '0'
273
301
  requirements: []
274
- rubygems_version: 3.1.6
302
+ rubygems_version: 3.3.7
275
303
  signing_key:
276
304
  specification_version: 4
277
305
  summary: rookout is the Ruby SDK for the Rookout Debugging Platform