isimud 0.5.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.ruby-version +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +6 -0
- data/certs/gfeil.pem +21 -0
- data/isimud.gemspec +14 -8
- data/lib/isimud/bunny_client.rb +26 -5
- data/lib/isimud/client.rb +4 -1
- data/lib/isimud/event.rb +10 -1
- data/lib/isimud/event_listener.rb +21 -19
- data/lib/isimud/event_observer.rb +5 -1
- data/lib/isimud/test_client.rb +11 -1
- data/lib/isimud/version.rb +1 -1
- data/release +31 -0
- data/spec/isimud/bunny_client_spec.rb +7 -1
- metadata +35 -8
- metadata.gz.sig +2 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d99ac21afc822c85ea759b7b8f491c509ff4ff4
|
4
|
+
data.tar.gz: 2497cc27810dcaa21493b5a34171c045e18c04c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb9fbfe6c72af9b21a40e01a706d4a1290fdeb076445ce1ce2fe87ade0e0dd8a7a3dacef53e8e94e616461484c633ba551c18ca6c41284b55e6cfbfb690b2264
|
7
|
+
data.tar.gz: 1f1a254579109ddc7428fafa0a2e2a3861d0cc8f494ec2d3f2950925506a3666d76c6be4350f187ea1d19879f814b4b19de6b901ba73ed9ee6bfa73a57798a14
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -77,6 +77,12 @@ if they do not exist.
|
|
77
77
|
|
78
78
|
## Changes
|
79
79
|
|
80
|
+
### 0.6.0
|
81
|
+
|
82
|
+
* Added Client#rebind to change the exchange and routing keys for a durable named queue.
|
83
|
+
* Changed BunnyClient#delete_queue to make it more reliable.
|
84
|
+
* EventListener now uses a shared, durable queue for monitoring events on modified EventObserver instances.
|
85
|
+
|
80
86
|
### 0.5.2
|
81
87
|
|
82
88
|
* Fixed regexp bug in TestClient affecting message delivery
|
data/certs/gfeil.pem
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRQwEgYDVQQDDAtnZW9y
|
3
|
+
Z2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZFgNj
|
4
|
+
b20wHhcNMTYwODA5MjEwNDU1WhcNMTcwODA5MjEwNDU1WjBBMRQwEgYDVQQDDAtn
|
5
|
+
ZW9yZ2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZ
|
6
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDFBKCoLQgCUv1
|
7
|
+
86ykJOCtnWhQ12Eymfnu5btV3DKMMLxjUDG18vy1Clhw04afp36Rc+oMvP1VxYeH
|
8
|
+
lRWdLtnWy2DAu2dxeFlWvacAegDcmQSw9vfyS7yD8zoLhJGeIflJ3eenTa+nRiQ2
|
9
|
+
DBPL1qRdfSrBNBXVlTYvs/PGE0SLJPtil8oRsifqk7ETPCUx5gRSxzzp0JykjrUd
|
10
|
+
cIu2u06Dv5GyDVwJu5/m4wLJSc2Bmore7rmOctBSNYtXTcMGVQOfskhncLNeE56V
|
11
|
+
R7byYxJ92HQt4svMjbK0hN+27asFpXaVU9ZeNQeEOOsgq8ecdypAWjwlOaH580K5
|
12
|
+
aH24zkstAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
13
|
+
BBSXpvM46ec2Ds6ErCpZkXFZtsEh7TAfBgNVHREEGDAWgRRnZW9yZ2UuZmVpbEBr
|
14
|
+
ZWFzLmNvbTAfBgNVHRIEGDAWgRRnZW9yZ2UuZmVpbEBrZWFzLmNvbTANBgkqhkiG
|
15
|
+
9w0BAQUFAAOCAQEAEXuMNAP35/nzBGj5aodPKIgH2Bvda9IF8OC4sDmQsRsUQzDw
|
16
|
+
wRi3rWoNzUU+QexdZqhLXSwGuPNgMgmPKaOu09LjpKKbem9VDicUEhNDL27CYMJZ
|
17
|
+
1oO1kEqjbZW60HZcfDNrw8Q6ARBRhKXpPJsbYrR2QRzx1P0oVkFtmc9Qu4gvFy3c
|
18
|
+
hIevyUPfcaBRWNfXCQnyFXZcHqcTywEgNyXTJZ6zUNZSHIQPzLOyzqa+muVO8Ob/
|
19
|
+
wSKk31gq6KY7rgi11mcLvVzwSuwZFqnonAmu/uin3cbXcOUkqNsyzZ0LQLXNKiwi
|
20
|
+
k0RgrsSNtQ8hcsVSQla0Ot+X3WpFI4ZuIfSLFA==
|
21
|
+
-----END CERTIFICATE-----
|
data/isimud.gemspec
CHANGED
@@ -4,14 +4,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'isimud/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
11
|
-
spec.summary
|
12
|
-
spec.description
|
13
|
-
|
14
|
-
|
7
|
+
spec.name = 'isimud'
|
8
|
+
spec.version = Isimud::VERSION
|
9
|
+
spec.authors = ['George Feil', 'Brian Jenkins']
|
10
|
+
spec.email = %w{george.feil@keas.com bonkydog@bonkydog.com}
|
11
|
+
spec.summary = %q{AMQP Messaging and Event Processing}
|
12
|
+
spec.description = <<-EOT
|
13
|
+
Isimud is an AMQP message publishing and consumption gem intended for Rails applications. You can use it to define
|
14
|
+
message consumption queues for ActiveRecord instances, or synchronize model updates between processes. It also provides
|
15
|
+
an event listener background process for managing queues that consume messages.
|
16
|
+
EOT
|
17
|
+
spec.homepage = 'https://github.com/KeasInc/isimud'
|
18
|
+
spec.license = 'MITNFA'
|
19
|
+
spec.cert_chain = ['certs/gfeil.pem']
|
20
|
+
spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
|
15
21
|
|
16
22
|
spec.files = `git ls-files -z`.split("\x0")
|
17
23
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
data/lib/isimud/bunny_client.rb
CHANGED
@@ -26,8 +26,8 @@ module Isimud
|
|
26
26
|
subscribe_options = options[:subscribe_options] || {}
|
27
27
|
log "Isimud: create_queue #{queue_name}: queue_options=#{queue_options.inspect} routing_keys=#{routing_keys.join(',')} subscribe_options=#{subscribe_options.inspect}"
|
28
28
|
current_channel = channel
|
29
|
-
queue =
|
30
|
-
|
29
|
+
queue = find_queue(queue_name, queue_options)
|
30
|
+
bind_routing_keys(queue, exchange_name, routing_keys)
|
31
31
|
queue.subscribe(subscribe_options) do |delivery_info, properties, payload|
|
32
32
|
begin
|
33
33
|
log "Isimud: queue #{queue_name} received #{delivery_info.delivery_tag} routing_key: #{delivery_info.routing_key}"
|
@@ -46,8 +46,18 @@ module Isimud
|
|
46
46
|
queue
|
47
47
|
end
|
48
48
|
|
49
|
+
# replace all bindings on a queue
|
50
|
+
def rebind(queue_name, exchange_name, routing_keys)
|
51
|
+
log "Isimud: rebinding queue #{queue_name} exchange #{exchange_name} routing_keys #{routing_keys.inspect}"
|
52
|
+
queue = find_queue(queue_name)
|
53
|
+
queue.unbind(exchange_name)
|
54
|
+
bind_routing_keys(queue, exchange_name, routing_keys)
|
55
|
+
rescue => e
|
56
|
+
log "Isimud: error rebinding #{queue_name} from #{exchange_name}: #{e.message}", :error
|
57
|
+
end
|
58
|
+
|
49
59
|
def delete_queue(queue_name)
|
50
|
-
channel.
|
60
|
+
channel.queue_delete(queue_name)
|
51
61
|
end
|
52
62
|
|
53
63
|
def connection
|
@@ -83,13 +93,24 @@ module Isimud
|
|
83
93
|
@connection = nil
|
84
94
|
end
|
85
95
|
|
86
|
-
def publish(exchange, routing_key, payload)
|
87
|
-
channel.topic(exchange, durable: true).publish(payload, routing_key: routing_key, persistent: true)
|
96
|
+
def publish(exchange, routing_key, payload, options = {})
|
97
|
+
channel.topic(exchange, durable: true).publish(payload, options.merge(routing_key: routing_key, persistent: true))
|
88
98
|
end
|
89
99
|
|
90
100
|
def reconnect
|
91
101
|
close
|
92
102
|
connect
|
93
103
|
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
def find_queue(queue_name, options = {durable: true})
|
108
|
+
channel.queue(queue_name, options)
|
109
|
+
end
|
110
|
+
|
111
|
+
def bind_routing_keys(queue, exchange_name, routing_keys)
|
112
|
+
routing_keys.each { |key| queue.bind(exchange_name, routing_key: key, nowait: false) }
|
113
|
+
end
|
114
|
+
|
94
115
|
end
|
95
116
|
end
|
data/lib/isimud/client.rb
CHANGED
@@ -33,12 +33,15 @@ module Isimud
|
|
33
33
|
@exception_handler = block
|
34
34
|
end
|
35
35
|
|
36
|
-
def publish(exchange, routing_key, payload)
|
36
|
+
def publish(exchange, routing_key, payload, options = {})
|
37
37
|
end
|
38
38
|
|
39
39
|
def reconnect
|
40
40
|
end
|
41
41
|
|
42
|
+
def rebind(queue_name, exchange_name, *keys)
|
43
|
+
end
|
44
|
+
|
42
45
|
def reset
|
43
46
|
end
|
44
47
|
end
|
data/lib/isimud/event.rb
CHANGED
@@ -4,6 +4,7 @@ module Isimud
|
|
4
4
|
class Event
|
5
5
|
include Isimud::Logging
|
6
6
|
attr_accessor :type, :action, :user_id, :occurred_at, :eventful_type, :eventful_id, :attributes, :parameters
|
7
|
+
attr_reader :timestamp
|
7
8
|
attr_writer :exchange
|
8
9
|
|
9
10
|
DEFAULT_TYPE = :model
|
@@ -37,6 +38,7 @@ module Isimud
|
|
37
38
|
else
|
38
39
|
Time.now.utc
|
39
40
|
end
|
41
|
+
@timestamp = Time.now
|
40
42
|
|
41
43
|
eventful_object = options.delete(:eventful)
|
42
44
|
|
@@ -67,6 +69,13 @@ module Isimud
|
|
67
69
|
[type.to_s, eventful_type, eventful_id, action].compact.join('.')
|
68
70
|
end
|
69
71
|
|
72
|
+
# Message ID, which is generated from the exchange, routing_key, user_id, and timestamp. This is practically
|
73
|
+
# guaranteed to be unique across all publishers.
|
74
|
+
def message_id
|
75
|
+
[exchange, routing_key, user_id, timestamp.to_i, timestamp.nsec].join(':')
|
76
|
+
end
|
77
|
+
|
78
|
+
|
70
79
|
# Return hash of data to be serialized to JSON
|
71
80
|
# @option options [Boolean] :omit_parameters when set, do not include attributes or parameters in data
|
72
81
|
# @return [Hash] data to serialize
|
@@ -106,7 +115,7 @@ module Isimud
|
|
106
115
|
def publish
|
107
116
|
data = self.serialize
|
108
117
|
log "Event#publish: #{self.inspect}"
|
109
|
-
Isimud.client.publish(exchange, routing_key, data)
|
118
|
+
Isimud.client.publish(exchange, routing_key, data, message_id: message_id)
|
110
119
|
end
|
111
120
|
end
|
112
121
|
end
|
@@ -140,13 +140,16 @@ module Isimud
|
|
140
140
|
|
141
141
|
def handle_observer_event(payload)
|
142
142
|
event = JSON.parse(payload).with_indifferent_access
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
143
|
+
action = event[:action]
|
144
|
+
log "EventListener: received observer model message: #{event.inspect}"
|
145
|
+
observer = event[:type].constantize.find(event[:id]) unless action == 'destroy'
|
146
|
+
case
|
147
|
+
when action == 'create'
|
148
|
+
register_observer(observer) if observer.enable_listener?
|
149
|
+
when action == 'update' && observer.enable_listener?
|
150
|
+
rebind_observer(observer)
|
151
|
+
else
|
152
|
+
unregister_observer(event[:type], event[:id])
|
150
153
|
end
|
151
154
|
end
|
152
155
|
|
@@ -159,26 +162,25 @@ module Isimud
|
|
159
162
|
end
|
160
163
|
end
|
161
164
|
|
165
|
+
# Update the bindings for an observer.
|
166
|
+
def rebind_observer(observer)
|
167
|
+
log "EventListener: rebinding observer #{observer.class} #{observer.id}"
|
168
|
+
client.rebind(observer.event_queue_name, events_exchange, observer.routing_keys)
|
169
|
+
end
|
170
|
+
|
162
171
|
# Delete a queue for an observer. This also purges all messages associated with it
|
163
172
|
def unregister_observer(observer_class, observer_id)
|
164
173
|
@observer_mutex.synchronize do
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
client.delete_queue(queue_name)
|
170
|
-
rescue => e
|
171
|
-
log "EventListener: error unregistering #{observer_class} #{observer_id}: #{e.message}", :warn
|
172
|
-
end
|
173
|
-
end
|
174
|
+
log "EventListener: un-registering observer #{observer_class} #{observer_id}"
|
175
|
+
queue_name = observer_class.constantize.event_queue_name(observer_id)
|
176
|
+
client.delete_queue(queue_name)
|
177
|
+
@observers.delete(observer_key_for(observer_class, observer_id))
|
174
178
|
end
|
175
179
|
end
|
176
180
|
|
177
181
|
# Create or return the observer queue which listens for ModelWatcher events
|
178
182
|
def observer_queue
|
179
|
-
@observer_queue ||= client.create_queue("#{name}.listener
|
180
|
-
queue_options: {exclusive: true},
|
181
|
-
subscribe_options: {manual_ack: true}, &method(:handle_observer_event))
|
183
|
+
@observer_queue ||= client.create_queue("#{name}.listener", models_exchange, &method(:handle_observer_event))
|
182
184
|
end
|
183
185
|
|
184
186
|
# Register the observer class watcher
|
@@ -41,12 +41,16 @@ module Isimud
|
|
41
41
|
# Create or attach to a queue on the specified exchange. When an event message that matches the observer's routing keys
|
42
42
|
# is received, parse the event and call handle_event on same.
|
43
43
|
def observe_events(client, default_exchange)
|
44
|
-
client.bind(
|
44
|
+
client.bind(event_queue_name, observed_exchange || default_exchange, *routing_keys) do |message|
|
45
45
|
event = Event.parse(message)
|
46
46
|
handle_event(event)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def event_queue_name
|
51
|
+
self.class.event_queue_name(id)
|
52
|
+
end
|
53
|
+
|
50
54
|
module ClassMethods
|
51
55
|
# Method used to retrieve active observers. Override in your EventObserver class
|
52
56
|
def find_active_observers
|
data/lib/isimud/test_client.rb
CHANGED
@@ -18,6 +18,10 @@ module Isimud
|
|
18
18
|
@routing_keys << Regexp.new(key.gsub(/\./, "\\.").gsub(/\*/, ".*"))
|
19
19
|
end
|
20
20
|
|
21
|
+
def unbind(exchange)
|
22
|
+
@routing_keys.clear
|
23
|
+
end
|
24
|
+
|
21
25
|
def has_matching_key?(route)
|
22
26
|
@routing_keys.any? { |k| route =~ k }
|
23
27
|
end
|
@@ -59,6 +63,12 @@ module Isimud
|
|
59
63
|
create_queue(queue_name, exchange_name, routing_keys: keys, &method)
|
60
64
|
end
|
61
65
|
|
66
|
+
def rebind(queue_name, exchange_name, keys)
|
67
|
+
queue = queues[queue_name] || return
|
68
|
+
queue.unbind(exchange_name)
|
69
|
+
keys.each { |key| queue.bind(exchange_name, routing_key: key) }
|
70
|
+
end
|
71
|
+
|
62
72
|
def create_queue(queue_name, exchange_name, options = {}, &method)
|
63
73
|
keys = options[:routing_keys] || []
|
64
74
|
log "Isimud::TestClient: Binding queue #{queue_name} for keys #{keys.inspect}"
|
@@ -69,7 +79,7 @@ module Isimud
|
|
69
79
|
queue
|
70
80
|
end
|
71
81
|
|
72
|
-
def publish(exchange, routing_key, payload)
|
82
|
+
def publish(exchange, routing_key, payload, _options = {})
|
73
83
|
log "Isimud::TestClient: Delivering message key: #{routing_key} payload: #{payload}"
|
74
84
|
call_queues = queues.values.select { |queue| queue.has_matching_key?(routing_key) }
|
75
85
|
call_queues.each do |queue|
|
data/lib/isimud/version.rb
CHANGED
data/release
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'colored'
|
4
|
+
require 'digest/sha2'
|
5
|
+
require File.expand_path('lib/isimud/version.rb')
|
6
|
+
|
7
|
+
def run!(command)
|
8
|
+
puts "running #{command}".yellow
|
9
|
+
system(command) || abort("Command #{command} failed, terminating!")
|
10
|
+
end
|
11
|
+
|
12
|
+
gem_name = 'isimud'
|
13
|
+
gem_version = "#{gem_name}-#{Isimud::VERSION}.gem"
|
14
|
+
built_gem_path = "pkg/#{gem_version}"
|
15
|
+
puts "Building #{gem_name} version #{Isimud::VERSION}".cyan
|
16
|
+
run! "gem build #{gem_name}.gemspec"
|
17
|
+
run! "mv #{gem_version} #{built_gem_path}"
|
18
|
+
|
19
|
+
puts 'Adding and committing checksum'.cyan
|
20
|
+
checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
|
21
|
+
checksum_path = "checksum/#{gem_name}-#{Isimud::VERSION}.gem.sha512"
|
22
|
+
File.open(checksum_path, 'w') { |f| f.write(checksum) }
|
23
|
+
run! "git add #{checksum_path}"
|
24
|
+
run! "git commit -m 'added checksum for #{gem_version}' && git push origin"
|
25
|
+
|
26
|
+
puts 'Publishing to RubyGems'.cyan
|
27
|
+
run! "gem push #{built_gem_path}"
|
28
|
+
|
29
|
+
puts 'Testing install'.cyan
|
30
|
+
run! "gem install #{gem_name} -v #{Isimud::VERSION} -P MediumSecurity"
|
31
|
+
Contact GitHub API Training Shop Blog About
|
@@ -19,9 +19,14 @@ describe Isimud::BunnyClient do
|
|
19
19
|
let(:channel) { client.channel }
|
20
20
|
let(:proc) { Proc.new { puts('hello') } }
|
21
21
|
let(:keys) { %w(foo.bar baz.*) }
|
22
|
+
let(:queue_name) { 'my_queue' }
|
22
23
|
before do
|
23
24
|
Isimud.logger = Logger.new(STDOUT)
|
24
25
|
end
|
26
|
+
after do
|
27
|
+
client.delete_queue(queue_name)
|
28
|
+
end
|
29
|
+
|
25
30
|
|
26
31
|
it 'creates a new queue' do
|
27
32
|
queue = client.bind('my_queue', @exchange_name, keys, &proc)
|
@@ -39,11 +44,12 @@ describe Isimud::BunnyClient do
|
|
39
44
|
|
40
45
|
it 'calls block when a message is received' do
|
41
46
|
@block_called = Array.new
|
42
|
-
queue_name = '
|
47
|
+
queue_name = 'test_queue'
|
43
48
|
client.bind("#{queue_name}", @exchange_name, 'my.test.key') do |payload|
|
44
49
|
@block_called << payload
|
45
50
|
end
|
46
51
|
client.publish(@exchange_name, 'my.test.key', "Hi there")
|
52
|
+
sleep(1)
|
47
53
|
expect(@block_called).to eq ['Hi there']
|
48
54
|
end
|
49
55
|
end
|
metadata
CHANGED
@@ -1,15 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isimud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- George Feil
|
8
8
|
- Brian Jenkins
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
|
11
|
+
cert_chain:
|
12
|
+
- |
|
13
|
+
-----BEGIN CERTIFICATE-----
|
14
|
+
MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRQwEgYDVQQDDAtnZW9y
|
15
|
+
Z2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZFgNj
|
16
|
+
b20wHhcNMTYwODA5MjEwNDU1WhcNMTcwODA5MjEwNDU1WjBBMRQwEgYDVQQDDAtn
|
17
|
+
ZW9yZ2UuZmVpbDEUMBIGCgmSJomT8ixkARkWBGtlYXMxEzARBgoJkiaJk/IsZAEZ
|
18
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDFBKCoLQgCUv1
|
19
|
+
86ykJOCtnWhQ12Eymfnu5btV3DKMMLxjUDG18vy1Clhw04afp36Rc+oMvP1VxYeH
|
20
|
+
lRWdLtnWy2DAu2dxeFlWvacAegDcmQSw9vfyS7yD8zoLhJGeIflJ3eenTa+nRiQ2
|
21
|
+
DBPL1qRdfSrBNBXVlTYvs/PGE0SLJPtil8oRsifqk7ETPCUx5gRSxzzp0JykjrUd
|
22
|
+
cIu2u06Dv5GyDVwJu5/m4wLJSc2Bmore7rmOctBSNYtXTcMGVQOfskhncLNeE56V
|
23
|
+
R7byYxJ92HQt4svMjbK0hN+27asFpXaVU9ZeNQeEOOsgq8ecdypAWjwlOaH580K5
|
24
|
+
aH24zkstAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
25
|
+
BBSXpvM46ec2Ds6ErCpZkXFZtsEh7TAfBgNVHREEGDAWgRRnZW9yZ2UuZmVpbEBr
|
26
|
+
ZWFzLmNvbTAfBgNVHRIEGDAWgRRnZW9yZ2UuZmVpbEBrZWFzLmNvbTANBgkqhkiG
|
27
|
+
9w0BAQUFAAOCAQEAEXuMNAP35/nzBGj5aodPKIgH2Bvda9IF8OC4sDmQsRsUQzDw
|
28
|
+
wRi3rWoNzUU+QexdZqhLXSwGuPNgMgmPKaOu09LjpKKbem9VDicUEhNDL27CYMJZ
|
29
|
+
1oO1kEqjbZW60HZcfDNrw8Q6ARBRhKXpPJsbYrR2QRzx1P0oVkFtmc9Qu4gvFy3c
|
30
|
+
hIevyUPfcaBRWNfXCQnyFXZcHqcTywEgNyXTJZ6zUNZSHIQPzLOyzqa+muVO8Ob/
|
31
|
+
wSKk31gq6KY7rgi11mcLvVzwSuwZFqnonAmu/uin3cbXcOUkqNsyzZ0LQLXNKiwi
|
32
|
+
k0RgrsSNtQ8hcsVSQla0Ot+X3WpFI4ZuIfSLFA==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2016-09-19 00:00:00.000000000 Z
|
13
35
|
dependencies:
|
14
36
|
- !ruby/object:Gem::Dependency
|
15
37
|
name: activerecord
|
@@ -67,7 +89,10 @@ dependencies:
|
|
67
89
|
- - ">="
|
68
90
|
- !ruby/object:Gem::Version
|
69
91
|
version: 0.10.6
|
70
|
-
description:
|
92
|
+
description: |
|
93
|
+
Isimud is an AMQP message publishing and consumption gem intended for Rails applications. You can use it to define
|
94
|
+
message consumption queues for ActiveRecord instances, or synchronize model updates between processes. It also provides
|
95
|
+
an event listener background process for managing queues that consume messages.
|
71
96
|
email:
|
72
97
|
- george.feil@keas.com
|
73
98
|
- bonkydog@bonkydog.com
|
@@ -86,6 +111,7 @@ files:
|
|
86
111
|
- Gemfile.lock
|
87
112
|
- README.md
|
88
113
|
- Rakefile
|
114
|
+
- certs/gfeil.pem
|
89
115
|
- config.ru
|
90
116
|
- config/tddium.yml
|
91
117
|
- doc/Isimud.html
|
@@ -135,6 +161,7 @@ files:
|
|
135
161
|
- lib/rails/generators/isimud/initializer_generator.rb
|
136
162
|
- lib/rails/generators/isimud/templates/initializer.rb
|
137
163
|
- lib/rails/generators/isimud/templates/isimud.yml
|
164
|
+
- release
|
138
165
|
- spec/internal/app/models/admin.rb
|
139
166
|
- spec/internal/app/models/company.rb
|
140
167
|
- spec/internal/app/models/user.rb
|
@@ -151,9 +178,9 @@ files:
|
|
151
178
|
- spec/isimud/test_client_spec.rb
|
152
179
|
- spec/isimud_spec.rb
|
153
180
|
- spec/spec_helper.rb
|
154
|
-
homepage:
|
181
|
+
homepage: https://github.com/KeasInc/isimud
|
155
182
|
licenses:
|
156
|
-
-
|
183
|
+
- MITNFA
|
157
184
|
metadata: {}
|
158
185
|
post_install_message:
|
159
186
|
rdoc_options: []
|
@@ -171,10 +198,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
198
|
version: '0'
|
172
199
|
requirements: []
|
173
200
|
rubyforge_project:
|
174
|
-
rubygems_version: 2.
|
201
|
+
rubygems_version: 2.5.1
|
175
202
|
signing_key:
|
176
203
|
specification_version: 4
|
177
|
-
summary: AMQP Messaging
|
204
|
+
summary: AMQP Messaging and Event Processing
|
178
205
|
test_files:
|
179
206
|
- spec/internal/app/models/admin.rb
|
180
207
|
- spec/internal/app/models/company.rb
|
metadata.gz.sig
ADDED