emittance-resque 0.1.1 → 0.2.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/Gemfile.lock +2 -2
- data/lib/emittance/resque/dispatcher.rb +17 -32
- data/lib/emittance/resque/process_event_job.rb +37 -0
- data/lib/emittance/resque/version.rb +1 -1
- metadata +3 -5
- data/lib/emittance/resque/dispatcher/job_klass.rb +0 -32
- data/lib/emittance/resque/dispatcher/job_klass_name.rb +0 -46
- data/lib/emittance/resque/job.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07eeee5c1b4e819e217d2529be7667ec484255ed
|
4
|
+
data.tar.gz: 6809f675cc3214a215d4187a93f0559f2bf0e6df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bdfe8c467d68f18edef7689069ed2126be7fe70e381936b9fd14d3d9e5405479c59dd1e97ef6ccbfbc456dd59fc5dcb171c31bc00c004dba246dfc4bd66b7e5
|
7
|
+
data.tar.gz: 3ca8455325a20f5cc9d14af2ad177bb692c63ad1b0b4ec08cc019d695ed65432286ee508f000db520524fe8ad10abe36bb88d5a1380d958ec946fc8b391f12a1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
emittance-resque (0.
|
4
|
+
emittance-resque (0.2.0)
|
5
5
|
emittance (>= 0.1.1)
|
6
6
|
resque
|
7
7
|
|
@@ -24,7 +24,7 @@ GEM
|
|
24
24
|
concurrent-ruby (1.0.5)
|
25
25
|
diff-lcs (1.3)
|
26
26
|
docile (1.1.5)
|
27
|
-
emittance (0.1.
|
27
|
+
emittance (0.1.3)
|
28
28
|
i18n (0.9.1)
|
29
29
|
concurrent-ruby (~> 1.0)
|
30
30
|
json (2.1.0)
|
@@ -8,9 +8,7 @@ module Emittance
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
require 'emittance/resque/
|
12
|
-
require 'emittance/resque/dispatcher/job_klass_name'
|
13
|
-
require 'emittance/resque/dispatcher/job_klass'
|
11
|
+
require 'emittance/resque/process_event_job'
|
14
12
|
require 'emittance/resque/event_serializer'
|
15
13
|
require 'emittance/resque/event_serializer/default'
|
16
14
|
|
@@ -20,7 +18,10 @@ module Emittance
|
|
20
18
|
# The Resque dispatcher for Emittance.
|
21
19
|
#
|
22
20
|
class Dispatcher
|
23
|
-
|
21
|
+
MethodCallRegistration = Struct.new(:klass_name, :method_name, :queue)
|
22
|
+
|
23
|
+
PROCESS_EVENT_JOB = Emittance::Resque::ProcessEventJob
|
24
|
+
DEFAULT_QUEUE = :default
|
24
25
|
|
25
26
|
class << self
|
26
27
|
include Emittance::Helpers::ConstantHelpers
|
@@ -28,10 +29,10 @@ module Emittance
|
|
28
29
|
private
|
29
30
|
|
30
31
|
def _process_event(event)
|
31
|
-
|
32
|
+
registrations = registrations_for(event.class)
|
32
33
|
serialized_event = serialize_event(event)
|
33
34
|
|
34
|
-
|
35
|
+
registrations.each { |registration| enqueue_job registration, serialized_event }
|
35
36
|
end
|
36
37
|
|
37
38
|
def _register(_identifier, &_callback)
|
@@ -41,47 +42,31 @@ module Emittance
|
|
41
42
|
def _register_method_call(identifier, object, method_name)
|
42
43
|
validate_method_call object, method_name
|
43
44
|
|
44
|
-
|
45
|
-
klass_name = method_call_job_klass_name(event_klass, object, method_name)
|
46
|
-
klass = method_call_job_klass(object, method_name)
|
47
|
-
|
48
|
-
set_namespaced_constant_by_name("#{Jobs.name}::#{klass_name}", klass) unless Jobs.const_defined?(klass_name)
|
49
|
-
registrations_for(identifier) << klass
|
45
|
+
registrations_for(identifier) << new_registration(object, method_name)
|
50
46
|
end
|
51
47
|
|
52
|
-
def
|
53
|
-
|
48
|
+
def new_registration(object, method_name)
|
49
|
+
MethodCallRegistration.new(object.name, method_name)
|
54
50
|
end
|
55
51
|
|
56
|
-
def
|
57
|
-
|
58
|
-
end
|
52
|
+
def enqueue_job(registration, event)
|
53
|
+
queue = queue_from_registration(registration)
|
59
54
|
|
60
|
-
|
61
|
-
Emittance::Resque::EventSerializer.serialize(event)
|
55
|
+
::Resque.enqueue_to queue, PROCESS_EVENT_JOB, registration.klass_name, registration.method_name, event
|
62
56
|
end
|
63
57
|
|
64
|
-
def
|
65
|
-
|
58
|
+
def queue_from_registration(registration)
|
59
|
+
registration.queue || DEFAULT_QUEUE
|
66
60
|
end
|
67
61
|
|
68
|
-
def
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def method_call_job_klass(object, method_name)
|
73
|
-
callback = lambda_for_method_call(object, method_name)
|
74
|
-
job_klass callback
|
62
|
+
def serialize_event(event)
|
63
|
+
Emittance::Resque::EventSerializer.serialize event
|
75
64
|
end
|
76
65
|
|
77
66
|
def validate_method_call(object, _method_name)
|
78
67
|
error_msg = 'Emittance::Resque can only call methods on classes and modules'
|
79
68
|
raise InvalidCallbackError, error_msg unless object.is_a?(Module)
|
80
69
|
end
|
81
|
-
|
82
|
-
def lambda_for_method_call(object, method_name)
|
83
|
-
->(event) { object.send method_name, event }
|
84
|
-
end
|
85
70
|
end
|
86
71
|
end
|
87
72
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Emittance
|
4
|
+
module Resque
|
5
|
+
##
|
6
|
+
# The job that is enqueued when an event is emitted.
|
7
|
+
#
|
8
|
+
class ProcessEventJob
|
9
|
+
@queue = :default
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def perform(klass_name, method_name, serialized_event)
|
13
|
+
deserialized_event = Emittance::Resque::EventSerializer.deserialize(serialized_event)
|
14
|
+
new(klass_name, method_name, deserialized_event).perform
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(klass_name, method_name, event)
|
19
|
+
@klass_name = klass_name
|
20
|
+
@method_name = method_name
|
21
|
+
@event = event
|
22
|
+
end
|
23
|
+
|
24
|
+
def perform
|
25
|
+
klass.send method_name, event
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :klass_name, :method_name, :event
|
31
|
+
|
32
|
+
def klass
|
33
|
+
Object.const_get(klass_name)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emittance-resque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Guillen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: emittance
|
@@ -161,13 +161,11 @@ files:
|
|
161
161
|
- lib/emittance/resque.rb
|
162
162
|
- lib/emittance/resque/broker.rb
|
163
163
|
- lib/emittance/resque/dispatcher.rb
|
164
|
-
- lib/emittance/resque/dispatcher/job_klass.rb
|
165
|
-
- lib/emittance/resque/dispatcher/job_klass_name.rb
|
166
164
|
- lib/emittance/resque/errors.rb
|
167
165
|
- lib/emittance/resque/event_serializer.rb
|
168
166
|
- lib/emittance/resque/event_serializer/active_record.rb
|
169
167
|
- lib/emittance/resque/event_serializer/default.rb
|
170
|
-
- lib/emittance/resque/
|
168
|
+
- lib/emittance/resque/process_event_job.rb
|
171
169
|
- lib/emittance/resque/version.rb
|
172
170
|
homepage: https://github.com/aastronautss/emittance-resque
|
173
171
|
licenses:
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Emittance
|
4
|
-
module Resque
|
5
|
-
class Dispatcher
|
6
|
-
##
|
7
|
-
# Use this to build a job class from a callback block/proc/lambda.
|
8
|
-
#
|
9
|
-
class JobKlass
|
10
|
-
# The name of the method used by the background job library to perform the job.
|
11
|
-
PERFORM_METHOD_NAME = :perform
|
12
|
-
|
13
|
-
def initialize(callback, queue: :default)
|
14
|
-
@callback = callback
|
15
|
-
@queue = queue
|
16
|
-
end
|
17
|
-
|
18
|
-
def generate
|
19
|
-
klass = Class.new(Emittance::Resque::Job)
|
20
|
-
klass.send(:define_method, PERFORM_METHOD_NAME, callback)
|
21
|
-
klass.instance_variable_set '@queue', queue
|
22
|
-
|
23
|
-
klass
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
attr_reader :callback, :queue
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Emittance
|
4
|
-
module Resque
|
5
|
-
class Dispatcher
|
6
|
-
##
|
7
|
-
# Use this to build job class names.
|
8
|
-
#
|
9
|
-
class JobKlassName
|
10
|
-
include Emittance::Helpers::StringHelpers
|
11
|
-
|
12
|
-
SUFFIX = 'Job'
|
13
|
-
|
14
|
-
def initialize(event_klass, object, method_name)
|
15
|
-
@event_klass = event_klass
|
16
|
-
@object = object
|
17
|
-
@method_name = method_name
|
18
|
-
end
|
19
|
-
|
20
|
-
def generate
|
21
|
-
"#{prefix}::#{base_name}#{suffix}"
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
attr_reader :event_klass, :object, :method_name
|
27
|
-
|
28
|
-
def prefix
|
29
|
-
event_klass.name
|
30
|
-
end
|
31
|
-
|
32
|
-
def base_name
|
33
|
-
"#{object}::#{formatted_method_name}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def suffix
|
37
|
-
SUFFIX
|
38
|
-
end
|
39
|
-
|
40
|
-
def formatted_method_name
|
41
|
-
camel_case(method_name.to_s)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/lib/emittance/resque/job.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'emittance/resque/event_serializer'
|
4
|
-
|
5
|
-
module Emittance
|
6
|
-
module Resque
|
7
|
-
##
|
8
|
-
# Wrapper calls for resque jobs to dispatch.
|
9
|
-
#
|
10
|
-
class Job
|
11
|
-
class << self
|
12
|
-
def perform(event)
|
13
|
-
deserialized_event = Emittance::Resque::EventSerializer.deserialize(event)
|
14
|
-
|
15
|
-
new.perform(deserialized_event)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|