active_publisher 1.4.1.pre-java → 1.6.0-java
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 +4 -4
- data/.circleci/config.yml +73 -38
- data/.github/workflows/ruby.yaml +44 -0
- data/active_publisher.gemspec +3 -3
- data/lib/active_publisher/async/in_memory_adapter/async_queue.rb +1 -1
- data/lib/active_publisher/async/in_memory_adapter.rb +2 -2
- data/lib/active_publisher/async/redis_adapter.rb +3 -3
- data/lib/active_publisher/configuration.rb +3 -3
- data/lib/active_publisher/multi_op_queue.rb +203 -0
- data/lib/active_publisher/version.rb +1 -1
- metadata +30 -59
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3cf517985a035e47a89b771fa161c8e778ac8bfbb2c3b3bc563cd3350f85f4e1
|
|
4
|
+
data.tar.gz: b7615a1a4258812360248f7552f01fa865daf7e2b74369c6c9ca7e2908aa70cb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de2ef24c6b887c629c76f33d828acd4c60e1c1a329d666a35d83d542ee1d557f4b340251ccc0e01ff4a508e0dfe2d720e112efee8835ef67419a5768b1c7ad11
|
|
7
|
+
data.tar.gz: dcaf0547623590eb025ddb501d8fa731bc34eb00cb95733b69c48537c4792f51b7929bd710aac1898f0c9f3d6175792dff6b755e16f6c6ab8e0430116f9483e3
|
data/.circleci/config.yml
CHANGED
|
@@ -1,57 +1,92 @@
|
|
|
1
|
-
# Inspired by: http://mikebian.co/running-tests-against-multiple-ruby-versions-using-circleci/
|
|
2
|
-
|
|
3
1
|
version: 2.1
|
|
4
2
|
|
|
5
|
-
orbs:
|
|
6
|
-
ruby: circleci/ruby@1.1
|
|
7
|
-
|
|
8
3
|
jobs:
|
|
9
|
-
|
|
10
|
-
parallelism: 1
|
|
4
|
+
build_and_test:
|
|
11
5
|
parameters:
|
|
12
|
-
|
|
6
|
+
docker_image:
|
|
13
7
|
type: string
|
|
8
|
+
description: "The Ruby or JRuby Docker image to test against"
|
|
9
|
+
|
|
14
10
|
docker:
|
|
15
|
-
|
|
16
|
-
- image:
|
|
11
|
+
# 1. The Primary Container (where your code actually runs)
|
|
12
|
+
- image: << parameters.docker_image >>
|
|
13
|
+
environment:
|
|
14
|
+
JRUBY_OPTS: "-J-Xmx1024m"
|
|
15
|
+
RAILS_ENV: test
|
|
16
|
+
# Tell your app where to find RabbitMQ (if your app uses this ENV var)
|
|
17
|
+
RABBITMQ_URL: "amqp://guest:guest@localhost:5672"
|
|
18
|
+
|
|
19
|
+
# 2. The Service Container (runs in the background)
|
|
20
|
+
- image: rabbitmq:3
|
|
21
|
+
# If you need the management UI for debugging, use `rabbitmq:3-management` instead
|
|
22
|
+
# environment:
|
|
23
|
+
# RABBITMQ_DEFAULT_USER: guest
|
|
24
|
+
# RABBITMQ_DEFAULT_PASS: guest
|
|
25
|
+
|
|
26
|
+
working_directory: ~/project
|
|
17
27
|
|
|
18
28
|
steps:
|
|
19
29
|
- checkout
|
|
30
|
+
|
|
20
31
|
- run:
|
|
21
|
-
name:
|
|
22
|
-
command:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
name: Install System Dependencies
|
|
33
|
+
command: |
|
|
34
|
+
if [ "$(id -u)" = "0" ]; then
|
|
35
|
+
apt-get update && apt-get install -y build-essential git
|
|
36
|
+
else
|
|
37
|
+
sudo apt-get update && sudo apt-get install -y build-essential git
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Note: We added the docker_image parameter to the cache key
|
|
41
|
+
# so MRI and JRuby gems don't conflict.
|
|
42
|
+
- restore_cache:
|
|
43
|
+
keys:
|
|
44
|
+
- v1-gems-<< parameters.docker_image >>-{{ checksum "Gemfile.lock" }}
|
|
45
|
+
- v1-gems-<< parameters.docker_image >>-
|
|
46
|
+
|
|
31
47
|
- run:
|
|
32
|
-
name:
|
|
33
|
-
command:
|
|
48
|
+
name: Install Ruby Dependencies
|
|
49
|
+
command: |
|
|
50
|
+
gem install bundler
|
|
51
|
+
bundle config set --local path 'vendor/bundle'
|
|
52
|
+
bundle install --jobs=4 --retry=3
|
|
53
|
+
|
|
54
|
+
- save_cache:
|
|
55
|
+
paths:
|
|
56
|
+
- ./vendor/bundle
|
|
57
|
+
key: v1-gems-<< parameters.docker_image >>-{{ checksum "Gemfile.lock" }}
|
|
58
|
+
|
|
59
|
+
# Wait for RabbitMQ to be ready before running tests.
|
|
60
|
+
# Service containers can sometimes take a few seconds to boot up.
|
|
34
61
|
- run:
|
|
35
|
-
name:
|
|
36
|
-
command:
|
|
62
|
+
name: Wait for RabbitMQ
|
|
63
|
+
command: |
|
|
64
|
+
if [ "$(id -u)" = "0" ]; then
|
|
65
|
+
apt-get install -y netcat-openbsd
|
|
66
|
+
else
|
|
67
|
+
sudo apt-get install -y netcat-openbsd
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
echo "Waiting for RabbitMQ to start..."
|
|
71
|
+
while ! nc -z localhost 5672; do
|
|
72
|
+
sleep 1
|
|
73
|
+
done
|
|
74
|
+
echo "RabbitMQ is ready!"
|
|
75
|
+
|
|
37
76
|
- run:
|
|
38
|
-
name:
|
|
77
|
+
name: Run Tests
|
|
39
78
|
command: bundle exec rspec
|
|
40
79
|
|
|
41
|
-
# strangely, there seems to be very little documentation about exactly how martix builds work.
|
|
42
|
-
# By defining a param inside your job definition, Circle CI will automatically spawn a job for
|
|
43
|
-
# unique param value passed via `matrix`. Neat!
|
|
44
|
-
# https://circleci.com/blog/circleci-matrix-jobs/
|
|
45
80
|
workflows:
|
|
46
|
-
|
|
81
|
+
version: 2
|
|
82
|
+
ruby_compatibility_matrix:
|
|
47
83
|
jobs:
|
|
48
|
-
-
|
|
84
|
+
- build_and_test:
|
|
85
|
+
name: test-<< matrix.docker_image >>
|
|
49
86
|
matrix:
|
|
50
87
|
parameters:
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
- circleci/jruby:9.2
|
|
57
|
-
- circleci/jruby:9.3
|
|
88
|
+
docker_image:
|
|
89
|
+
- "cimg/ruby:3.1"
|
|
90
|
+
- "cimg/ruby:3.4"
|
|
91
|
+
- "jruby:9.4"
|
|
92
|
+
- "jruby:10.0"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Build and Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
ruby-version: ['3.1', '3.4', 'jruby-9.4', 'jruby-10']
|
|
16
|
+
|
|
17
|
+
services:
|
|
18
|
+
rabbitmq:
|
|
19
|
+
image: rabbitmq
|
|
20
|
+
ports:
|
|
21
|
+
- 5672:5672
|
|
22
|
+
# GHA natively waits for the service to be healthy, replacing `dockerize`
|
|
23
|
+
options: >-
|
|
24
|
+
--health-cmd "rabbitmq-diagnostics -q ping"
|
|
25
|
+
--health-interval 10s
|
|
26
|
+
--health-timeout 5s
|
|
27
|
+
--health-retries 5
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout code
|
|
31
|
+
uses: actions/checkout@v4
|
|
32
|
+
|
|
33
|
+
- name: Set up Ruby
|
|
34
|
+
uses: ruby/setup-ruby@v1
|
|
35
|
+
with:
|
|
36
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
37
|
+
# This automatically runs `bundle install` and caches the gems for faster runs!
|
|
38
|
+
bundler-cache: true
|
|
39
|
+
|
|
40
|
+
- name: Which bundler?
|
|
41
|
+
run: bundle -v
|
|
42
|
+
|
|
43
|
+
- name: RSpec
|
|
44
|
+
run: bundle exec rspec
|
data/active_publisher.gemspec
CHANGED
|
@@ -26,10 +26,10 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.add_dependency 'bunny', '~> 2.1'
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
spec.
|
|
29
|
+
spec.required_ruby_version = '>= 3.1.0'
|
|
30
|
+
|
|
31
|
+
spec.add_dependency 'activesupport', '>= 6.0'
|
|
30
32
|
spec.add_dependency 'concurrent-ruby'
|
|
31
|
-
spec.add_dependency 'multi_op_queue', '>= 0.2.0'
|
|
32
|
-
spec.add_dependency 'psych', '>= 3.3.2'
|
|
33
33
|
|
|
34
34
|
spec.add_development_dependency "benchmark-ips"
|
|
35
35
|
spec.add_development_dependency "bundler"
|
|
@@ -20,7 +20,7 @@ module ActivePublisher
|
|
|
20
20
|
self.back_pressure_strategy = back_pressure_strategy
|
|
21
21
|
@max_queue_size = max_queue_size
|
|
22
22
|
@supervisor_interval = supervisor_interval
|
|
23
|
-
@queue = ::MultiOpQueue::Queue.new
|
|
23
|
+
@queue = ::ActivePublisher::MultiOpQueue::Queue.new
|
|
24
24
|
@consumers = {}
|
|
25
25
|
create_and_supervise_consumers!
|
|
26
26
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require "active_publisher/message"
|
|
2
1
|
require "active_publisher/async/in_memory_adapter/async_queue"
|
|
3
2
|
require "active_publisher/async/in_memory_adapter/channel"
|
|
4
3
|
require "active_publisher/async/in_memory_adapter/consumer_thread"
|
|
4
|
+
require "active_publisher/message"
|
|
5
|
+
require "active_publisher/multi_op_queue"
|
|
5
6
|
require "concurrent"
|
|
6
|
-
require "multi_op_queue"
|
|
7
7
|
|
|
8
8
|
module ActivePublisher
|
|
9
9
|
module Async
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require "active_publisher"
|
|
2
|
-
require "active_publisher/message"
|
|
3
2
|
require "active_publisher/async/redis_adapter/consumer"
|
|
4
|
-
require "
|
|
3
|
+
require "active_publisher/message"
|
|
4
|
+
require "active_publisher/multi_op_queue"
|
|
5
5
|
|
|
6
6
|
module ActivePublisher
|
|
7
7
|
module Async
|
|
@@ -26,7 +26,7 @@ module ActivePublisher
|
|
|
26
26
|
# do something with supervision ?
|
|
27
27
|
@redis_pool = new_redis_pool
|
|
28
28
|
@async_queue = ::ActivePublisher::Async::RedisAdapter::Consumer.new(redis_pool)
|
|
29
|
-
@queue = ::MultiOpQueue::Queue.new
|
|
29
|
+
@queue = ::ActivePublisher::MultiOpQueue::Queue.new
|
|
30
30
|
@flush_max = ::ActivePublisher.configuration.messages_per_batch
|
|
31
31
|
@flush_min = @flush_max / 2
|
|
32
32
|
|
|
@@ -84,9 +84,9 @@ module ActivePublisher
|
|
|
84
84
|
absolute_config_path = ::File.expand_path(::File.join("config", "active_publisher.yml"))
|
|
85
85
|
action_subscriber_config_file = ::File.expand_path(::File.join("config", "action_subscriber.yml"))
|
|
86
86
|
|
|
87
|
-
if ::File.
|
|
87
|
+
if ::File.exist?(absolute_config_path)
|
|
88
88
|
yaml_config = load_yaml_config_from_file(absolute_config_path)[env]
|
|
89
|
-
elsif ::File.
|
|
89
|
+
elsif ::File.exist?(action_subscriber_config_file)
|
|
90
90
|
yaml_config = load_yaml_config_from_file(action_subscriber_config_file)[env]
|
|
91
91
|
end
|
|
92
92
|
|
|
@@ -107,7 +107,7 @@ module ActivePublisher
|
|
|
107
107
|
erb_yaml = ::ERB.new(::File.read(file_path)).result
|
|
108
108
|
# Defined in Psych 3.2+ and the new canonical way to load trusted documents:
|
|
109
109
|
# https://github.com/ruby/psych/issues/533#issuecomment-1019363688
|
|
110
|
-
::YAML.unsafe_load(erb_yaml)
|
|
110
|
+
::YAML.respond_to?(:unsafe_load) ? ::YAML.unsafe_load(erb_yaml) : ::YAML.load(erb_yaml)
|
|
111
111
|
end
|
|
112
112
|
private_class_method :load_yaml_config_from_file
|
|
113
113
|
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
module ActivePublisher
|
|
2
|
+
module MultiOpQueue
|
|
3
|
+
# Original Queue implementation from Ruby-2.0.0
|
|
4
|
+
# https://github.com/ruby/ruby/blob/ruby_2_0_0/lib/thread.rb
|
|
5
|
+
#
|
|
6
|
+
# This class provides a way to synchronize communication between threads.
|
|
7
|
+
#
|
|
8
|
+
# Example:
|
|
9
|
+
#
|
|
10
|
+
# require 'thread'
|
|
11
|
+
#
|
|
12
|
+
# queue = Queue.new
|
|
13
|
+
#
|
|
14
|
+
# producer = Thread.new do
|
|
15
|
+
# 5.times do |i|
|
|
16
|
+
# sleep rand(i) # simulate expense
|
|
17
|
+
# queue << i
|
|
18
|
+
# puts "#{i} produced"
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# consumer = Thread.new do
|
|
23
|
+
# 5.times do |i|
|
|
24
|
+
# value = queue.pop
|
|
25
|
+
# sleep rand(i/2) # simulate expense
|
|
26
|
+
# puts "consumed #{value}"
|
|
27
|
+
# end
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# consumer.join
|
|
31
|
+
#
|
|
32
|
+
class Queue
|
|
33
|
+
#
|
|
34
|
+
# Creates a new queue.
|
|
35
|
+
#
|
|
36
|
+
def initialize
|
|
37
|
+
@que = []
|
|
38
|
+
@num_waiting = 0
|
|
39
|
+
@mutex = Mutex.new
|
|
40
|
+
@cond = ConditionVariable.new
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Concatenates +ary+ onto the queue.
|
|
45
|
+
#
|
|
46
|
+
def concat(ary)
|
|
47
|
+
handle_interrupt do
|
|
48
|
+
@mutex.synchronize do
|
|
49
|
+
@que.concat ary
|
|
50
|
+
@cond.signal
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Pushes +obj+ to the queue.
|
|
57
|
+
#
|
|
58
|
+
def push(obj)
|
|
59
|
+
handle_interrupt do
|
|
60
|
+
@mutex.synchronize do
|
|
61
|
+
@que.push obj
|
|
62
|
+
@cond.signal
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
#
|
|
68
|
+
# Alias of push
|
|
69
|
+
#
|
|
70
|
+
alias << push
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# Alias of push
|
|
74
|
+
#
|
|
75
|
+
alias enq push
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Retrieves data from the queue. If the queue is empty, the calling thread is
|
|
79
|
+
# suspended until data is pushed onto the queue. If +non_block+ is true, the
|
|
80
|
+
# thread isn't suspended, and an exception is raised.
|
|
81
|
+
#
|
|
82
|
+
def pop(non_block=false)
|
|
83
|
+
handle_interrupt do
|
|
84
|
+
@mutex.synchronize do
|
|
85
|
+
while true
|
|
86
|
+
if @que.empty?
|
|
87
|
+
if non_block
|
|
88
|
+
raise ThreadError, "queue empty"
|
|
89
|
+
else
|
|
90
|
+
begin
|
|
91
|
+
@num_waiting += 1
|
|
92
|
+
@cond.wait @mutex
|
|
93
|
+
ensure
|
|
94
|
+
@num_waiting -= 1
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
else
|
|
98
|
+
return @que.shift
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
#
|
|
106
|
+
# Alias of pop
|
|
107
|
+
#
|
|
108
|
+
alias shift pop
|
|
109
|
+
|
|
110
|
+
#
|
|
111
|
+
# Alias of pop
|
|
112
|
+
#
|
|
113
|
+
alias deq pop
|
|
114
|
+
|
|
115
|
+
#
|
|
116
|
+
# Retrieves data from the queue and returns array of contents.
|
|
117
|
+
# If +num_to_pop+ are available in the queue then multiple elements are returned in array response
|
|
118
|
+
# If the queue is empty, the calling thread is
|
|
119
|
+
# suspended until data is pushed onto the queue. If +non_block+ is true, the
|
|
120
|
+
# thread isn't suspended, and an exception is raised.
|
|
121
|
+
#
|
|
122
|
+
def pop_up_to(num_to_pop = 1, opts = {})
|
|
123
|
+
case opts
|
|
124
|
+
when TrueClass, FalseClass
|
|
125
|
+
non_bock = opts
|
|
126
|
+
when Hash
|
|
127
|
+
timeout = opts.fetch(:timeout, nil)
|
|
128
|
+
non_block = opts.fetch(:non_block, false)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
handle_interrupt do
|
|
132
|
+
@mutex.synchronize do
|
|
133
|
+
while true
|
|
134
|
+
if @que.empty?
|
|
135
|
+
if non_block
|
|
136
|
+
raise ThreadError, "queue empty"
|
|
137
|
+
else
|
|
138
|
+
begin
|
|
139
|
+
@num_waiting += 1
|
|
140
|
+
@cond.wait(@mutex, timeout)
|
|
141
|
+
return nil if @que.empty?
|
|
142
|
+
ensure
|
|
143
|
+
@num_waiting -= 1
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
else
|
|
147
|
+
return @que.shift(num_to_pop)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
#
|
|
155
|
+
# Returns +true+ if the queue is empty.
|
|
156
|
+
#
|
|
157
|
+
def empty?
|
|
158
|
+
@que.empty?
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
#
|
|
162
|
+
# Removes all objects from the queue.
|
|
163
|
+
#
|
|
164
|
+
def clear
|
|
165
|
+
@que.clear
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
#
|
|
169
|
+
# Returns the length of the queue.
|
|
170
|
+
#
|
|
171
|
+
def length
|
|
172
|
+
@que.length
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
#
|
|
176
|
+
# Alias of length.
|
|
177
|
+
#
|
|
178
|
+
alias size length
|
|
179
|
+
|
|
180
|
+
#
|
|
181
|
+
# Returns the number of threads waiting on the queue.
|
|
182
|
+
#
|
|
183
|
+
def num_waiting
|
|
184
|
+
@num_waiting
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
private
|
|
188
|
+
|
|
189
|
+
def handle_interrupt
|
|
190
|
+
@handle_interrupt = Thread.respond_to?(:handle_interrupt) if @handle_interrupt.nil?
|
|
191
|
+
|
|
192
|
+
if @handle_interrupt
|
|
193
|
+
Thread.handle_interrupt(StandardError => :on_blocking) do
|
|
194
|
+
yield
|
|
195
|
+
end
|
|
196
|
+
else
|
|
197
|
+
yield
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_publisher
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.0
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Stien
|
|
@@ -9,174 +9,145 @@ authors:
|
|
|
9
9
|
- Brandon Dewitt
|
|
10
10
|
- Devin Christensen
|
|
11
11
|
- Michael Ries
|
|
12
|
-
autorequire:
|
|
13
12
|
bindir: exe
|
|
14
13
|
cert_chain: []
|
|
15
|
-
date:
|
|
14
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
16
15
|
dependencies:
|
|
17
16
|
- !ruby/object:Gem::Dependency
|
|
17
|
+
name: march_hare
|
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
|
19
19
|
requirements:
|
|
20
20
|
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
22
|
version: '4.4'
|
|
23
|
-
name: march_hare
|
|
24
|
-
prerelease: false
|
|
25
23
|
type: :runtime
|
|
24
|
+
prerelease: false
|
|
26
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
26
|
requirements:
|
|
28
27
|
- - "~>"
|
|
29
28
|
- !ruby/object:Gem::Version
|
|
30
29
|
version: '4.4'
|
|
31
30
|
- !ruby/object:Gem::Dependency
|
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
requirements:
|
|
34
|
-
- - ">="
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: '3.2'
|
|
37
31
|
name: activesupport
|
|
38
|
-
prerelease: false
|
|
39
|
-
type: :runtime
|
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
requirements:
|
|
42
|
-
- - ">="
|
|
43
|
-
- !ruby/object:Gem::Version
|
|
44
|
-
version: '3.2'
|
|
45
|
-
- !ruby/object:Gem::Dependency
|
|
46
32
|
requirement: !ruby/object:Gem::Requirement
|
|
47
33
|
requirements:
|
|
48
34
|
- - ">="
|
|
49
35
|
- !ruby/object:Gem::Version
|
|
50
|
-
version: '0'
|
|
51
|
-
name: concurrent-ruby
|
|
52
|
-
prerelease: false
|
|
36
|
+
version: '6.0'
|
|
53
37
|
type: :runtime
|
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
55
|
-
requirements:
|
|
56
|
-
- - ">="
|
|
57
|
-
- !ruby/object:Gem::Version
|
|
58
|
-
version: '0'
|
|
59
|
-
- !ruby/object:Gem::Dependency
|
|
60
|
-
requirement: !ruby/object:Gem::Requirement
|
|
61
|
-
requirements:
|
|
62
|
-
- - ">="
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: 0.2.0
|
|
65
|
-
name: multi_op_queue
|
|
66
38
|
prerelease: false
|
|
67
|
-
type: :runtime
|
|
68
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
69
40
|
requirements:
|
|
70
41
|
- - ">="
|
|
71
42
|
- !ruby/object:Gem::Version
|
|
72
|
-
version:
|
|
43
|
+
version: '6.0'
|
|
73
44
|
- !ruby/object:Gem::Dependency
|
|
45
|
+
name: concurrent-ruby
|
|
74
46
|
requirement: !ruby/object:Gem::Requirement
|
|
75
47
|
requirements:
|
|
76
48
|
- - ">="
|
|
77
49
|
- !ruby/object:Gem::Version
|
|
78
|
-
version:
|
|
79
|
-
name: psych
|
|
80
|
-
prerelease: false
|
|
50
|
+
version: '0'
|
|
81
51
|
type: :runtime
|
|
52
|
+
prerelease: false
|
|
82
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
83
54
|
requirements:
|
|
84
55
|
- - ">="
|
|
85
56
|
- !ruby/object:Gem::Version
|
|
86
|
-
version:
|
|
57
|
+
version: '0'
|
|
87
58
|
- !ruby/object:Gem::Dependency
|
|
59
|
+
name: benchmark-ips
|
|
88
60
|
requirement: !ruby/object:Gem::Requirement
|
|
89
61
|
requirements:
|
|
90
62
|
- - ">="
|
|
91
63
|
- !ruby/object:Gem::Version
|
|
92
64
|
version: '0'
|
|
93
|
-
name: benchmark-ips
|
|
94
|
-
prerelease: false
|
|
95
65
|
type: :development
|
|
66
|
+
prerelease: false
|
|
96
67
|
version_requirements: !ruby/object:Gem::Requirement
|
|
97
68
|
requirements:
|
|
98
69
|
- - ">="
|
|
99
70
|
- !ruby/object:Gem::Version
|
|
100
71
|
version: '0'
|
|
101
72
|
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: bundler
|
|
102
74
|
requirement: !ruby/object:Gem::Requirement
|
|
103
75
|
requirements:
|
|
104
76
|
- - ">="
|
|
105
77
|
- !ruby/object:Gem::Version
|
|
106
78
|
version: '0'
|
|
107
|
-
name: bundler
|
|
108
|
-
prerelease: false
|
|
109
79
|
type: :development
|
|
80
|
+
prerelease: false
|
|
110
81
|
version_requirements: !ruby/object:Gem::Requirement
|
|
111
82
|
requirements:
|
|
112
83
|
- - ">="
|
|
113
84
|
- !ruby/object:Gem::Version
|
|
114
85
|
version: '0'
|
|
115
86
|
- !ruby/object:Gem::Dependency
|
|
87
|
+
name: connection_pool
|
|
116
88
|
requirement: !ruby/object:Gem::Requirement
|
|
117
89
|
requirements:
|
|
118
90
|
- - ">="
|
|
119
91
|
- !ruby/object:Gem::Version
|
|
120
92
|
version: '0'
|
|
121
|
-
name: connection_pool
|
|
122
|
-
prerelease: false
|
|
123
93
|
type: :development
|
|
94
|
+
prerelease: false
|
|
124
95
|
version_requirements: !ruby/object:Gem::Requirement
|
|
125
96
|
requirements:
|
|
126
97
|
- - ">="
|
|
127
98
|
- !ruby/object:Gem::Version
|
|
128
99
|
version: '0'
|
|
129
100
|
- !ruby/object:Gem::Dependency
|
|
101
|
+
name: fakeredis
|
|
130
102
|
requirement: !ruby/object:Gem::Requirement
|
|
131
103
|
requirements:
|
|
132
104
|
- - ">="
|
|
133
105
|
- !ruby/object:Gem::Version
|
|
134
106
|
version: '0'
|
|
135
|
-
name: fakeredis
|
|
136
|
-
prerelease: false
|
|
137
107
|
type: :development
|
|
108
|
+
prerelease: false
|
|
138
109
|
version_requirements: !ruby/object:Gem::Requirement
|
|
139
110
|
requirements:
|
|
140
111
|
- - ">="
|
|
141
112
|
- !ruby/object:Gem::Version
|
|
142
113
|
version: '0'
|
|
143
114
|
- !ruby/object:Gem::Dependency
|
|
115
|
+
name: pry
|
|
144
116
|
requirement: !ruby/object:Gem::Requirement
|
|
145
117
|
requirements:
|
|
146
118
|
- - ">="
|
|
147
119
|
- !ruby/object:Gem::Version
|
|
148
120
|
version: '0'
|
|
149
|
-
name: pry
|
|
150
|
-
prerelease: false
|
|
151
121
|
type: :development
|
|
122
|
+
prerelease: false
|
|
152
123
|
version_requirements: !ruby/object:Gem::Requirement
|
|
153
124
|
requirements:
|
|
154
125
|
- - ">="
|
|
155
126
|
- !ruby/object:Gem::Version
|
|
156
127
|
version: '0'
|
|
157
128
|
- !ruby/object:Gem::Dependency
|
|
129
|
+
name: rake
|
|
158
130
|
requirement: !ruby/object:Gem::Requirement
|
|
159
131
|
requirements:
|
|
160
132
|
- - ">="
|
|
161
133
|
- !ruby/object:Gem::Version
|
|
162
134
|
version: '0'
|
|
163
|
-
name: rake
|
|
164
|
-
prerelease: false
|
|
165
135
|
type: :development
|
|
136
|
+
prerelease: false
|
|
166
137
|
version_requirements: !ruby/object:Gem::Requirement
|
|
167
138
|
requirements:
|
|
168
139
|
- - ">="
|
|
169
140
|
- !ruby/object:Gem::Version
|
|
170
141
|
version: '0'
|
|
171
142
|
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: rspec
|
|
172
144
|
requirement: !ruby/object:Gem::Requirement
|
|
173
145
|
requirements:
|
|
174
146
|
- - "~>"
|
|
175
147
|
- !ruby/object:Gem::Version
|
|
176
148
|
version: '3.2'
|
|
177
|
-
name: rspec
|
|
178
|
-
prerelease: false
|
|
179
149
|
type: :development
|
|
150
|
+
prerelease: false
|
|
180
151
|
version_requirements: !ruby/object:Gem::Requirement
|
|
181
152
|
requirements:
|
|
182
153
|
- - "~>"
|
|
@@ -194,6 +165,7 @@ extensions: []
|
|
|
194
165
|
extra_rdoc_files: []
|
|
195
166
|
files:
|
|
196
167
|
- ".circleci/config.yml"
|
|
168
|
+
- ".github/workflows/ruby.yaml"
|
|
197
169
|
- ".gitignore"
|
|
198
170
|
- ".rspec"
|
|
199
171
|
- CODE_OF_CONDUCT.md
|
|
@@ -217,12 +189,12 @@ files:
|
|
|
217
189
|
- lib/active_publisher/connection.rb
|
|
218
190
|
- lib/active_publisher/logging.rb
|
|
219
191
|
- lib/active_publisher/message.rb
|
|
192
|
+
- lib/active_publisher/multi_op_queue.rb
|
|
220
193
|
- lib/active_publisher/version.rb
|
|
221
194
|
homepage: https://github.com/mxenabled/active_publisher
|
|
222
195
|
licenses:
|
|
223
196
|
- MIT
|
|
224
197
|
metadata: {}
|
|
225
|
-
post_install_message:
|
|
226
198
|
rdoc_options: []
|
|
227
199
|
require_paths:
|
|
228
200
|
- lib
|
|
@@ -230,15 +202,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
230
202
|
requirements:
|
|
231
203
|
- - ">="
|
|
232
204
|
- !ruby/object:Gem::Version
|
|
233
|
-
version:
|
|
205
|
+
version: 3.1.0
|
|
234
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
207
|
requirements:
|
|
236
|
-
- - "
|
|
208
|
+
- - ">="
|
|
237
209
|
- !ruby/object:Gem::Version
|
|
238
|
-
version:
|
|
210
|
+
version: '0'
|
|
239
211
|
requirements: []
|
|
240
|
-
rubygems_version:
|
|
241
|
-
signing_key:
|
|
212
|
+
rubygems_version: 4.0.9
|
|
242
213
|
specification_version: 4
|
|
243
214
|
summary: Aims to make publishing work across MRI and jRuby painless and add some nice
|
|
244
215
|
features like automatially publishing lifecycle events for ActiveRecord models.
|