isimud 0.5.2 → 0.7.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 +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