active_job_channel 0.0.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/Rakefile +12 -3
- data/lib/active_job_channel/broadcaster.rb +1 -1
- data/lib/active_job_channel/version.rb +1 -1
- data/spec/active_job_channel/broadcaster_spec.rb +145 -0
- data/spec/dummy/app/jobs/application_job.rb +1 -1
- data/spec/dummy/log/test.log +7112 -0
- data/spec/spec_helper.rb +2 -0
- metadata +19 -5
- data/spec/jobs/application_job_spec.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e15e3cd0deda9ddda3a0d594f125554938b14233444b6f7f6f53ae24cbb3bbac
|
4
|
+
data.tar.gz: 448bfe9ff104ebc3f489de2fe8f95591fcca443efef647d63c264717187542ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52748705d9f2f217353138fc768910c5e2ef5daa4df099fc9f9e2a6a863c82df66dfadadc1d8a8307a8bc719a0fbf2bb1d5a6d336e7f20458787810e1a18762c
|
7
|
+
data.tar.gz: 56dad2e05f5e500f228c0b0c1ee89d53ad3064d54946ab599a0613706f940ce60b34d91ae70b4674871b85fd804788ff398776d50b23bd2c118615fc26f295d9
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -11,10 +11,19 @@ Bundler::GemHelper.install_tasks
|
|
11
11
|
|
12
12
|
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each { |f| load f }
|
13
13
|
|
14
|
+
# bundler-audit task
|
15
|
+
require 'bundler/audit/task'
|
16
|
+
Bundler::Audit::Task.new
|
17
|
+
|
18
|
+
# RuboCop task
|
19
|
+
require 'rubocop/rake_task'
|
20
|
+
desc 'Run all specs in spec directory (excluding plugin specs)'
|
21
|
+
RuboCop::RakeTask.new
|
22
|
+
|
23
|
+
# RSpec Task
|
14
24
|
require 'rspec/core'
|
15
25
|
require 'rspec/core/rake_task'
|
16
|
-
|
17
26
|
desc 'Run all specs in spec directory (excluding plugin specs)'
|
18
|
-
RSpec::Core::RakeTask.new
|
27
|
+
RSpec::Core::RakeTask.new
|
19
28
|
|
20
|
-
task default: :spec
|
29
|
+
task default: %i[bundle:audit rubocop spec]
|
@@ -20,7 +20,7 @@ module ActiveJobChannel
|
|
20
20
|
def active_job_channel(options = {})
|
21
21
|
class_attribute :ajc_config
|
22
22
|
self.ajc_config = { global_broadcast: false }
|
23
|
-
|
23
|
+
ajc_config.merge!(options)
|
24
24
|
|
25
25
|
after_perform :broadcast_success
|
26
26
|
rescue_from '::StandardError' do |exception|
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'active_job_channel/broadcaster'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module ActiveJobChannel
|
5
|
+
module Broadcaster
|
6
|
+
RSpec.describe ClassMethods do
|
7
|
+
before(:each) do
|
8
|
+
class DummyJob < ActiveJob::Base
|
9
|
+
active_job_channel global_broadcast: true
|
10
|
+
def perform
|
11
|
+
fake
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def fake; end
|
17
|
+
end
|
18
|
+
DummyJob.extend(described_class)
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.active_job_channel' do
|
22
|
+
it 'sets ajc_config with options hash' do
|
23
|
+
DummyJob.active_job_channel
|
24
|
+
expect(DummyJob.ajc_config).to eq(global_broadcast: false)
|
25
|
+
|
26
|
+
DummyJob.active_job_channel global_broadcast: true
|
27
|
+
expect(DummyJob.ajc_config).to eq(global_broadcast: true)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#broadcast_failure' do
|
32
|
+
it 'handles an error' do
|
33
|
+
allow_any_instance_of(DummyJob).
|
34
|
+
to receive(:fake).
|
35
|
+
and_raise(StandardError)
|
36
|
+
expect_any_instance_of(DummyJob).
|
37
|
+
to receive(:broadcast_failure).
|
38
|
+
with(StandardError).
|
39
|
+
and_call_original
|
40
|
+
|
41
|
+
action_cable_server = double 'action_cable_server'
|
42
|
+
allow(ActionCable).to receive(:server).and_return(action_cable_server)
|
43
|
+
expect(action_cable_server).
|
44
|
+
to receive(:broadcast).
|
45
|
+
with(
|
46
|
+
::ActiveJobChannel::Channel::CHANNEL_NAME,
|
47
|
+
status: 'failure',
|
48
|
+
job_name: DummyJob.to_s,
|
49
|
+
error: StandardError.new.inspect
|
50
|
+
)
|
51
|
+
|
52
|
+
expect { DummyJob.perform_now }.to raise_error(StandardError)
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'with ajc_identifier' do
|
56
|
+
it 'broadcast failure to the identifier' do
|
57
|
+
DummyJob.active_job_channel global_broadcast: false
|
58
|
+
ajc_identifier = 'ajc_identifier'
|
59
|
+
allow_any_instance_of(DummyJob).
|
60
|
+
to receive(:fake).
|
61
|
+
and_raise(StandardError)
|
62
|
+
allow_any_instance_of(DummyJob).
|
63
|
+
to receive(:ajc_identifier).
|
64
|
+
and_return(ajc_identifier)
|
65
|
+
expect_any_instance_of(DummyJob).
|
66
|
+
to receive(:broadcast_failure).
|
67
|
+
with(StandardError).
|
68
|
+
and_call_original
|
69
|
+
|
70
|
+
action_cable_server = double 'action_cable_server'
|
71
|
+
allow(ActionCable).
|
72
|
+
to receive(:server).
|
73
|
+
and_return(action_cable_server)
|
74
|
+
expect(action_cable_server).
|
75
|
+
to receive(:broadcast).
|
76
|
+
with(
|
77
|
+
"#{::ActiveJobChannel::Channel::CHANNEL_NAME}#" \
|
78
|
+
"#{ajc_identifier}",
|
79
|
+
status: 'failure',
|
80
|
+
job_name: DummyJob.to_s,
|
81
|
+
error: StandardError.new.inspect
|
82
|
+
)
|
83
|
+
|
84
|
+
expect { DummyJob.perform_now }.to raise_error(StandardError)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#broadcast_success' do
|
90
|
+
it 'broadcasts' do
|
91
|
+
expect_any_instance_of(DummyJob).
|
92
|
+
to receive(:broadcast_success).
|
93
|
+
and_call_original
|
94
|
+
|
95
|
+
action_cable_server = double 'action_cable_server'
|
96
|
+
allow(ActionCable).to receive(:server).and_return(action_cable_server)
|
97
|
+
expect(action_cable_server).
|
98
|
+
to receive(:broadcast).
|
99
|
+
with(
|
100
|
+
::ActiveJobChannel::Channel::CHANNEL_NAME,
|
101
|
+
status: 'success',
|
102
|
+
job_name: DummyJob.to_s
|
103
|
+
)
|
104
|
+
|
105
|
+
DummyJob.perform_now
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'with ajc_identifier' do
|
109
|
+
it 'broadcast success to the identifier' do
|
110
|
+
DummyJob.active_job_channel global_broadcast: false
|
111
|
+
ajc_identifier = 'ajc_identifier'
|
112
|
+
allow_any_instance_of(DummyJob).
|
113
|
+
to receive(:ajc_identifier).
|
114
|
+
and_return(ajc_identifier)
|
115
|
+
expect_any_instance_of(DummyJob).
|
116
|
+
to receive(:broadcast_success).
|
117
|
+
and_call_original
|
118
|
+
|
119
|
+
action_cable_server = double 'action_cable_server'
|
120
|
+
allow(ActionCable).
|
121
|
+
to receive(:server).
|
122
|
+
and_return(action_cable_server)
|
123
|
+
expect(action_cable_server).
|
124
|
+
to receive(:broadcast).
|
125
|
+
with(
|
126
|
+
"#{::ActiveJobChannel::Channel::CHANNEL_NAME}#" \
|
127
|
+
"#{ajc_identifier}",
|
128
|
+
status: 'success',
|
129
|
+
job_name: DummyJob.to_s
|
130
|
+
)
|
131
|
+
|
132
|
+
DummyJob.perform_now
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe 'NoIdentifierError' do
|
138
|
+
it 'is raised when ajc_identifier is missing for private broadcast' do
|
139
|
+
DummyJob.active_job_channel global_broadcast: false
|
140
|
+
expect { DummyJob.perform_now }.to raise_error(NoIdentifierError)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|