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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13c0a85b693a713e1516141499eb505a4f206703
4
- data.tar.gz: 42c7494bab9c927ffd9d1ee0af4700f4b6cc0f42
3
+ metadata.gz: 07eeee5c1b4e819e217d2529be7667ec484255ed
4
+ data.tar.gz: 6809f675cc3214a215d4187a93f0559f2bf0e6df
5
5
  SHA512:
6
- metadata.gz: 98b97e70e34f312e8df01bf5037c24644a4e47ced94d8596ab2b05cbe8a4b5dcbedf484f59a56d7beb71df7a912f611982f5d17e713ae4519ba1ad62c464fddc
7
- data.tar.gz: a1156e2290cbfa4af0a146d4b7ab3b19fb4494af4c887d836abfad0917693d2f782cb8a566de10e3436c107ecda87b82e38f16d653ce669ba64457ef0f90aebc
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.1.1)
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.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/job'
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
- Jobs = Module.new
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
- jobs = registrations_for(event.class)
32
+ registrations = registrations_for(event.class)
32
33
  serialized_event = serialize_event(event)
33
34
 
34
- jobs.each { |job| enqueue_job job, serialized_event }
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
- event_klass = find_event_klass(identifier)
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 enqueue_job(job, event)
53
- ::Resque.enqueue job, event
48
+ def new_registration(object, method_name)
49
+ MethodCallRegistration.new(object.name, method_name)
54
50
  end
55
51
 
56
- def find_event_klass(event)
57
- Emittance::EventLookup.find_event_klass(event)
58
- end
52
+ def enqueue_job(registration, event)
53
+ queue = queue_from_registration(registration)
59
54
 
60
- def serialize_event(event)
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 method_call_job_klass_name(event_klass, object, method_name)
65
- JobKlassName.new(event_klass, object, method_name).generate
58
+ def queue_from_registration(registration)
59
+ registration.queue || DEFAULT_QUEUE
66
60
  end
67
61
 
68
- def job_klass(callback)
69
- JobKlass.new(callback).generate
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Emittance
4
4
  module Resque
5
- VERSION = '0.1.1'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  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.1.1
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: 2017-12-29 00:00:00.000000000 Z
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/job.rb
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
@@ -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