datadog 2.30.0 → 2.31.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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -1
  3. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +18 -0
  4. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  5. data/ext/datadog_profiling_native_extension/extconf.rb +2 -0
  6. data/ext/libdatadog_api/crashtracker.c +5 -8
  7. data/ext/libdatadog_api/datadog_ruby_common.c +18 -0
  8. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  9. data/ext/libdatadog_api/di.c +79 -0
  10. data/ext/libdatadog_api/extconf.rb +2 -0
  11. data/ext/libdatadog_api/init.c +5 -2
  12. data/ext/libdatadog_extconf_helpers.rb +9 -1
  13. data/lib/datadog/ai_guard/component.rb +2 -0
  14. data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +41 -3
  15. data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
  16. data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
  17. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +3 -1
  18. data/lib/datadog/ai_guard/evaluation/request.rb +14 -9
  19. data/lib/datadog/ai_guard/evaluation/result.rb +3 -1
  20. data/lib/datadog/ai_guard/evaluation.rb +36 -7
  21. data/lib/datadog/ai_guard.rb +26 -8
  22. data/lib/datadog/appsec/autoload.rb +1 -1
  23. data/lib/datadog/appsec/component.rb +11 -7
  24. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
  25. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +6 -7
  26. data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
  27. data/lib/datadog/appsec/instrumentation/gateway.rb +0 -13
  28. data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -0
  29. data/lib/datadog/appsec/utils/http/media_type.rb +1 -2
  30. data/lib/datadog/appsec/utils/http/url_encoded.rb +2 -2
  31. data/lib/datadog/appsec.rb +5 -9
  32. data/lib/datadog/core/configuration/base.rb +17 -5
  33. data/lib/datadog/core/configuration/components.rb +21 -8
  34. data/lib/datadog/core/configuration/config_helper.rb +9 -0
  35. data/lib/datadog/core/configuration/option.rb +30 -5
  36. data/lib/datadog/core/configuration/option_definition.rb +38 -12
  37. data/lib/datadog/core/configuration/options.rb +40 -6
  38. data/lib/datadog/core/configuration/settings.rb +15 -0
  39. data/lib/datadog/core/configuration/supported_configurations.rb +1 -0
  40. data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
  41. data/lib/datadog/core/contrib/rails/utils.rb +7 -3
  42. data/lib/datadog/core/crashtracking/component.rb +3 -3
  43. data/lib/datadog/core/environment/container.rb +2 -2
  44. data/lib/datadog/core/environment/ext.rb +1 -0
  45. data/lib/datadog/core/environment/identity.rb +25 -3
  46. data/lib/datadog/core/environment/process.rb +12 -0
  47. data/lib/datadog/core/metrics/client.rb +5 -5
  48. data/lib/datadog/core/remote/component.rb +38 -21
  49. data/lib/datadog/core/runtime/metrics.rb +1 -1
  50. data/lib/datadog/core/telemetry/component.rb +3 -0
  51. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +2 -3
  52. data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
  53. data/lib/datadog/core/telemetry/event/app_started.rb +151 -169
  54. data/lib/datadog/core/telemetry/event.rb +1 -7
  55. data/lib/datadog/core/telemetry/ext.rb +1 -0
  56. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -0
  57. data/lib/datadog/core/telemetry/worker.rb +20 -0
  58. data/lib/datadog/core/utils/only_once.rb +1 -1
  59. data/lib/datadog/core/utils/spawn_monkey_patch.rb +36 -0
  60. data/lib/datadog/core/workers/async.rb +1 -1
  61. data/lib/datadog/core.rb +0 -1
  62. data/lib/datadog/data_streams/pathway_context.rb +1 -1
  63. data/lib/datadog/di/boot.rb +2 -4
  64. data/lib/datadog/di/component.rb +4 -0
  65. data/lib/datadog/di/instrumenter.rb +10 -4
  66. data/lib/datadog/di/probe_notification_builder.rb +109 -1
  67. data/lib/datadog/di/serializer.rb +1 -1
  68. data/lib/datadog/di.rb +81 -0
  69. data/lib/datadog/kit/enable_core_dumps.rb +1 -1
  70. data/lib/datadog/open_feature/evaluation_engine.rb +1 -1
  71. data/lib/datadog/open_feature/exposures/reporter.rb +1 -1
  72. data/lib/datadog/open_feature/exposures/worker.rb +1 -1
  73. data/lib/datadog/open_feature/remote.rb +1 -1
  74. data/lib/datadog/open_feature/transport.rb +1 -1
  75. data/lib/datadog/opentelemetry/configuration/settings.rb +2 -0
  76. data/lib/datadog/profiling/collectors/code_provenance.rb +2 -3
  77. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +1 -1
  78. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  79. data/lib/datadog/profiling/component.rb +11 -1
  80. data/lib/datadog/profiling/load_native_extension.rb +1 -1
  81. data/lib/datadog/profiling/profiler.rb +0 -4
  82. data/lib/datadog/profiling/scheduler.rb +2 -2
  83. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  84. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  85. data/lib/datadog/profiling.rb +1 -2
  86. data/lib/datadog/single_step_instrument.rb +1 -1
  87. data/lib/datadog/tracing/buffer.rb +3 -3
  88. data/lib/datadog/tracing/component.rb +11 -0
  89. data/lib/datadog/tracing/configuration/settings.rb +2 -1
  90. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -2
  91. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +20 -0
  92. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +3 -1
  93. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  94. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  95. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  96. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  97. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  98. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  99. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  100. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  101. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -1
  102. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  103. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -1
  104. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  105. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -1
  106. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
  107. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
  108. data/lib/datadog/tracing/contrib/configurable.rb +18 -3
  109. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -1
  110. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  111. data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -2
  112. data/lib/datadog/tracing/contrib/grape/endpoint.rb +5 -5
  113. data/lib/datadog/tracing/contrib/http/instrumentation.rb +1 -1
  114. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +1 -1
  115. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -1
  116. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  117. data/lib/datadog/tracing/contrib/rails/patcher.rb +0 -1
  118. data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
  119. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +2 -2
  120. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  121. data/lib/datadog/tracing/contrib/status_range_matcher.rb +4 -0
  122. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  123. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  124. data/lib/datadog/tracing/event.rb +1 -1
  125. data/lib/datadog/tracing/remote.rb +1 -1
  126. data/lib/datadog/tracing/sampling/ext.rb +2 -0
  127. data/lib/datadog/tracing/sampling/priority_sampler.rb +13 -0
  128. data/lib/datadog/tracing/sampling/rule.rb +1 -1
  129. data/lib/datadog/tracing/sampling/rule_sampler.rb +54 -25
  130. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  131. data/lib/datadog/tracing/span_operation.rb +1 -1
  132. data/lib/datadog/tracing/trace_operation.rb +50 -6
  133. data/lib/datadog/tracing/tracer.rb +25 -0
  134. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  135. data/lib/datadog/tracing/transport/trace_formatter.rb +1 -1
  136. data/lib/datadog/version.rb +1 -1
  137. metadata +13 -7
@@ -27,6 +27,8 @@ module Datadog
27
27
  include Metadata::Tagging
28
28
 
29
29
  DEFAULT_MAX_LENGTH = 100_000
30
+ AUTO_SAMPLING_PRIORITIES = [Sampling::Ext::Priority::AUTO_KEEP, Sampling::Ext::Priority::AUTO_REJECT].freeze
31
+ RECONSIDERABLE_DECISIONS = [Sampling::Ext::Decision::DEFAULT, Sampling::Ext::Decision::AGENT_RATE].freeze
30
32
 
31
33
  attr_accessor \
32
34
  :agent_sample_rate,
@@ -51,7 +53,6 @@ module Datadog
51
53
 
52
54
  attr_writer \
53
55
  :name,
54
- :resource,
55
56
  :sampled,
56
57
  :service
57
58
 
@@ -127,6 +128,8 @@ module Datadog
127
128
  @finished = false
128
129
  @spans = []
129
130
  @auto_finish = !!auto_finish
131
+ @flushed = false
132
+ @propagated = false
130
133
  end
131
134
 
132
135
  def full?
@@ -170,6 +173,17 @@ module Datadog
170
173
  set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
171
174
  end
172
175
 
176
+ def resource=(value)
177
+ previous_resource = @resource
178
+ @resource = value
179
+
180
+ return if !!previous_resource || value.nil?
181
+
182
+ events.trace_resource_change.publish(self)
183
+ rescue => e
184
+ logger.debug { "Error updating trace resource: #{e} Backtrace: #{e.backtrace.first(3)}" }
185
+ end
186
+
173
187
  def name
174
188
  @name || root_span&.name
175
189
  end
@@ -208,6 +222,12 @@ module Datadog
208
222
  !@resource.nil?
209
223
  end
210
224
 
225
+ def reconsider_resource_sample?
226
+ return false if @resource.nil?
227
+
228
+ reconsider_rule_sample?
229
+ end
230
+
211
231
  def service
212
232
  @service || root_span&.service
213
233
  end
@@ -274,15 +294,15 @@ module Datadog
274
294
  parent_id = parent ? parent.id : @parent_span_id || 0
275
295
 
276
296
  # Build events
277
- events ||= SpanOperation::Events.new(logger: logger)
297
+ span_events = events || SpanOperation::Events.new(logger: logger)
278
298
 
279
299
  # Before start: activate the span, publish events.
280
- events.before_start.subscribe do |span_op|
300
+ span_events.before_start.subscribe do |span_op|
281
301
  start_span(span_op)
282
302
  end
283
303
 
284
304
  # After finish: deactivate the span, record, publish events.
285
- events.after_finish.subscribe do |span, span_op|
305
+ span_events.after_finish.subscribe do |span, span_op|
286
306
  finish_span(span, span_op, parent)
287
307
  end
288
308
 
@@ -290,7 +310,7 @@ module Datadog
290
310
  SpanOperation.new(
291
311
  op_name,
292
312
  logger: logger,
293
- events: events,
313
+ events: span_events,
294
314
  on_error: on_error,
295
315
  parent_id: parent_id,
296
316
  resource: resource || op_name,
@@ -319,6 +339,7 @@ module Datadog
319
339
  # Copy out completed spans
320
340
  spans = @spans.dup
321
341
  @spans = []
342
+ @flushed = true
322
343
 
323
344
  spans = yield(spans) if block_given?
324
345
 
@@ -359,6 +380,7 @@ module Datadog
359
380
  span_id = @active_span&.id
360
381
  span_id ||= @parent_span_id unless finished?
361
382
  # sample the trace_operation with the tracer
383
+ @propagated = true
362
384
  events.trace_propagated.publish(self)
363
385
 
364
386
  TraceDigest.new(
@@ -430,13 +452,15 @@ module Datadog
430
452
  :span_before_start,
431
453
  :span_finished,
432
454
  :trace_finished,
433
- :trace_propagated
455
+ :trace_propagated,
456
+ :trace_resource_change
434
457
 
435
458
  def initialize
436
459
  @span_before_start = SpanBeforeStart.new
437
460
  @span_finished = SpanFinished.new
438
461
  @trace_finished = TraceFinished.new
439
462
  @trace_propagated = TracePropagated.new
463
+ @trace_resource_change = TraceResourceChange.new
440
464
  end
441
465
 
442
466
  # Triggered before a span starts.
@@ -476,6 +500,14 @@ module Datadog
476
500
  subscribe(&block)
477
501
  end
478
502
  end
503
+
504
+ # Triggered when the resource name is set
505
+ # This is used to reconsider trace sampling on resource name change
506
+ class TraceResourceChange < Tracing::Event
507
+ def initialize
508
+ super(:trace_resource_change)
509
+ end
510
+ end
479
511
  end
480
512
 
481
513
  private
@@ -582,12 +614,24 @@ module Datadog
582
614
  meta.select { |name, _| name.start_with?(Metadata::Ext::Distributed::TAGS_PREFIX) }
583
615
  end
584
616
 
617
+ def reconsider_rule_sample?
618
+ decision = get_tag(Metadata::Ext::Distributed::TAG_DECISION_MAKER)
619
+
620
+ return false if remote_parent || @propagated || @flushed
621
+ return false unless AUTO_SAMPLING_PRIORITIES.include?(@sampling_priority)
622
+ return false if decision && !RECONSIDERABLE_DECISIONS.include?(decision)
623
+
624
+ true
625
+ end
626
+
585
627
  def reset
586
628
  @root_span = nil
587
629
  @active_span = nil
588
630
  @active_span_count = 0
589
631
  @finished = false
590
632
  @spans = []
633
+ @flushed = false
634
+ @propagated = false
591
635
  end
592
636
  end
593
637
  end
@@ -307,6 +307,19 @@ module Datadog
307
307
  end
308
308
  end
309
309
 
310
+ def reconsider_trace_sampling_on_resource(trace_op)
311
+ return unless trace_op.reconsider_resource_sample?
312
+ return unless @sampler.respond_to?(:reconsider_sample_resource!)
313
+
314
+ @sampler.reconsider_sample_resource!(trace_op)
315
+ rescue => e
316
+ RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE.run do
317
+ logger.warn do
318
+ "Failed to reconsider trace sampling: #{e.class.name} #{e} at #{Array(e.backtrace).first}"
319
+ end
320
+ end
321
+ end
322
+
310
323
  # @!visibility private
311
324
  # TODO: make this private
312
325
  def trace_completed
@@ -415,6 +428,15 @@ module Datadog
415
428
  sample_span(event_trace_op, event_span)
416
429
  flush_trace(event_trace_op)
417
430
  end
431
+
432
+ # Conditionally subscribe to the less common sampling rules below, to avoid
433
+ # measurable unnecessary performance overhead when they are not present.
434
+
435
+ if @sampler.respond_to?(:resource_sampling?) && @sampler.resource_sampling?
436
+ events.trace_resource_change.subscribe do |event_trace_op|
437
+ reconsider_trace_sampling_on_resource(event_trace_op)
438
+ end
439
+ end
418
440
  end
419
441
 
420
442
  # Creates a new TraceOperation, with events bounds to this Tracer instance.
@@ -534,6 +556,9 @@ module Datadog
534
556
  SAMPLE_TRACE_LOG_ONLY_ONCE = Core::Utils::OnlyOnce.new
535
557
  private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
536
558
 
559
+ RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE = Core::Utils::OnlyOnce.new
560
+ private_constant :RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE
561
+
537
562
  def sample_span(trace_op, span)
538
563
  @span_sampler.sample!(trace_op, span)
539
564
  rescue => e
@@ -44,7 +44,7 @@ module Datadog
44
44
  response
45
45
  rescue => e
46
46
  message =
47
- "Internal error during IO transport request. Cause: #{e.class.name}: #{e.message} " \
47
+ "Internal error during IO transport request. Cause: #{e.class}: #{e} " \
48
48
  "Location: #{Array(e.backtrace).first}"
49
49
 
50
50
  # Log error
@@ -117,7 +117,7 @@ module Datadog
117
117
 
118
118
  root_span.set_tag(
119
119
  Tracing::Metadata::Ext::Distributed::TAG_KNUTH_SAMPLING_RATE,
120
- format('%.6g', rate)
120
+ format('%.6f', (rate * 1e6).round / 1e6.to_f).sub(/\.?0+\z/, '')
121
121
  )
122
122
  end
123
123
 
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 30
6
+ MINOR = 31
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.30.0
4
+ version: 2.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-19 00:00:00.000000000 Z
11
+ date: 2026-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 29.0.0.1.0
67
+ version: 30.0.0.1.0
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 29.0.0.1.0
74
+ version: 30.0.0.1.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: logger
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -173,6 +173,7 @@ files:
173
173
  - ext/libdatadog_api/datadog_ruby_common.c
174
174
  - ext/libdatadog_api/datadog_ruby_common.h
175
175
  - ext/libdatadog_api/ddsketch.c
176
+ - ext/libdatadog_api/di.c
176
177
  - ext/libdatadog_api/extconf.rb
177
178
  - ext/libdatadog_api/feature_flags.c
178
179
  - ext/libdatadog_api/feature_flags.h
@@ -195,6 +196,8 @@ files:
195
196
  - lib/datadog/ai_guard/contrib/ruby_llm/integration.rb
196
197
  - lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb
197
198
  - lib/datadog/ai_guard/evaluation.rb
199
+ - lib/datadog/ai_guard/evaluation/content_builder.rb
200
+ - lib/datadog/ai_guard/evaluation/content_part.rb
198
201
  - lib/datadog/ai_guard/evaluation/message.rb
199
202
  - lib/datadog/ai_guard/evaluation/no_op_result.rb
200
203
  - lib/datadog/ai_guard/evaluation/request.rb
@@ -339,6 +342,7 @@ files:
339
342
  - lib/datadog/core/configuration/settings.rb
340
343
  - lib/datadog/core/configuration/stable_config.rb
341
344
  - lib/datadog/core/configuration/supported_configurations.rb
345
+ - lib/datadog/core/contrib/rails/railtie.rb
342
346
  - lib/datadog/core/contrib/rails/utils.rb
343
347
  - lib/datadog/core/crashtracking/component.rb
344
348
  - lib/datadog/core/crashtracking/tag_builder.rb
@@ -414,6 +418,7 @@ files:
414
418
  - lib/datadog/core/telemetry/event/app_closing.rb
415
419
  - lib/datadog/core/telemetry/event/app_dependencies_loaded.rb
416
420
  - lib/datadog/core/telemetry/event/app_endpoints_loaded.rb
421
+ - lib/datadog/core/telemetry/event/app_extended_heartbeat.rb
417
422
  - lib/datadog/core/telemetry/event/app_heartbeat.rb
418
423
  - lib/datadog/core/telemetry/event/app_integrations_change.rb
419
424
  - lib/datadog/core/telemetry/event/app_started.rb
@@ -467,6 +472,7 @@ files:
467
472
  - lib/datadog/core/utils/only_once_successful.rb
468
473
  - lib/datadog/core/utils/safe_dup.rb
469
474
  - lib/datadog/core/utils/sequence.rb
475
+ - lib/datadog/core/utils/spawn_monkey_patch.rb
470
476
  - lib/datadog/core/utils/time.rb
471
477
  - lib/datadog/core/utils/truncation.rb
472
478
  - lib/datadog/core/utils/url.rb
@@ -1103,9 +1109,9 @@ licenses:
1103
1109
  - Apache-2.0
1104
1110
  metadata:
1105
1111
  allowed_push_host: https://rubygems.org
1106
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.30.0/CHANGELOG.md
1107
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.30.0
1108
- post_install_message:
1112
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.31.0/CHANGELOG.md
1113
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.31.0
1114
+ post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
1109
1115
  rdoc_options: []
1110
1116
  require_paths:
1111
1117
  - lib