simple_job 0.2.1 → 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.
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,9 @@
1
1
  = Simple Job
2
2
 
3
+ == Version 0.3.0
4
+ * Allowing JobDefinition#execute method to take a message parameter
5
+ * Adding max_attempt_count declaration to JobDefinition
6
+
3
7
  == Version 0.2.1
4
8
  * Disabling type/version checking to support multiple type declarations in one job
5
9
 
@@ -150,6 +150,11 @@ module JobDefinition
150
150
  ::SimpleJob::JobDefinition.job_definitions << new_definition
151
151
  end
152
152
 
153
+ def max_attempt_count(attempts = nil)
154
+ @max_attempt_count = attempts if attempts
155
+ @max_attempt_count
156
+ end
157
+
153
158
  def job_queue(queue_type = nil)
154
159
  @job_queue = JobQueue[queue_type] if queue_type
155
160
  @job_queue
@@ -66,6 +66,9 @@ class SQSJobQueue < JobQueue
66
66
  # two arguments, the matching job definition (already populated with the
67
67
  # contents of the message) and the raw AWS message.
68
68
  #
69
+ # The #execute method MAY have a parameter, which will be populated with
70
+ # the raw AWS::SQS::ReceivedMessage object if it exists.
71
+ #
69
72
  # The queue's configured visibility timeout will be used unless the
70
73
  # :visibility_timeout option is passed (as a number of seconds).
71
74
  #
@@ -84,6 +87,9 @@ class SQSJobQueue < JobQueue
84
87
  # will safely complete processing the current message and return if a HUP,
85
88
  # INT, or TERM signal is sent to the process.
86
89
  #
90
+ # You may also pass a :max_executions option (as an integer), in which case
91
+ # the poll method will poll that many times and then exit.
92
+ #
87
93
  # Note that this method will override any signal handlers for the HUP, INT,
88
94
  # or TERM signals during its execution, but the previous handlers will be
89
95
  # restored once the method returns.
@@ -98,7 +104,12 @@ class SQSJobQueue < JobQueue
98
104
  }.merge(options)
99
105
 
100
106
  message_handler = block || lambda do |definition, message|
101
- definition.execute
107
+ execute_method = definition.method(:execute)
108
+ arguments = []
109
+ if execute_method.arity >= 1
110
+ arguments << message
111
+ end
112
+ execute_method.call(*arguments)
102
113
  end
103
114
 
104
115
  exit_next = false
@@ -127,7 +138,13 @@ class SQSJobQueue < JobQueue
127
138
  raw_message = JSON.parse(message.body)
128
139
  current_job_type = raw_message['type']
129
140
  definition_class = JobDefinition.job_definition_class_for(raw_message['type'], raw_message['version'])
141
+
130
142
  raise('no definition found') if !definition_class
143
+
144
+ if definition_class.max_attempt_count && (message.receive_count > definition_class.max_attempt_count)
145
+ raise('max attempt count reached')
146
+ end
147
+
131
148
  definition = definition_class.new.from_json(message.body)
132
149
  message_handler.call(definition, message)
133
150
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleJob
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_job
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Dawson