eventq_base 1.7.2 → 1.8.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: 4ee35ca46dd8265b6f95194da61c9299fc5a098e
4
- data.tar.gz: e4d99574a547572b157b00a358abc0c769408ad0
3
+ metadata.gz: 4a2ac127f57aef44a90cfea420a1087cd1fcc378
4
+ data.tar.gz: 990a985365ea09620740ff7a649ee337d66bf308
5
5
  SHA512:
6
- metadata.gz: 4999a74dbe15d2489954c625419917ef9c7063c5ab28203c74d2048fecd7dd44b0002b77c08d39279f61d68d7358ce98a2422e67ef45ad27fb99a74c4ca3f11b
7
- data.tar.gz: 44ad49255f58de807290e0fc9a2b9f101d3cc95c86e24c439dcdc950afc2a4f18023081d22742e5467ed4c6690eea790035bfd64b6395f5a93826ccf8182c2e9
6
+ metadata.gz: e5de8a9e071f90e0fc94bdb092ff6e66940ca6002749697a732c54bd5963d01f5ceb163fe127cf7b0b238006e4f164171803daef72e4a758513330932bc60bec
7
+ data.tar.gz: 1188228dd7b85272b80e68d80207aa57e93168df7b7b9b796036d9b988e4b7cf2c9d2f3f46ec8be47f204611a583d0e0399470041a2e32ad12e40cfb6005a548
@@ -0,0 +1,7 @@
1
+ module EventQ
2
+ class NonceError < StandardError
3
+ def initialize(message = 'Message has already been processed.')
4
+ super(message)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,62 @@
1
+ module EventQ
2
+ class NonceManager
3
+
4
+ def self.configure(server:,timeout:10000,lifespan:3600000)
5
+ @server_url = server
6
+ @timeout = timeout
7
+ @lifespan = lifespan
8
+ end
9
+
10
+ def self.server_url
11
+ @server_url
12
+ end
13
+
14
+ def self.timeout
15
+ @timeout
16
+ end
17
+
18
+ def self.lifespan
19
+ @lifespan
20
+ end
21
+
22
+ def self.process(nonce, &block)
23
+
24
+ if @server_url != nil
25
+
26
+ process_with_nonce(nonce, block)
27
+
28
+ else
29
+
30
+ process_without_nonce(block)
31
+
32
+ end
33
+
34
+ return true
35
+
36
+ end
37
+
38
+ def self.process_with_nonce(nonce, block)
39
+ @server = Redlock::Client.new([ @server_url ])
40
+ @redis = Redis.new(url: @server_url)
41
+
42
+ lock = @server.lock(nonce, @timeout)
43
+ if lock == false
44
+ raise NonceError.new("Message has already been processed: #{nonce}")
45
+ end
46
+
47
+ block.call
48
+
49
+ @redis.expire(nonce, @lifespan)
50
+ end
51
+
52
+ def self.process_without_nonce(block)
53
+ block.call
54
+ end
55
+
56
+ def self.reset
57
+ @server_url = nil
58
+ @timeout = nil
59
+ @lifespan = nil
60
+ end
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module EventqBase
2
- VERSION = "1.7.2"
2
+ VERSION = "1.8.0"
3
3
  end
data/lib/eventq_base.rb CHANGED
@@ -2,6 +2,7 @@ require 'class_kit'
2
2
  require 'hash_kit'
3
3
  require 'json_kit'
4
4
  require 'oj'
5
+ require 'redlock'
5
6
 
6
7
  require_relative 'eventq_base/version'
7
8
  require_relative 'eventq_base/eventq_logger'
@@ -17,4 +18,6 @@ require_relative 'eventq_base/eventq_client_contract'
17
18
  require_relative 'eventq_base/configuration'
18
19
  require_relative 'eventq_base/serialization_providers'
19
20
  require_relative 'eventq_base/worker_id'
21
+ require_relative 'eventq_base/nonce_error'
22
+ require_relative 'eventq_base/nonce_manager'
20
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventq_base
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.2
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughanbrittonsage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-06 00:00:00.000000000 Z
11
+ date: 2016-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: class_kit
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +122,20 @@ dependencies:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: redlock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
97
139
  description: This gem contains the base classes and contracts required by any eventq
98
140
  implementations.
99
141
  email:
@@ -112,6 +154,8 @@ files:
112
154
  - lib/eventq_base/eventq_logger.rb
113
155
  - lib/eventq_base/exchange.rb
114
156
  - lib/eventq_base/message_args.rb
157
+ - lib/eventq_base/nonce_error.rb
158
+ - lib/eventq_base/nonce_manager.rb
115
159
  - lib/eventq_base/queue.rb
116
160
  - lib/eventq_base/queue_message.rb
117
161
  - lib/eventq_base/queue_worker_contract.rb