appsignal 3.1.1-java → 3.1.2-java
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/appsignal.gemspec +5 -1
- data/ext/agent.yml +32 -25
- data/lib/appsignal/probes/helpers.rb +21 -8
- data/lib/appsignal/probes/mri.rb +16 -18
- data/lib/appsignal/probes/sidekiq.rb +7 -6
- data/lib/appsignal/version.rb +1 -1
- data/spec/lib/appsignal/probes/mri_spec.rb +30 -2
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2509a780468f8298d79de2f28fd1ccf7ea5318a059d42edc6f719446cbcaa99f
|
|
4
|
+
data.tar.gz: 2e39e33bc84d311184d446d24adf10629e3c62adde66e832cc64870504b1c6d0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b25fd36dad63cc9bc8a39c04f81aebfad62ca322d54e94778a6c8480660749930076f36f92c686ecd9bf212e4092a9290dd916f1af2580af1502543333a2a373
|
|
7
|
+
data.tar.gz: 2a8b44f0c4c1a7828a6679000ed90a1f143a957757ee842fb59d078134502d88bb7dbc453a5dcf80e55ccaf7e265c191f6a2425853d570a6a48820c9972554f7
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# AppSignal for Ruby gem Changelog
|
|
2
2
|
|
|
3
|
+
## 3.1.2
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- [1b95bb4c](https://github.com/appsignal/appsignal-ruby/commit/1b95bb4c8df08128cfa2db0d918ffcb909e5ee4c) patch - Report Garbage Collection total time metric as the delta between measurements. This reports a more user friendly metric that doesn't always goes up until the app restarts or gets a new deploy. This metric is reported 0 by default without `GC::Profiler.enable` having been called.
|
|
8
|
+
- [61a78fb0](https://github.com/appsignal/appsignal-ruby/commit/61a78fb028b04ae6f0a4ca1fc469d744f23c5029) patch - Bump agent to 06391fb
|
|
9
|
+
|
|
10
|
+
- Accept "warning" value for the `log_level` config option.
|
|
11
|
+
- Add aarch64 Linux musl build.
|
|
12
|
+
- Improve debug logging from the extension.
|
|
13
|
+
- Fix high CPU issue for appsignal-agent when nothing could be read from the socket.
|
|
14
|
+
|
|
3
15
|
## 3.1.1
|
|
4
16
|
|
|
5
17
|
### Changed
|
data/appsignal.gemspec
CHANGED
|
@@ -39,12 +39,16 @@ Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
|
|
|
39
39
|
gem.add_development_dependency "rake", ">= 12"
|
|
40
40
|
gem.add_development_dependency "rspec", "~> 3.8"
|
|
41
41
|
gem.add_development_dependency "timecop"
|
|
42
|
-
gem.add_development_dependency "webmock"
|
|
43
42
|
gem.add_development_dependency "yard", ">= 0.9.20"
|
|
44
43
|
gem.add_development_dependency "pry"
|
|
45
44
|
|
|
46
45
|
# Dependencies that need to be locked to a specific version in developement
|
|
47
46
|
ruby_version = Gem::Version.new(RUBY_VERSION)
|
|
47
|
+
if ruby_version < Gem::Version.new("2.3.0")
|
|
48
|
+
gem.add_development_dependency "webmock", "3.14.0"
|
|
49
|
+
else
|
|
50
|
+
gem.add_development_dependency "webmock"
|
|
51
|
+
end
|
|
48
52
|
if ruby_version > Gem::Version.new("2.5.0")
|
|
49
53
|
# RuboCop dependency parallel depends on Ruby > 2.4
|
|
50
54
|
gem.add_development_dependency "rubocop", "0.50.0"
|
data/ext/agent.yml
CHANGED
|
@@ -3,92 +3,99 @@
|
|
|
3
3
|
# appsignal-agent repository.
|
|
4
4
|
# Modifications to this file will be overwritten with the next agent release.
|
|
5
5
|
---
|
|
6
|
-
version:
|
|
6
|
+
version: '06391fb'
|
|
7
7
|
mirrors:
|
|
8
8
|
- https://appsignal-agent-releases.global.ssl.fastly.net
|
|
9
9
|
- https://d135dj0rjqvssy.cloudfront.net
|
|
10
10
|
triples:
|
|
11
11
|
x86_64-darwin:
|
|
12
12
|
static:
|
|
13
|
-
checksum:
|
|
13
|
+
checksum: 9bf41c183d94c80e980f57ea2e29d08bae97e8097b5284a2b91a5484bf866f8c
|
|
14
14
|
filename: appsignal-x86_64-darwin-all-static.tar.gz
|
|
15
15
|
dynamic:
|
|
16
|
-
checksum:
|
|
16
|
+
checksum: 4d3789e65cf00e446600e883d95d097323ebb3835703c67c8d09f434f09ab496
|
|
17
17
|
filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
|
|
18
18
|
universal-darwin:
|
|
19
19
|
static:
|
|
20
|
-
checksum:
|
|
20
|
+
checksum: 9bf41c183d94c80e980f57ea2e29d08bae97e8097b5284a2b91a5484bf866f8c
|
|
21
21
|
filename: appsignal-x86_64-darwin-all-static.tar.gz
|
|
22
22
|
dynamic:
|
|
23
|
-
checksum:
|
|
23
|
+
checksum: 4d3789e65cf00e446600e883d95d097323ebb3835703c67c8d09f434f09ab496
|
|
24
24
|
filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
|
|
25
25
|
aarch64-darwin:
|
|
26
26
|
static:
|
|
27
|
-
checksum:
|
|
27
|
+
checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
|
|
28
28
|
filename: appsignal-aarch64-darwin-all-static.tar.gz
|
|
29
29
|
dynamic:
|
|
30
|
-
checksum:
|
|
30
|
+
checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
|
|
31
31
|
filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
|
|
32
32
|
arm64-darwin:
|
|
33
33
|
static:
|
|
34
|
-
checksum:
|
|
34
|
+
checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
|
|
35
35
|
filename: appsignal-aarch64-darwin-all-static.tar.gz
|
|
36
36
|
dynamic:
|
|
37
|
-
checksum:
|
|
37
|
+
checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
|
|
38
38
|
filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
|
|
39
39
|
arm-darwin:
|
|
40
40
|
static:
|
|
41
|
-
checksum:
|
|
41
|
+
checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
|
|
42
42
|
filename: appsignal-aarch64-darwin-all-static.tar.gz
|
|
43
43
|
dynamic:
|
|
44
|
-
checksum:
|
|
44
|
+
checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
|
|
45
45
|
filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
|
|
46
46
|
aarch64-linux:
|
|
47
47
|
static:
|
|
48
|
-
checksum:
|
|
48
|
+
checksum: 0f2430e637eb77ce2093f021777087e87cb1e7be7c86a53771172696791c4879
|
|
49
49
|
filename: appsignal-aarch64-linux-all-static.tar.gz
|
|
50
50
|
dynamic:
|
|
51
|
-
checksum:
|
|
51
|
+
checksum: 0e4f9305aeaaa2d7847e83be04227b865723a0591574108d78040b5921a677a7
|
|
52
52
|
filename: appsignal-aarch64-linux-all-dynamic.tar.gz
|
|
53
53
|
i686-linux:
|
|
54
54
|
static:
|
|
55
|
-
checksum:
|
|
55
|
+
checksum: 449ba623aaa1853c2d211bf1e2d3a14e5ae09225a62457cbdbcc0983a5713a52
|
|
56
56
|
filename: appsignal-i686-linux-all-static.tar.gz
|
|
57
57
|
dynamic:
|
|
58
|
-
checksum:
|
|
58
|
+
checksum: dae994292d602eaf0910bd2ce53f0163e19767a4cbb8e5d0db99c0010d6df486
|
|
59
59
|
filename: appsignal-i686-linux-all-dynamic.tar.gz
|
|
60
60
|
x86-linux:
|
|
61
61
|
static:
|
|
62
|
-
checksum:
|
|
62
|
+
checksum: 449ba623aaa1853c2d211bf1e2d3a14e5ae09225a62457cbdbcc0983a5713a52
|
|
63
63
|
filename: appsignal-i686-linux-all-static.tar.gz
|
|
64
64
|
dynamic:
|
|
65
|
-
checksum:
|
|
65
|
+
checksum: dae994292d602eaf0910bd2ce53f0163e19767a4cbb8e5d0db99c0010d6df486
|
|
66
66
|
filename: appsignal-i686-linux-all-dynamic.tar.gz
|
|
67
67
|
x86_64-linux:
|
|
68
68
|
static:
|
|
69
|
-
checksum:
|
|
69
|
+
checksum: 394796c0ddeb4881c9f2e6ce82f840e66bcb69e027324f6c04f6671067445fbb
|
|
70
70
|
filename: appsignal-x86_64-linux-all-static.tar.gz
|
|
71
71
|
dynamic:
|
|
72
|
-
checksum:
|
|
72
|
+
checksum: 9ca4762c464482b0a5a89898a839388597dd57a17a21527a67f3e3db0e540a03
|
|
73
73
|
filename: appsignal-x86_64-linux-all-dynamic.tar.gz
|
|
74
74
|
x86_64-linux-musl:
|
|
75
75
|
static:
|
|
76
|
-
checksum:
|
|
76
|
+
checksum: 673271c8c5fd55053d8a719bcd307f787db4ca4633baf8cf961c442bf1805614
|
|
77
77
|
filename: appsignal-x86_64-linux-musl-all-static.tar.gz
|
|
78
78
|
dynamic:
|
|
79
|
-
checksum:
|
|
79
|
+
checksum: 609d59376d6633652015e838eb649229fe2523d443a5471232b869f48eb99640
|
|
80
80
|
filename: appsignal-x86_64-linux-musl-all-dynamic.tar.gz
|
|
81
|
+
aarch64-linux-musl:
|
|
82
|
+
static:
|
|
83
|
+
checksum: e90ca19bf61596be022ba04897e8902b3401add58f351a40a3d3a7af241d0bbb
|
|
84
|
+
filename: appsignal-aarch64-linux-musl-all-static.tar.gz
|
|
85
|
+
dynamic:
|
|
86
|
+
checksum: afb66c65fb82b672887bc6b6e82d82f09d9855a5497a7abb06b438dadea97aca
|
|
87
|
+
filename: appsignal-aarch64-linux-musl-all-dynamic.tar.gz
|
|
81
88
|
x86_64-freebsd:
|
|
82
89
|
static:
|
|
83
|
-
checksum:
|
|
90
|
+
checksum: cb45da91c51123859e5ef5cea850460c28d6e77dfa08b90375178d9017162ba8
|
|
84
91
|
filename: appsignal-x86_64-freebsd-all-static.tar.gz
|
|
85
92
|
dynamic:
|
|
86
|
-
checksum:
|
|
93
|
+
checksum: 6a03e02c2526e05edaa7fa932b2e764318c63ec93d517c6c00f6b7541bfe71f3
|
|
87
94
|
filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
|
|
88
95
|
amd64-freebsd:
|
|
89
96
|
static:
|
|
90
|
-
checksum:
|
|
97
|
+
checksum: cb45da91c51123859e5ef5cea850460c28d6e77dfa08b90375178d9017162ba8
|
|
91
98
|
filename: appsignal-x86_64-freebsd-all-static.tar.gz
|
|
92
99
|
dynamic:
|
|
93
|
-
checksum:
|
|
100
|
+
checksum: 6a03e02c2526e05edaa7fa932b2e764318c63ec93d517c6c00f6b7541bfe71f3
|
|
94
101
|
filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
|
|
@@ -7,22 +7,35 @@ module Appsignal
|
|
|
7
7
|
@gauge_delta_cache ||= {}
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
# Calculate the delta of two values for a gauge metric
|
|
10
|
+
# Calculate the delta of two values for a gauge metric.
|
|
11
11
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
12
|
+
# When this method is called, the given value is stored in a cache
|
|
13
|
+
# under the given cache key.
|
|
14
|
+
#
|
|
15
|
+
# A block must be passed to this method. The first time the method
|
|
16
|
+
# is called for a given cache key, the block will not be yielded to.
|
|
17
|
+
# In subsequent calls, the delta between the previously stored value
|
|
18
|
+
# in the cache for that key and the value given in this invocation
|
|
19
|
+
# will be yielded to the block.
|
|
20
|
+
#
|
|
21
|
+
# This is used for absolute counter values which we want to track as
|
|
22
|
+
# gauges.
|
|
15
23
|
#
|
|
16
24
|
# @example
|
|
17
|
-
# gauge_delta :
|
|
18
|
-
#
|
|
19
|
-
#
|
|
25
|
+
# gauge_delta :with_block, 10 do |delta|
|
|
26
|
+
# puts "this block will not be yielded to"
|
|
27
|
+
# end
|
|
28
|
+
# gauge_delta :with_block, 15 do |delta|
|
|
29
|
+
# # `delta` has a value of `5`
|
|
30
|
+
# puts "this block will be yielded to with delta = #{delta}"
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
20
33
|
def gauge_delta(cache_key, value)
|
|
21
34
|
previous_value = gauge_delta_cache[cache_key]
|
|
22
35
|
gauge_delta_cache[cache_key] = value
|
|
23
36
|
return unless previous_value
|
|
24
37
|
|
|
25
|
-
value - previous_value
|
|
38
|
+
yield value - previous_value
|
|
26
39
|
end
|
|
27
40
|
end
|
|
28
41
|
end
|
data/lib/appsignal/probes/mri.rb
CHANGED
|
@@ -8,13 +8,10 @@ module Appsignal
|
|
|
8
8
|
defined?(::RubyVM) && ::RubyVM.respond_to?(:stat)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
@garbage_collection_profiler ||= Appsignal::GarbageCollectionProfiler.new
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def initialize(appsignal = Appsignal)
|
|
11
|
+
def initialize(appsignal: Appsignal, gc_profiler: Appsignal::GarbageCollectionProfiler.new)
|
|
16
12
|
Appsignal.logger.debug("Initializing VM probe")
|
|
17
13
|
@appsignal = appsignal
|
|
14
|
+
@gc_profiler = gc_profiler
|
|
18
15
|
end
|
|
19
16
|
|
|
20
17
|
# @api private
|
|
@@ -34,24 +31,25 @@ module Appsignal
|
|
|
34
31
|
)
|
|
35
32
|
|
|
36
33
|
set_gauge("thread_count", Thread.list.size)
|
|
37
|
-
|
|
34
|
+
gauge_delta(:gc_total_time, @gc_profiler.total_time) do |total_time|
|
|
35
|
+
set_gauge("gc_total_time", total_time) if total_time > 0
|
|
36
|
+
end
|
|
38
37
|
|
|
39
38
|
gc_stats = GC.stat
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
)
|
|
45
|
-
|
|
39
|
+
gauge_delta(
|
|
40
|
+
:allocated_objects,
|
|
41
|
+
gc_stats[:total_allocated_objects] || gc_stats[:total_allocated_object]
|
|
42
|
+
) do |allocated_objects|
|
|
43
|
+
set_gauge("allocated_objects", allocated_objects)
|
|
44
|
+
end
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
gauge_delta(:gc_count, GC.count) do |gc_count|
|
|
47
|
+
set_gauge("gc_count", gc_count, :metric => :gc_count)
|
|
48
|
+
end
|
|
49
|
+
gauge_delta(:minor_gc_count, gc_stats[:minor_gc_count]) do |minor_gc_count|
|
|
51
50
|
set_gauge("gc_count", minor_gc_count, :metric => :minor_gc_count)
|
|
52
51
|
end
|
|
53
|
-
|
|
54
|
-
if major_gc_count
|
|
52
|
+
gauge_delta(:major_gc_count, gc_stats[:major_gc_count]) do |major_gc_count|
|
|
55
53
|
set_gauge("gc_count", major_gc_count, :metric => :major_gc_count)
|
|
56
54
|
end
|
|
57
55
|
|
|
@@ -44,15 +44,16 @@ module Appsignal
|
|
|
44
44
|
|
|
45
45
|
gauge "worker_count", stats.workers_size
|
|
46
46
|
gauge "process_count", stats.processes_size
|
|
47
|
-
|
|
48
|
-
if jobs_processed
|
|
47
|
+
gauge_delta :jobs_processed, stats.processed do |jobs_processed|
|
|
49
48
|
gauge "job_count", jobs_processed, :status => :processed
|
|
50
49
|
end
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
gauge_delta :jobs_failed, stats.failed do |jobs_failed|
|
|
51
|
+
gauge "job_count", jobs_failed, :status => :failed
|
|
52
|
+
end
|
|
53
53
|
gauge "job_count", stats.retry_size, :status => :retry_queue
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
gauge_delta :jobs_dead, stats.dead_size do |jobs_dead|
|
|
55
|
+
gauge "job_count", jobs_dead, :status => :died
|
|
56
|
+
end
|
|
56
57
|
gauge "job_count", stats.scheduled_size, :status => :scheduled
|
|
57
58
|
gauge "job_count", stats.enqueued, :status => :enqueued
|
|
58
59
|
end
|
data/lib/appsignal/version.rb
CHANGED
|
@@ -19,7 +19,8 @@ end
|
|
|
19
19
|
|
|
20
20
|
describe Appsignal::Probes::MriProbe do
|
|
21
21
|
let(:appsignal_mock) { AppsignalMock.new(:hostname => hostname) }
|
|
22
|
-
let(:
|
|
22
|
+
let(:gc_profiler_mock) { instance_double("Appsignal::GarbageCollectionProfiler") }
|
|
23
|
+
let(:probe) { described_class.new(:appsignal => appsignal_mock, :gc_profiler => gc_profiler_mock) }
|
|
23
24
|
|
|
24
25
|
describe ".dependencies_present?" do
|
|
25
26
|
if DependencyHelper.running_jruby? || DependencyHelper.running_ruby_2_0?
|
|
@@ -36,6 +37,9 @@ describe Appsignal::Probes::MriProbe do
|
|
|
36
37
|
unless DependencyHelper.running_jruby? || DependencyHelper.running_ruby_2_0?
|
|
37
38
|
describe "#call" do
|
|
38
39
|
let(:hostname) { nil }
|
|
40
|
+
before do
|
|
41
|
+
allow(gc_profiler_mock).to receive(:total_time)
|
|
42
|
+
end
|
|
39
43
|
|
|
40
44
|
it "should track vm metrics" do
|
|
41
45
|
probe.call
|
|
@@ -49,8 +53,21 @@ describe Appsignal::Probes::MriProbe do
|
|
|
49
53
|
end
|
|
50
54
|
|
|
51
55
|
it "tracks GC total time" do
|
|
56
|
+
expect(gc_profiler_mock).to receive(:total_time).and_return(10, 15)
|
|
57
|
+
probe.call
|
|
52
58
|
probe.call
|
|
53
|
-
expect_gauge_value("gc_total_time")
|
|
59
|
+
expect_gauge_value("gc_total_time", 5)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "when GC total time overflows" do
|
|
63
|
+
it "skips one report" do
|
|
64
|
+
expect(gc_profiler_mock).to receive(:total_time).and_return(10, 15, 0, 10)
|
|
65
|
+
probe.call # Normal call, create a cache
|
|
66
|
+
probe.call # Report delta value based on cached value
|
|
67
|
+
probe.call # The value overflows and reports no value. Then stores 0 in the cache
|
|
68
|
+
probe.call # Report new value based on cache of 0
|
|
69
|
+
expect_gauges([["gc_total_time", 5], ["gc_total_time", 10]])
|
|
70
|
+
end
|
|
54
71
|
end
|
|
55
72
|
|
|
56
73
|
it "tracks GC run count" do
|
|
@@ -107,4 +124,15 @@ describe Appsignal::Probes::MriProbe do
|
|
|
107
124
|
end
|
|
108
125
|
end
|
|
109
126
|
end
|
|
127
|
+
|
|
128
|
+
def expect_gauges(expected_metrics)
|
|
129
|
+
default_tags = { :hostname => Socket.gethostname }
|
|
130
|
+
keys = expected_metrics.map { |(key)| key }
|
|
131
|
+
metrics = expected_metrics.map do |metric|
|
|
132
|
+
key, value, tags = metric
|
|
133
|
+
[key, value, default_tags.merge(tags || {})]
|
|
134
|
+
end
|
|
135
|
+
found_gauges = appsignal_mock.gauges.select { |(key)| keys.include? key }
|
|
136
|
+
expect(found_gauges).to eq(metrics)
|
|
137
|
+
end
|
|
110
138
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: appsignal
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.1.
|
|
4
|
+
version: 3.1.2
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Robert Beekman
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2022-
|
|
13
|
+
date: 2022-08-02 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rack
|
|
@@ -69,35 +69,35 @@ dependencies:
|
|
|
69
69
|
- !ruby/object:Gem::Version
|
|
70
70
|
version: '0'
|
|
71
71
|
- !ruby/object:Gem::Dependency
|
|
72
|
-
name:
|
|
72
|
+
name: yard
|
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
|
74
74
|
requirements:
|
|
75
75
|
- - ">="
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version:
|
|
77
|
+
version: 0.9.20
|
|
78
78
|
type: :development
|
|
79
79
|
prerelease: false
|
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
|
82
82
|
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
|
-
version:
|
|
84
|
+
version: 0.9.20
|
|
85
85
|
- !ruby/object:Gem::Dependency
|
|
86
|
-
name:
|
|
86
|
+
name: pry
|
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
|
88
88
|
requirements:
|
|
89
89
|
- - ">="
|
|
90
90
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: 0
|
|
91
|
+
version: '0'
|
|
92
92
|
type: :development
|
|
93
93
|
prerelease: false
|
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
|
95
95
|
requirements:
|
|
96
96
|
- - ">="
|
|
97
97
|
- !ruby/object:Gem::Version
|
|
98
|
-
version: 0
|
|
98
|
+
version: '0'
|
|
99
99
|
- !ruby/object:Gem::Dependency
|
|
100
|
-
name:
|
|
100
|
+
name: webmock
|
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
|
102
102
|
requirements:
|
|
103
103
|
- - ">="
|