lib/queue_bus/dispatch.rb in queue-bus-0.12.0 vs lib/queue_bus/dispatch.rb in queue-bus-0.13.0
- old
+ new
@@ -14,9 +14,42 @@
def size
@subscriptions.size
end
+ def on_heartbeat(key, minute: nil, hour: nil, minute_interval: nil, hour_interval: nil, &block) # rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/ParameterLists, Metrics/CyclomaticComplexity, Metrics/AbcSize
+ if minute_interval && !minute_interval.positive?
+ raise ArgumentError, 'minute_interval must be a positive integer'
+ end
+
+ if hour_interval && !hour_interval.positive?
+ raise ArgumentError, 'hour_interval must be a positive integer'
+ end
+
+ matcher = { bus_event_type: :heartbeat_minutes }
+
+ if minute
+ raise ArgumentError, 'minute must be a positive integer' unless minute.positive?
+
+ matcher['minute'] = minute
+ end
+
+ if hour
+ raise ArgumentError, 'hour must be a positive integer' unless hour.positive?
+
+ matcher['hour'] = hour
+ end
+
+ subscribe(key, matcher) do |event|
+ if (minute_interval.nil? || (event['minute'] % minute_interval).zero?) &&
+ (hour_interval.nil? || (event['hour'] % hour_interval).zero?)
+
+ # Yield the block passed in.
+ block.call
+ end
+ end
+ end
+
def subscribe(key, matcher_hash = nil, &block)
dispatch_event('default', key, matcher_hash, block)
end
# allows definitions of other queues