roqua-support 0.1.25 → 0.1.26
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/.gitlab-ci.yml +0 -17
- data/Gemfile.lock +18 -3
- data/README.md +10 -0
- data/lib/roqua/probes/base_probe.rb +11 -0
- data/lib/roqua/probes/delayed_job_probe.rb +17 -0
- data/lib/roqua/support/errors.rb +1 -1
- data/lib/roqua-support/version.rb +1 -1
- data/lib/roqua-support.rb +4 -0
- data/roqua-support.gemspec +5 -2
- data/spec/roqua/core_ext/activerecord/uniq_find_or_create_spec.rb +7 -18
- data/spec/roqua/probes/delayed_job_probe_spec.rb +51 -0
- data/spec/spec_helper.rb +28 -0
- metadata +52 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecfd7d74378220979e7a8839f07ea9793a37265c
|
4
|
+
data.tar.gz: 8dfb4a419c0d3bc0222a2f743fcad30fc0e43141
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d69f343ba3c51be195a532a892d8839eea4bea7cea5ee54f23e790f6fb56c2299c3aa1f94de49a1cad22f342c0feb78d5878d3a0bffed9be143d719224b7497f
|
7
|
+
data.tar.gz: 76a3f96b867e176bf948ea7bab491c1abd319b7eb02faf8dbb1f0aed73eb9c7251cef075ee5f51fca81b6383c35f1c05408aded3fda050bd339e77ddab60a668
|
data/.gitlab-ci.yml
CHANGED
@@ -3,10 +3,6 @@ image: "registry.roqua.nl/roqua/roqua-build-images:ruby-2.3-rails-base-test"
|
|
3
3
|
variables:
|
4
4
|
RAILS_ENV: "test"
|
5
5
|
|
6
|
-
stages:
|
7
|
-
- test
|
8
|
-
- publish
|
9
|
-
|
10
6
|
cache:
|
11
7
|
paths:
|
12
8
|
- .gems
|
@@ -18,26 +14,13 @@ before_script:
|
|
18
14
|
- bundle --jobs 2 --retry 3
|
19
15
|
|
20
16
|
rails_41:
|
21
|
-
stage: test
|
22
17
|
script:
|
23
18
|
- bundle exec appraisal rails41 bundle exec rspec
|
24
19
|
|
25
20
|
rails_42:
|
26
|
-
stage: test
|
27
21
|
script:
|
28
22
|
- bundle exec appraisal rails42 bundle exec rspec
|
29
23
|
|
30
24
|
rails_50:
|
31
|
-
stage: test
|
32
25
|
script:
|
33
26
|
- bundle exec appraisal rails50 bundle exec rspec
|
34
|
-
|
35
|
-
build_and_publish_gem:
|
36
|
-
stage: publish
|
37
|
-
dependencies:
|
38
|
-
- rails_41
|
39
|
-
- rails_42
|
40
|
-
- rails_50
|
41
|
-
script:
|
42
|
-
- gem build roqua-support.gemspec
|
43
|
-
- gem push roqua-support-0.1.25.gem
|
data/Gemfile.lock
CHANGED
@@ -8,7 +8,7 @@ GIT
|
|
8
8
|
PATH
|
9
9
|
remote: .
|
10
10
|
specs:
|
11
|
-
roqua-support (0.1.
|
11
|
+
roqua-support (0.1.26)
|
12
12
|
active_interaction (~> 3.0)
|
13
13
|
activesupport (>= 3.2, < 6)
|
14
14
|
naught (~> 1.0)
|
@@ -33,6 +33,10 @@ GEM
|
|
33
33
|
activemodel (>= 4, < 6)
|
34
34
|
activemodel (5.0.1)
|
35
35
|
activesupport (= 5.0.1)
|
36
|
+
activerecord (5.0.1)
|
37
|
+
activemodel (= 5.0.1)
|
38
|
+
activesupport (= 5.0.1)
|
39
|
+
arel (~> 7.0)
|
36
40
|
activesupport (5.0.1)
|
37
41
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
38
42
|
i18n (~> 0.7)
|
@@ -44,6 +48,7 @@ GEM
|
|
44
48
|
thor (>= 0.14.0)
|
45
49
|
appsignal (2.3.1)
|
46
50
|
rack
|
51
|
+
arel (7.1.4)
|
47
52
|
ast (2.3.0)
|
48
53
|
builder (3.2.3)
|
49
54
|
coderay (1.1.1)
|
@@ -52,6 +57,11 @@ GEM
|
|
52
57
|
railties (>= 3.0.0)
|
53
58
|
thor (>= 0.14.6)
|
54
59
|
concurrent-ruby (1.0.4)
|
60
|
+
delayed_job (4.1.4)
|
61
|
+
activesupport (>= 3.0, < 5.2)
|
62
|
+
delayed_job_active_record (4.1.2)
|
63
|
+
activerecord (>= 3.0, < 5.2)
|
64
|
+
delayed_job (>= 3.0, < 5)
|
55
65
|
diff-lcs (1.3)
|
56
66
|
erubis (2.7.0)
|
57
67
|
ffi (1.9.17)
|
@@ -151,8 +161,10 @@ GEM
|
|
151
161
|
ruby_dep (1.5.0)
|
152
162
|
shellany (0.0.1)
|
153
163
|
slop (3.6.0)
|
164
|
+
sqlite3 (1.3.13)
|
154
165
|
thor (0.19.4)
|
155
166
|
thread_safe (0.3.5)
|
167
|
+
timecop (0.9.1)
|
156
168
|
tzinfo (1.2.2)
|
157
169
|
thread_safe (~> 0.1)
|
158
170
|
unicode-display_width (1.3.0)
|
@@ -167,14 +179,17 @@ DEPENDENCIES
|
|
167
179
|
appsignal
|
168
180
|
bundler (~> 1.0)
|
169
181
|
combustion (~> 0.5.2)
|
182
|
+
delayed_job_active_record
|
170
183
|
guard-rspec (~> 4.2.6)
|
171
|
-
rake
|
184
|
+
rake
|
172
185
|
responders
|
173
186
|
roqua-support!
|
174
187
|
roqua_styleguide!
|
175
188
|
rspec (>= 2.12.0, < 4.0)
|
176
189
|
rspec-instrumentation-matcher
|
177
190
|
rspec-rails
|
191
|
+
sqlite3
|
192
|
+
timecop
|
178
193
|
|
179
194
|
BUNDLED WITH
|
180
|
-
1.
|
195
|
+
1.16.1
|
data/README.md
CHANGED
@@ -100,6 +100,16 @@ class ApiAreaController < ApplicationController
|
|
100
100
|
...
|
101
101
|
```
|
102
102
|
|
103
|
+
# AppSignal Probes
|
104
|
+
|
105
|
+
roqua-support contains one generic probe to monitor the current delayed job backlog count: `Roqua::Probes::DelayedJobProbe`
|
106
|
+
|
107
|
+
Enable it in a project by calling:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
Roqua::Probes::DelayedJobProbe.enable
|
111
|
+
```
|
112
|
+
|
103
113
|
### ActiveInteraction extensions
|
104
114
|
|
105
115
|
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'base_probe'
|
2
|
+
|
3
|
+
module Roqua
|
4
|
+
module Probes
|
5
|
+
class DelayedJobProbe
|
6
|
+
extend BaseProbe
|
7
|
+
|
8
|
+
def backlog_count
|
9
|
+
Delayed::Job.where(locked_at: nil).where('run_at < ?', Time.zone.now).count
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
Appsignal.set_gauge('delayed_job_backlog_count', backlog_count)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/roqua/support/errors.rb
CHANGED
@@ -69,7 +69,7 @@ module Roqua
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def notify_appsignal?(exception)
|
72
|
-
const_defined?(:Appsignal) &&
|
72
|
+
const_defined?(:Appsignal) && Appsignal.active? && !Appsignal.is_ignored_exception?(exception)
|
73
73
|
end
|
74
74
|
|
75
75
|
def notify_appsignal(exception, labels, namespace)
|
data/lib/roqua-support.rb
CHANGED
@@ -2,6 +2,10 @@ require "roqua-support/version"
|
|
2
2
|
require "roqua/support"
|
3
3
|
|
4
4
|
module Roqua
|
5
|
+
module Probes
|
6
|
+
autoload :DelayedJobProbe, 'roqua/probes/delayed_job_probe'
|
7
|
+
end
|
8
|
+
|
5
9
|
module Responders
|
6
10
|
autoload :ApiErrorsResponder, 'roqua/responders/api_errors_responder'
|
7
11
|
autoload :ActiveInteractionAwareResponder, 'roqua/responders/active_interaction_aware_responder'
|
data/roqua-support.gemspec
CHANGED
@@ -23,7 +23,10 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_dependency 'active_interaction', '~> 3.0'
|
24
24
|
|
25
25
|
gem.add_development_dependency 'bundler', '~> 1.0'
|
26
|
-
gem.add_development_dependency 'rake'
|
26
|
+
gem.add_development_dependency 'rake'
|
27
27
|
gem.add_development_dependency 'rspec', '>= 2.12.0', '< 4.0'
|
28
|
-
gem.add_development_dependency 'appsignal', '
|
28
|
+
gem.add_development_dependency 'appsignal', '>= 2.3.1'
|
29
|
+
gem.add_development_dependency 'delayed_job_active_record'
|
30
|
+
gem.add_development_dependency 'sqlite3'
|
31
|
+
gem.add_development_dependency 'timecop'
|
29
32
|
end
|
@@ -1,17 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
class Base
|
5
|
-
def self.find_by(attributes)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class RecordNotUnique < StandardError
|
10
|
-
end
|
11
|
-
|
12
|
-
class RecordInvalid < StandardError
|
13
|
-
end
|
14
|
-
end
|
3
|
+
require 'roqua/core_ext/activerecord/uniq_find_or_create'
|
15
4
|
|
16
5
|
describe ActiveRecord::Base do
|
17
6
|
let(:attributes) { double('attributes') }
|
@@ -32,14 +21,14 @@ describe ActiveRecord::Base do
|
|
32
21
|
it 'returns a concurrenlty created record' do
|
33
22
|
allow(ActiveRecord::Base).to receive(:find_by).with(attributes).and_return record
|
34
23
|
allow(ActiveRecord::Base).to receive(:find_or_create_by).with(attributes, &block)
|
35
|
-
.and_raise ActiveRecord::RecordNotUnique
|
24
|
+
.and_raise ActiveRecord::RecordNotUnique.new('')
|
36
25
|
expect(ActiveRecord::Base.uniq_find_or_create_by attributes, &block).to eq(record)
|
37
26
|
end
|
38
27
|
|
39
28
|
it 'raises when a concurrent record is detected by the database but could not be queried for unknown reasons' do
|
40
29
|
allow(ActiveRecord::Base).to receive(:find_by).with(attributes).and_return nil
|
41
30
|
allow(ActiveRecord::Base).to receive(:find_or_create_by).with(attributes, &block)
|
42
|
-
.and_raise ActiveRecord::RecordNotUnique
|
31
|
+
.and_raise ActiveRecord::RecordNotUnique.new('')
|
43
32
|
expect do
|
44
33
|
ActiveRecord::Base.uniq_find_or_create_by attributes, &block
|
45
34
|
end.to raise_error ActiveRecord::RecordNotUnique
|
@@ -66,21 +55,21 @@ describe ActiveRecord::Base do
|
|
66
55
|
it 'returns a concurrenlty created record' do
|
67
56
|
allow(ActiveRecord::Base).to receive(:find_by).with(attributes).and_return record
|
68
57
|
allow(ActiveRecord::Base).to receive(:find_or_create_by!).with(attributes, &block)
|
69
|
-
.and_raise ActiveRecord::RecordNotUnique
|
58
|
+
.and_raise ActiveRecord::RecordNotUnique.new('')
|
70
59
|
expect(ActiveRecord::Base.uniq_find_or_create_by! attributes, &block).to eq(record)
|
71
60
|
end
|
72
61
|
|
73
62
|
it 'raises when a concurrent record is detected by the database but could not be queried for unknown reasons' do
|
74
63
|
allow(ActiveRecord::Base).to receive(:find_by).with(attributes).and_return nil
|
75
64
|
allow(ActiveRecord::Base).to receive(:find_or_create_by!).with(attributes, &block)
|
76
|
-
.and_raise ActiveRecord::RecordNotUnique
|
65
|
+
.and_raise ActiveRecord::RecordNotUnique.new('')
|
77
66
|
expect do
|
78
67
|
ActiveRecord::Base.uniq_find_or_create_by! attributes, &block
|
79
68
|
end.to raise_error ActiveRecord::RecordNotUnique
|
80
69
|
end
|
81
70
|
|
82
71
|
it 'raises when creating a new record causes validation failures not due to concurrency' do
|
83
|
-
exception =
|
72
|
+
exception = StandardError.new('some_validation_error')
|
84
73
|
allow(ActiveRecord::Base).to receive(:find_or_create_by!).with(attributes, &block).and_raise exception
|
85
74
|
expect { ActiveRecord::Base.uniq_find_or_create_by! attributes, &block }.to raise_error(exception)
|
86
75
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'delayed_job_active_record'
|
3
|
+
require 'timecop'
|
4
|
+
|
5
|
+
require 'roqua/probes/delayed_job_probe'
|
6
|
+
|
7
|
+
describe Roqua::Probes::DelayedJobProbe do
|
8
|
+
before { Timecop.freeze }
|
9
|
+
after { Timecop.return }
|
10
|
+
subject(:probe) { Roqua::Probes::DelayedJobProbe.new }
|
11
|
+
|
12
|
+
describe 'backlog_count' do
|
13
|
+
context 'if a single job unlocked job exists that has a run_at in the past' do
|
14
|
+
def create_jobs
|
15
|
+
Delayed::Job.create!(run_at: 1.second.ago)
|
16
|
+
2.times { Delayed::Job.create!(run_at: 1.second.ago, locked_at: Time.zone.now) }
|
17
|
+
Delayed::Job.create!(run_at: Time.zone.now)
|
18
|
+
Delayed::Job.create!(run_at: 1.second.from_now)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'returns 1' do
|
22
|
+
expect { create_jobs }.to change { probe.backlog_count }.from(0).to(1)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'call' do
|
28
|
+
it 'sends the correct metric to Appsignal' do
|
29
|
+
expect(probe).to receive(:backlog_count).and_return(12)
|
30
|
+
expect(Appsignal).to receive(:set_gauge).with('delayed_job_backlog_count', 12)
|
31
|
+
probe.call
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context '.enable' do
|
36
|
+
before { Appsignal::Minutely.probes.clear }
|
37
|
+
after { Appsignal::Minutely.probes.clear }
|
38
|
+
|
39
|
+
it 'adds our custom probes to Appsignal' do
|
40
|
+
expect { Roqua::Probes::DelayedJobProbe.enable }
|
41
|
+
.to change { Appsignal::Minutely.probes.count }.by(1)
|
42
|
+
|
43
|
+
expect(Appsignal::Minutely.probes.map(&:class)).to include(Roqua::Probes::DelayedJobProbe)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'will not add the same probe twice if called multiple times' do
|
47
|
+
expect { 2.times { Roqua::Probes::DelayedJobProbe.enable } }
|
48
|
+
.to change { Appsignal::Minutely.probes.count }.by(1)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
|
1
3
|
require 'rubygems'
|
2
4
|
require 'bundler/setup'
|
3
5
|
|
@@ -7,3 +9,29 @@ Combustion.initialize! :action_controller
|
|
7
9
|
|
8
10
|
require 'appsignal'
|
9
11
|
require 'rspec/rails'
|
12
|
+
|
13
|
+
require 'delayed_job_active_record'
|
14
|
+
|
15
|
+
Delayed::Worker.logger = Logger.new(Tempfile.new('roqua-support-delayed-job.log'))
|
16
|
+
|
17
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
18
|
+
ActiveRecord::Base.logger = Delayed::Worker.logger
|
19
|
+
ActiveRecord::Migration.verbose = false
|
20
|
+
|
21
|
+
ActiveRecord::Schema.define do
|
22
|
+
create_table :delayed_jobs, :force => true do |t|
|
23
|
+
t.integer :priority, :default => 0
|
24
|
+
t.integer :attempts, :default => 0
|
25
|
+
t.text :handler
|
26
|
+
t.text :last_error
|
27
|
+
t.datetime :run_at
|
28
|
+
t.datetime :locked_at
|
29
|
+
t.datetime :failed_at
|
30
|
+
t.string :locked_by
|
31
|
+
t.string :queue
|
32
|
+
t.string :cron
|
33
|
+
t.timestamps null: false
|
34
|
+
end
|
35
|
+
|
36
|
+
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roqua-support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -76,16 +76,16 @@ dependencies:
|
|
76
76
|
name: rake
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: rspec
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,22 +110,58 @@ dependencies:
|
|
110
110
|
name: appsignal
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
112
112
|
requirements:
|
113
|
-
- - "
|
113
|
+
- - ">="
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
115
|
+
version: 2.3.1
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
116
120
|
- - ">="
|
117
121
|
- !ruby/object:Gem::Version
|
118
122
|
version: 2.3.1
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: delayed_job_active_record
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
119
130
|
type: :development
|
120
131
|
prerelease: false
|
121
132
|
version_requirements: !ruby/object:Gem::Requirement
|
122
133
|
requirements:
|
123
|
-
- - "
|
134
|
+
- - ">="
|
124
135
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
136
|
+
version: '0'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: sqlite3
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
126
141
|
- - ">="
|
127
142
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: timecop
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
type: :development
|
159
|
+
prerelease: false
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
129
165
|
description: 'Logging backend, freedom patches, '
|
130
166
|
email: marten@roqua.nl
|
131
167
|
executables: []
|
@@ -159,6 +195,8 @@ files:
|
|
159
195
|
- lib/roqua/core_ext/enumerable/sort_by_alphanum.rb
|
160
196
|
- lib/roqua/core_ext/fabrication/singleton.rb
|
161
197
|
- lib/roqua/core_ext/fixnum/clamp.rb
|
198
|
+
- lib/roqua/probes/base_probe.rb
|
199
|
+
- lib/roqua/probes/delayed_job_probe.rb
|
162
200
|
- lib/roqua/responders/active_interaction_aware_responder.rb
|
163
201
|
- lib/roqua/responders/api_errors_responder.rb
|
164
202
|
- lib/roqua/support.rb
|
@@ -179,6 +217,7 @@ files:
|
|
179
217
|
- spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb
|
180
218
|
- spec/roqua/core_ext/fabrication/singleton_spec.rb
|
181
219
|
- spec/roqua/core_ext/fixnum/clamp_spec.rb
|
220
|
+
- spec/roqua/probes/delayed_job_probe_spec.rb
|
182
221
|
- spec/roqua/responders/active_interaction_aware_responder_spec.rb
|
183
222
|
- spec/roqua/responders/api_errors_responder_spec.rb
|
184
223
|
- spec/roqua/support/errors_spec.rb
|
@@ -210,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
249
|
version: '0'
|
211
250
|
requirements: []
|
212
251
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.5.2
|
252
|
+
rubygems_version: 2.5.2.2
|
214
253
|
signing_key:
|
215
254
|
specification_version: 4
|
216
255
|
summary: Helper objects and proxies used by a lot of RoQua applications
|
@@ -223,6 +262,7 @@ test_files:
|
|
223
262
|
- spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb
|
224
263
|
- spec/roqua/core_ext/fabrication/singleton_spec.rb
|
225
264
|
- spec/roqua/core_ext/fixnum/clamp_spec.rb
|
265
|
+
- spec/roqua/probes/delayed_job_probe_spec.rb
|
226
266
|
- spec/roqua/responders/active_interaction_aware_responder_spec.rb
|
227
267
|
- spec/roqua/responders/api_errors_responder_spec.rb
|
228
268
|
- spec/roqua/support/errors_spec.rb
|