active_elastic_job 1.3.0 → 1.3.1

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: be0c3eef5f0c1b0aa66524d644f7f855f8c3a99d
4
- data.tar.gz: af9a0f1e16545725b593d01a42743769f3f9d621
3
+ metadata.gz: fba8dc34fccb06d74d63d72b215251bbd5360dc9
4
+ data.tar.gz: c3b74c2041ce300b43aec6a4415b95f8bc74608e
5
5
  SHA512:
6
- metadata.gz: 82c4cda1a5c365a803ee5e3d0948a22d9a372d77f354671bfd2e50197db807ee424f27bb5fb1474c6a6130c5a1b50279dd1e7d60fc5b8c47ee101f326ca933ed
7
- data.tar.gz: 39aee6ee9c19d0fac3b263045211fb420643c93fb7bb65f249113c5d53d89fc1611ea171d717a9b7e288346fa9a1a8efa6f8c8fcc9d40fa1edb7437e3ee013d5
6
+ metadata.gz: c73e6686338a3f38d7485526a49b8c78c3d3e49cccea3d82d56a2de044a02c6068268f762bfa13488e9f9105082b3012b374d6d24fc46e998d25b07345acad1c
7
+ data.tar.gz: 2a05f3454b9ee41148e45f0ed1c9a02192a051ba5fd7a5bf69503fa5fba7b73ce1d175f2e4f9e9b47b715d4567164b2b2e8777cab1172ea36e6bb66ec504c3e4
@@ -5,6 +5,8 @@ require 'active_job/queue_adapters/active_elastic_job_adapter'
5
5
  require 'active_elastic_job/rack/sqs_message_consumer'
6
6
  require 'active_elastic_job/message_verifier'
7
7
 
8
- module ActiveElasticJob; end;
8
+ module ActiveElasticJob
9
+ ACRONYM = 'AEJ'.freeze
10
+ end
9
11
 
10
12
  require "active_elastic_job/railtie" if defined? Rails
@@ -13,7 +13,12 @@ module ActiveElasticJob
13
13
  # environment, which verifies the digest, have to use the *same*
14
14
  # +secrets.secret_key_base+ setting.
15
15
  class SqsMessageConsumer
16
- USER_AGENT_PREFIX = 'aws-sqsd'
16
+ USER_AGENT_PREFIX = 'aws-sqsd'.freeze
17
+ DIGEST_HEADER_NAME = 'HTTP_X_AWS_SQSD_ATTR_MESSAGE_DIGEST'.freeze
18
+ ORIGIN_HEADER_NAME = 'HTTP_X_AWS_SQSD_ATTR_ORIGIN'.freeze
19
+ CONTENT_TYPE = 'application/json'.freeze
20
+ CONTENT_TYPE_HEADER_NAME = 'Content-Type'.freeze
21
+ OK_RESPONSE_CODE = '200'.freeze
17
22
 
18
23
  def initialize(app) #:nodoc:
19
24
  @app = app
@@ -27,11 +32,11 @@ module ActiveElasticJob
27
32
  job = JSON.load(request.body)
28
33
  ActiveJob::Base.execute(job)
29
34
  rescue ActiveElasticJob::MessageVerifier::InvalidDigest => e
30
- return ['403', {'Content-Type' => env['text/plain'] }, ["incorrect digest"]]
35
+ return ['403', {CONTENT_TYPE_HEADER_NAME => env['text/plain'] }, ["incorrect digest"]]
31
36
  rescue StandardError => e
32
- return ['500', {'Content-Type' => env['text/plain'] }, [e.message]]
37
+ return ['500', {CONTENT_TYPE_HEADER_NAME => env['text/plain'] }, [e.message]]
33
38
  end
34
- return ['200', {'Content-Type' => 'application/json' }, [ '' ]]
39
+ return [OK_RESPONSE_CODE , {CONTENT_TYPE_HEADER_NAME => CONTENT_TYPE }, [ '' ]]
35
40
  end
36
41
  @app.call(env)
37
42
  end
@@ -41,7 +46,7 @@ module ActiveElasticJob
41
46
  def verify!(request)
42
47
  secret_key_base = Rails.application.secrets[:secret_key_base]
43
48
  @verifier ||= ActiveElasticJob::MessageVerifier.new(secret_key_base)
44
- digest = request.headers['HTTP_X_AWS_SQSD_ATTR_MESSAGE_DIGEST']
49
+ digest = request.headers[DIGEST_HEADER_NAME]
45
50
  @verifier.verify!(request.body.string, digest)
46
51
  end
47
52
 
@@ -51,14 +56,20 @@ module ActiveElasticJob
51
56
  # Instead we make a simple string comparison.
52
57
  # Benchmark runs showed an performance increase of
53
58
  # up to 40%
54
- current_user_agent = request.headers['User-Agent']
59
+ current_user_agent = request.headers['User-Agent'.freeze]
55
60
  return (current_user_agent.present? &&
56
61
  current_user_agent.size >= USER_AGENT_PREFIX.size &&
57
62
  current_user_agent[0..(USER_AGENT_PREFIX.size - 1)] == USER_AGENT_PREFIX)
58
63
  end
59
64
 
60
65
  def originates_from_gem?(request)
61
- request.headers['HTTP_X_AWS_SQSD_ATTR_ORIGIN'] == 'AEJ'
66
+ if request.headers[ORIGIN_HEADER_NAME] == ActiveElasticJob::ACRONYM
67
+ return true
68
+ elsif request.headers[DIGEST_HEADER_NAME] != nil
69
+ return true
70
+ else
71
+ return false
72
+ end
62
73
  end
63
74
  end
64
75
  end
@@ -2,7 +2,7 @@ module ActiveElasticJob
2
2
  module VERSION
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- TINY = 0
5
+ TINY = 1
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
@@ -77,24 +77,10 @@ The message with Message ID #{message_id} sent to SQS might be corrupted.
77
77
  def enqueue_at(job, timestamp) #:nodoc:
78
78
  serialized_job = JSON.dump(job.serialize)
79
79
  check_job_size!(serialized_job)
80
- message = {
81
- queue_url: queue_url(job.queue_name),
82
- message_body: serialized_job,
83
- delay_seconds: calculate_delay(timestamp),
84
- message_attributes: {
85
- "message_digest" => {
86
- string_value: message_digest(serialized_job),
87
- data_type: "String"
88
- },
89
- "origin" => {
90
- string_value: "AEJ",
91
- data_type: "String"
92
- }
93
- }
94
- }
80
+ message = build_message(job.queue_name, serialized_job, timestamp)
95
81
  resp = aws_sqs_client.send_message(message)
96
82
  verify_md5_digests!(
97
- resp,
83
+ resp,
98
84
  message[:message_body],
99
85
  message[:message_attributes]
100
86
  )
@@ -110,6 +96,24 @@ The message with Message ID #{message_id} sent to SQS might be corrupted.
110
96
 
111
97
  private
112
98
 
99
+ def build_message(queue_name, serialized_job, timestamp)
100
+ {
101
+ queue_url: queue_url(queue_name),
102
+ message_body: serialized_job,
103
+ delay_seconds: calculate_delay(timestamp),
104
+ message_attributes: {
105
+ message_digest: {
106
+ string_value: message_digest(serialized_job),
107
+ data_type: "String".freeze
108
+ },
109
+ origin: {
110
+ string_value: ActiveElasticJob::ACRONYM,
111
+ data_type: "String".freeze
112
+ }
113
+ }
114
+ }
115
+ end
116
+
113
117
  def queue_url(queue_name)
114
118
  cache_key = queue_name.to_s
115
119
  @queue_urls ||= { }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_elastic_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tawan Sierek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-06 00:00:00.000000000 Z
11
+ date: 2016-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk