dispatch-rider 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +21 -0
  3. data/.rubocop_todo.yml +17 -300
  4. data/Rakefile +2 -1
  5. data/dispatch-rider.gemspec +2 -2
  6. data/lib/dispatch-rider/callbacks/access.rb +2 -0
  7. data/lib/dispatch-rider/callbacks/storage.rb +7 -5
  8. data/lib/dispatch-rider/callbacks/support.rb +2 -0
  9. data/lib/dispatch-rider/callbacks.rb +2 -0
  10. data/lib/dispatch-rider/command.rb +3 -3
  11. data/lib/dispatch-rider/configuration.rb +3 -1
  12. data/lib/dispatch-rider/debug.rb +3 -1
  13. data/lib/dispatch-rider/demultiplexer.rb +17 -19
  14. data/lib/dispatch-rider/dispatcher.rb +2 -0
  15. data/lib/dispatch-rider/error_handlers.rb +3 -1
  16. data/lib/dispatch-rider/errors.rb +2 -0
  17. data/lib/dispatch-rider/handlers/base.rb +12 -10
  18. data/lib/dispatch-rider/handlers/inheritance_tracking.rb +2 -0
  19. data/lib/dispatch-rider/handlers/named_process.rb +2 -0
  20. data/lib/dispatch-rider/handlers.rb +2 -0
  21. data/lib/dispatch-rider/integrations/appsignal.rb +3 -1
  22. data/lib/dispatch-rider/logging/json_formatter.rb +2 -0
  23. data/lib/dispatch-rider/logging/lifecycle_logger.rb +2 -0
  24. data/lib/dispatch-rider/logging/text_formatter.rb +2 -0
  25. data/lib/dispatch-rider/logging/translator/base_translator.rb +2 -0
  26. data/lib/dispatch-rider/logging/translator/complete_translator.rb +2 -0
  27. data/lib/dispatch-rider/logging/translator/error_handler_fail_translator.rb +2 -0
  28. data/lib/dispatch-rider/logging/translator/fail_translator.rb +2 -0
  29. data/lib/dispatch-rider/logging/translator/start_translator.rb +2 -0
  30. data/lib/dispatch-rider/logging/translator/stop_translator.rb +2 -0
  31. data/lib/dispatch-rider/logging/translator/success_translator.rb +2 -0
  32. data/lib/dispatch-rider/logging/translator.rb +2 -0
  33. data/lib/dispatch-rider/logging.rb +2 -0
  34. data/lib/dispatch-rider/message.rb +3 -0
  35. data/lib/dispatch-rider/notification_services/aws_sns.rb +5 -3
  36. data/lib/dispatch-rider/notification_services/base.rb +2 -0
  37. data/lib/dispatch-rider/notification_services/file_system/channel.rb +2 -0
  38. data/lib/dispatch-rider/notification_services/file_system/notifier.rb +2 -0
  39. data/lib/dispatch-rider/notification_services/file_system.rb +3 -1
  40. data/lib/dispatch-rider/notification_services.rb +2 -0
  41. data/lib/dispatch-rider/publisher/base.rb +2 -0
  42. data/lib/dispatch-rider/publisher/configuration/destination.rb +6 -4
  43. data/lib/dispatch-rider/publisher/configuration/notification_service.rb +4 -2
  44. data/lib/dispatch-rider/publisher/configuration.rb +2 -0
  45. data/lib/dispatch-rider/publisher/configuration_reader.rb +2 -0
  46. data/lib/dispatch-rider/publisher/configuration_support.rb +3 -1
  47. data/lib/dispatch-rider/publisher.rb +3 -2
  48. data/lib/dispatch-rider/queue_services/aws_sqs/message_body_extractor.rb +2 -0
  49. data/lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb +6 -4
  50. data/lib/dispatch-rider/queue_services/aws_sqs.rb +5 -2
  51. data/lib/dispatch-rider/queue_services/base.rb +5 -4
  52. data/lib/dispatch-rider/queue_services/file_system/fs_received_message.rb +5 -3
  53. data/lib/dispatch-rider/queue_services/file_system/queue.rb +5 -4
  54. data/lib/dispatch-rider/queue_services/file_system.rb +7 -11
  55. data/lib/dispatch-rider/queue_services/received_message.rb +3 -1
  56. data/lib/dispatch-rider/queue_services/simple.rb +5 -7
  57. data/lib/dispatch-rider/queue_services.rb +2 -0
  58. data/lib/dispatch-rider/registrars/base.rb +5 -5
  59. data/lib/dispatch-rider/registrars/file_system_channel.rb +3 -1
  60. data/lib/dispatch-rider/registrars/handler.rb +3 -1
  61. data/lib/dispatch-rider/registrars/notification_service.rb +2 -0
  62. data/lib/dispatch-rider/registrars/publishing_destination.rb +3 -1
  63. data/lib/dispatch-rider/registrars/queue_service.rb +2 -0
  64. data/lib/dispatch-rider/registrars/sns_channel.rb +3 -1
  65. data/lib/dispatch-rider/registrars.rb +2 -0
  66. data/lib/dispatch-rider/runner.rb +2 -0
  67. data/lib/dispatch-rider/scheduled_job/migration.rb +2 -0
  68. data/lib/dispatch-rider/scheduled_job.rb +3 -3
  69. data/lib/dispatch-rider/subscriber.rb +2 -0
  70. data/lib/dispatch-rider/version.rb +3 -1
  71. data/lib/dispatch-rider.rb +3 -1
  72. data/lib/generators/dispatch_rider/install/install_generator.rb +2 -0
  73. data/lib/generators/dispatch_rider/install/templates/script/dispatch_rider +1 -0
  74. data/lib/generators/dispatch_rider/job/dispatch_job_generator.rb +2 -0
  75. data/spec/factories/messages.rb +4 -1
  76. data/spec/fixtures/handlers/another_test_handler.rb +2 -0
  77. data/spec/fixtures/handlers/test_handler.rb +2 -0
  78. data/spec/integration/logging_spec.rb +2 -0
  79. data/spec/lib/dispatch-rider/airbrake_error_handler_spec.rb +3 -1
  80. data/spec/lib/dispatch-rider/callbacks/access_spec.rb +2 -0
  81. data/spec/lib/dispatch-rider/callbacks/storage_spec.rb +2 -0
  82. data/spec/lib/dispatch-rider/configuration_spec.rb +3 -1
  83. data/spec/lib/dispatch-rider/default_error_handler_spec.rb +2 -0
  84. data/spec/lib/dispatch-rider/demultiplexer_spec.rb +4 -2
  85. data/spec/lib/dispatch-rider/dispatcher_spec.rb +12 -9
  86. data/spec/lib/dispatch-rider/handlers/base_spec.rb +2 -0
  87. data/spec/lib/dispatch-rider/handlers/inheritance_tracking_spec.rb +2 -0
  88. data/spec/lib/dispatch-rider/logging/json_formatter_spec.rb +2 -0
  89. data/spec/lib/dispatch-rider/logging/lifecycle_logger_spec.rb +3 -1
  90. data/spec/lib/dispatch-rider/logging/text_formatter_spec.rb +2 -0
  91. data/spec/lib/dispatch-rider/logging/translator_spec.rb +2 -0
  92. data/spec/lib/dispatch-rider/message_spec.rb +7 -5
  93. data/spec/lib/dispatch-rider/notification_services/aws_sns_spec.rb +2 -0
  94. data/spec/lib/dispatch-rider/notification_services/base_spec.rb +6 -4
  95. data/spec/lib/dispatch-rider/notification_services/file_system/channel_spec.rb +2 -0
  96. data/spec/lib/dispatch-rider/notification_services/file_system/notifier_spec.rb +2 -0
  97. data/spec/lib/dispatch-rider/notification_services/file_system_spec.rb +2 -0
  98. data/spec/lib/dispatch-rider/notification_services_spec.rb +2 -0
  99. data/spec/lib/dispatch-rider/publisher/base_spec.rb +2 -0
  100. data/spec/lib/dispatch-rider/publisher/configuration/destination_spec.rb +2 -0
  101. data/spec/lib/dispatch-rider/publisher/configuration/notification_service_spec.rb +2 -0
  102. data/spec/lib/dispatch-rider/publisher/configuration_reader_spec.rb +3 -1
  103. data/spec/lib/dispatch-rider/publisher/configuration_spec.rb +3 -1
  104. data/spec/lib/dispatch-rider/publisher/configuration_support_spec.rb +4 -2
  105. data/spec/lib/dispatch-rider/publisher_spec.rb +11 -9
  106. data/spec/lib/dispatch-rider/queue_services/aws_sqs_spec.rb +11 -4
  107. data/spec/lib/dispatch-rider/queue_services/base_spec.rb +10 -8
  108. data/spec/lib/dispatch-rider/queue_services/file_system_spec.rb +7 -5
  109. data/spec/lib/dispatch-rider/queue_services/received_message_spec.rb +2 -0
  110. data/spec/lib/dispatch-rider/queue_services/simple_spec.rb +6 -4
  111. data/spec/lib/dispatch-rider/registrars/base_spec.rb +4 -2
  112. data/spec/lib/dispatch-rider/registrars/file_system_channel_spec.rb +2 -0
  113. data/spec/lib/dispatch-rider/registrars/handler_spec.rb +2 -0
  114. data/spec/lib/dispatch-rider/registrars/notification_service_spec.rb +2 -0
  115. data/spec/lib/dispatch-rider/registrars/publishing_destination_spec.rb +2 -0
  116. data/spec/lib/dispatch-rider/registrars/queue_service_spec.rb +2 -0
  117. data/spec/lib/dispatch-rider/registrars/sns_channel_spec.rb +2 -0
  118. data/spec/lib/dispatch-rider/registrars_spec.rb +2 -0
  119. data/spec/lib/dispatch-rider/runner_spec.rb +3 -1
  120. data/spec/lib/dispatch-rider/scheduled_job_spec.rb +2 -0
  121. data/spec/lib/dispatch-rider/subscriber_spec.rb +6 -3
  122. data/spec/lib/dispatch-rider_spec.rb +2 -0
  123. data/spec/spec_helper.rb +1 -1
  124. data/spec/support/crashing_handler.rb +2 -0
  125. data/spec/support/integration_support.rb +2 -0
  126. data/spec/support/null_logger.rb +2 -0
  127. data/spec/support/sample_handler.rb +2 -0
  128. metadata +29 -29
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Configuration
3
5
  attr_accessor(
@@ -22,7 +24,7 @@ module DispatchRider
22
24
  @subscriber = DispatchRider::Subscriber
23
25
  @log_formatter = DispatchRider::Logging::TextFormatter.new
24
26
  @additional_info_injector = -> (data) { data }
25
- @logger = Logger.new(STDERR)
27
+ @logger = Logger.new($stderr)
26
28
  @debug = false
27
29
 
28
30
  @callbacks.around(:dispatch_message) do |job, message|
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Debug
3
- PUBLISHER_MESSAGE_GUID = 'test-mode-not-random-guid'.freeze
5
+ PUBLISHER_MESSAGE_GUID = 'test-mode-not-random-guid'
4
6
  end
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # The demultiplexer in the reactor pattern is implemented in this class.
2
4
  # The object needs to be initiated with a queue and a dispatcher.
3
5
  # Demultiplexer#start defines an event loop which pops items from the queue
@@ -17,13 +19,13 @@ module DispatchRider
17
19
 
18
20
  def start
19
21
  do_loop do
20
- begin
21
- sleep 1
22
- handle_next_queue_item
23
- rescue => exception
24
- error_handler.call(Message.new(subject: "TopLevelError", body: {}), exception)
25
- throw :done
26
- end
22
+
23
+ sleep 1
24
+ handle_next_queue_item
25
+ rescue => exception
26
+ error_handler.call(Message.new(subject: "TopLevelError", body: {}), exception)
27
+ throw :done
28
+
27
29
  end
28
30
  self
29
31
  end
@@ -36,12 +38,10 @@ module DispatchRider
36
38
  private
37
39
 
38
40
  def with_current_message(message)
39
- begin
40
- @current_message = message
41
- yield
42
- ensure
43
- @current_message = nil
44
- end
41
+ @current_message = message
42
+ yield
43
+ ensure
44
+ @current_message = nil
45
45
  end
46
46
 
47
47
  # This needs to return true/false based on the success of the jobs!
@@ -74,12 +74,10 @@ module DispatchRider
74
74
  end
75
75
 
76
76
  def handle_message_error(message, exception)
77
- begin
78
- error_handler.call(message, exception)
79
- rescue => error_handler_exception # the error handler crashed
80
- Logging::LifecycleLogger.log_error_handler_fail message, error_handler_exception
81
- raise error_handler_exception
82
- end
77
+ error_handler.call(message, exception)
78
+ rescue => error_handler_exception # the error handler crashed
79
+ Logging::LifecycleLogger.log_error_handler_fail message, error_handler_exception
80
+ raise error_handler_exception
83
81
  end
84
82
 
85
83
  def logger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This class is responsible for dispatching the messages to the appropriate handler.
2
4
  # The handlers must be registered with the dispatcher.
3
5
  # Tha handlers need to be modules that implement the process method.
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  # This is the default error handler for dispatch rider.
3
5
  # It simply re-raises the exception.
4
6
  module DefaultErrorHandler
5
- def self.call(message, exception)
7
+ def self.call(_message, exception)
6
8
  raise exception
7
9
  end
8
10
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file contains all the error classes for this gem.
2
4
  module DispatchRider
3
5
  # The base error class of the gem
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Handlers
3
5
  class Base
4
6
  include NamedProcess
5
7
  extend InheritanceTracking
6
-
8
+
7
9
  class << self
8
- def set_default_retry( amount )
10
+ def set_default_retry( amount )
9
11
  define_method(:retry_timeout) do
10
12
  amount
11
13
  end
12
14
  end
13
15
  end
14
-
16
+
15
17
  attr_reader :raw_message
16
18
 
17
19
  def do_process(raw_message)
@@ -20,24 +22,24 @@ module DispatchRider
20
22
  process(raw_message.body)
21
23
  end
22
24
  rescue Exception => e
23
- self.retry if self.retry_on_failure?
25
+ self.retry if retry_on_failure?
24
26
  raise e
25
27
  end
26
28
 
27
29
  def process(message)
28
30
  raise NotImplementedError, "Method 'process' not overridden in subclass!"
29
31
  end
30
-
32
+
31
33
  protected
32
-
34
+
33
35
  def extend_timeout(timeout)
34
36
  raw_message.extend_timeout(timeout)
35
37
  end
36
-
38
+
37
39
  def return_to_queue
38
40
  raw_message.return_to_queue
39
41
  end
40
-
42
+
41
43
  def retry
42
44
  timeout = retry_timeout
43
45
  case timeout
@@ -47,9 +49,9 @@ module DispatchRider
47
49
  extend_timeout(timeout)
48
50
  end
49
51
  end
50
-
52
+
51
53
  def retry_on_failure?
52
- self.respond_to? :retry_timeout
54
+ respond_to? :retry_timeout
53
55
  end
54
56
  end
55
57
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This module tracks which classes inherit from the class that includes
2
4
  # the module, and provides an accessor to it.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Handlers
3
5
  module NamedProcess
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Handlers
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if defined? Appsignal
2
4
  ::Appsignal.logger.info('Loading Dispatch Rider integration')
3
5
 
@@ -13,7 +15,7 @@ if defined? Appsignal
13
15
  method: 'handle',
14
16
  attempts: message.receive_count,
15
17
  queue: message.queue_name,
16
- queue_time: (Time.now.to_f - message.sent_at.to_f) * 1000,
18
+ queue_time: (Time.now.to_f - message.sent_at.to_f) * 1000
17
19
  ) do
18
20
  job.call
19
21
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
 
3
5
  # JSON Log Formatter
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class LifecycleLogger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Text Log Formatter
2
4
  module DispatchRider
3
5
  module Logging
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  class Translator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  # Translates a message into a loggable hash based on its result.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module Logging
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This class represents a message. All other objects dela with passing around instances of this class.
2
4
  # A message must have a subject and a body. The subject represents the handlers name and the body represents
3
5
  # the payload of the process method in the handler.
@@ -27,6 +29,7 @@ module DispatchRider
27
29
 
28
30
  def ==(other)
29
31
  return false unless other.respond_to? :attributes
32
+
30
33
  attributes == other.attributes
31
34
  end
32
35
  end
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-sns'
4
+
1
5
  # This is a basic implementation of the Notification service using Amazon SNS.
2
6
  # The expected usage is as follows :
3
7
  # notification_service = DispatchRider::NotificationServices::AwsSns.new
@@ -7,8 +11,6 @@ module DispatchRider
7
11
  class AwsSns < Base
8
12
  def notifier_builder
9
13
  Aws::SNS::Client
10
- rescue NameError
11
- raise AdapterNotFoundError.new(self.class.name, 'aws-sdk')
12
14
  end
13
15
 
14
16
  def channel_registrar_builder
@@ -22,7 +24,7 @@ module DispatchRider
22
24
  # not really happy with this, but the notification service registrar system is way too rigid to do this cleaner
23
25
  # since you only can have one notifier for the whole service, but you need to create a new one for each region
24
26
  def channel(name)
25
- arn = self.fetch(name)
27
+ arn = fetch(name)
26
28
  # in v1, the Topic object was fetched from API, in v3 it's basically just an arn wrapper
27
29
  Aws::SNS::Topic.new(arn)
28
30
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This base class provides an interface that we can implement
2
4
  # to generate a wrapper around a notification service.
3
5
  # The expected usage is as follows :
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # this represents a FileSystem queue channel (or basically a folder)
2
4
 
3
5
  module DispatchRider
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This is abstraction around a notifier service for FileSystem based queue services
2
4
 
3
5
  module DispatchRider
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # this is a basic notification service which uses a filesystem folder to handle notifications
2
4
 
3
5
  module DispatchRider
@@ -12,7 +14,7 @@ module DispatchRider
12
14
  end
13
15
 
14
16
  def channel(name)
15
- notifier.channel(self.fetch(name))
17
+ notifier.channel(fetch(name))
16
18
  end
17
19
  end
18
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # The namespace that holds the notification services services
2
4
  module DispatchRider
3
5
  module NotificationServices
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'securerandom'
2
4
 
3
5
  module DispatchRider
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Publisher::Configuration::Destination
3
5
  def initialize(name, attributes={})
@@ -12,10 +14,10 @@ module DispatchRider
12
14
  attr_reader :name, :service, :channel, :options
13
15
 
14
16
  def ==(other)
15
- self.name == other.name &&
16
- self.service == other.service &&
17
- self.channel == other.channel &&
18
- self.options == other.options
17
+ name == other.name &&
18
+ service == other.service &&
19
+ channel == other.channel &&
20
+ options == other.options
19
21
  end
20
22
  end
21
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Publisher::Configuration::NotificationService
3
5
  def initialize(name, options)
@@ -8,8 +10,8 @@ module DispatchRider
8
10
  attr_reader :name, :options
9
11
 
10
12
  def ==(other)
11
- self.name == other.name &&
12
- self.options == other.options
13
+ name == other.name &&
14
+ options == other.options
13
15
  end
14
16
  end
15
17
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Publisher::Configuration
3
5
  def initialize(configuration_hash = {})
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Publisher
3
5
  module ConfigurationReader
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  class Publisher
3
5
  module ConfigurationSupport
4
6
  def configuration
5
7
  @configuration ||= Configuration.new
6
8
  end
7
- alias_method :config, :configuration
9
+ alias config configuration
8
10
 
9
11
  def configure(configuration_hash = {})
10
12
  if block_given?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_support/core_ext/hash/indifferent_access"
2
4
  require_relative "publisher/configuration_support"
3
5
 
@@ -78,13 +80,12 @@ module DispatchRider
78
80
  end
79
81
 
80
82
  def services_and_channels_map(destinations)
81
- destinations.reduce({}) do |result, destination|
83
+ destinations.each_with_object({}) do |destination, result|
82
84
  if result.has_key?(destination.service)
83
85
  result[destination.service] << destination.channel
84
86
  else
85
87
  result[destination.service] = [destination.channel]
86
88
  end
87
- result
88
89
  end
89
90
  end
90
91
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module QueueServices
3
5
  class AwsSqs < Base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module QueueServices
3
5
  class AwsSqs < Base
@@ -14,10 +16,10 @@ module DispatchRider
14
16
  # NOTE: Setting the visibility timeout resets the timeout to NOW and makes it visibility timeout this time
15
17
  # Essentially resetting the timer on this message
16
18
  def extend_timeout(timeout)
17
- item.visibility_timeout = timeout
18
- if timeout > 0
19
- @total_timeout = timeout + (Time.now - start_time).to_i
20
- end
19
+ item.change_visibility({
20
+ visibility_timeout: timeout # required
21
+ })
22
+ @total_timeout = timeout + (Time.now - start_time).to_i if timeout > 0
21
23
  end
22
24
 
23
25
  # We effectively return the item to the queue by setting
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-sqs'
4
+
1
5
  # This queue service is based on aws sqs.
2
6
  # To make this queue service work, one would need the aws sqs gem to be installed.
3
7
  module DispatchRider
@@ -21,8 +25,6 @@ module DispatchRider
21
25
  else
22
26
  raise RecordInvalid.new(self, ["Either name or url have to be specified"])
23
27
  end
24
- rescue NameError
25
- raise AdapterNotFoundError.new(self.class.name, 'aws-sdk')
26
28
  end
27
29
 
28
30
  def pop
@@ -32,6 +34,7 @@ module DispatchRider
32
34
 
33
35
  visibility_timeout_shield(obj) do
34
36
  raise AbortExecution, "false received from handler" unless yield(obj)
37
+
35
38
  obj
36
39
  end
37
40
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This is the base class that provides the template for all queue services.
2
4
  # The child classes must implement the following methods to become a concrete class :
3
5
  # assign_storage, insert, raw_head, construct_message_from, delete and size.
@@ -27,12 +29,11 @@ module DispatchRider
27
29
  raise NotImplementedError
28
30
  end
29
31
 
30
-
31
32
  #If you pass a block into pop it will wrap the deletion of the message with it's handling
32
- def pop(&block)
33
+ def pop
33
34
  received = head
34
35
  if received
35
- block.call(received) && delete(received.item)
36
+ yield(received) && delete(received.item)
36
37
  received
37
38
  end
38
39
  end
@@ -41,7 +42,7 @@ module DispatchRider
41
42
  raw_item = raw_head
42
43
  raw_item && received_message_for(raw_item)
43
44
  end
44
-
45
+
45
46
  def received_message_for(raw_item)
46
47
  QueueServices::ReceivedMessage.new(construct_message_from(raw_item), raw_item)
47
48
  end
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DispatchRider
2
4
  module QueueServices
3
5
  class FileSystem < Base
4
6
  class FsReceivedMessage < ReceivedMessage
5
7
  attr_reader :queue
6
-
8
+
7
9
  def initialize(message, item, queue)
8
10
  @queue = queue
9
11
  super(message, item)
10
12
  end
11
-
13
+
12
14
  def extend_timeout(timeout)
13
15
  #file system doesn't support timeouts on items, so we ignore this.
14
16
  end
15
-
17
+
16
18
  def return_to_queue
17
19
  queue.put_back(item)
18
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This is a queue implementation for the queue service based on file systems
2
4
  module DispatchRider
3
5
  module QueueServices
@@ -10,13 +12,14 @@ module DispatchRider
10
12
 
11
13
  def add(item)
12
14
  name_base = "#{@path}/#{Time.now.to_f}"
13
- File.open("#{name_base}.inprogress", "w"){ |f| f.write(item) }
15
+ File.write("#{name_base}.inprogress", item)
14
16
  FileUtils.mv("#{name_base}.inprogress", "#{name_base}.ready")
15
17
  end
16
18
 
17
19
  def pop
18
20
  file_path = next_item(10)
19
21
  return nil unless file_path
22
+
20
23
  file_path_inflight = file_path.gsub(/\.ready$/, '.inflight')
21
24
  FileUtils.mv(file_path, file_path_inflight)
22
25
  File.new(file_path_inflight)
@@ -32,9 +35,7 @@ module DispatchRider
32
35
  File.unlink(item.path)
33
36
  end
34
37
 
35
- def size
36
- file_paths.size
37
- end
38
+ delegate :size, to: :file_paths
38
39
 
39
40
  private
40
41