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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83a83137b7deb41a7c90543b1bc5e357f80f8b3d
4
- data.tar.gz: afa7acb7b71b8cd159a7a9cfd95ed461613566ff
3
+ metadata.gz: 4d99ac21afc822c85ea759b7b8f491c509ff4ff4
4
+ data.tar.gz: 2497cc27810dcaa21493b5a34171c045e18c04c3
5
5
  SHA512:
6
- metadata.gz: 205e376894ca96ada6eb0859d24a619e98630e5d757cb30df84ff3674f8a378226778d16c1447956954c9d784f7ae5166782970ee6dff6e1dfcd8f6044426f22
7
- data.tar.gz: 813394bb8976e04c1609a317d04c5e4054b868e6d85a83d53b5b67d6588dee2f4dc9b10c865c30b864e3f98ab12e17f4e9f828e287bdaa0586f186e3dbcf9ecf
6
+ metadata.gz: cb9fbfe6c72af9b21a40e01a706d4a1290fdeb076445ce1ce2fe87ade0e0dd8a7a3dacef53e8e94e616461484c633ba551c18ca6c41284b55e6cfbfb690b2264
7
+ data.tar.gz: 1f1a254579109ddc7428fafa0a2e2a3861d0cc8f494ec2d3f2950925506a3666d76c6be4350f187ea1d19879f814b4b19de6b901ba73ed9ee6bfa73a57798a14
Binary file
Binary file
@@ -1 +1 @@
1
- 2.2.3
1
+ 2.3.0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- isimud (0.5.2)
4
+ isimud (0.6.0)
5
5
  activerecord (>= 3.2.17)
6
6
  activesupport (>= 3.2.17)
7
7
  bunny (>= 1.6.0)
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
@@ -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-----
@@ -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 = '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 for Events and ActiveRecord changes}
12
- spec.description = %q{}
13
- spec.homepage = ''
14
- spec.license = "Copyright (C) 2014 Keas -- All rights reserved"
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) }
@@ -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 = current_channel.queue(queue_name, queue_options)
30
- routing_keys.each { |key| queue.bind(exchange_name, routing_key: key, nowait: false) }
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.queue(queue_name).delete
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
@@ -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
@@ -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
- log "EventListener: received observer model message: #{payload.inspect}"
144
- if %w(update destroy).include?(event[:action])
145
- unregister_observer(event[:type], event[:id])
146
- end
147
- unless event[:action] == 'destroy'
148
- observer = event[:type].constantize.find(event[:id])
149
- register_observer(observer) if observer.enable_listener?
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
- if (observer = @observers.delete(observer_key_for(observer_class, observer_id)))
166
- begin
167
- log "EventListener: unregistering #{observer.class} #{observer.id}"
168
- queue_name = observer_class.constantize.event_queue_name(observer_id)
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.#{Process.pid}", models_exchange,
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(self.class.event_queue_name(id), observed_exchange || default_exchange, *routing_keys) do |message|
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
@@ -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|
@@ -1,3 +1,3 @@
1
1
  module Isimud
2
- VERSION = '0.5.2'
2
+ VERSION = '0.7.0'
3
3
  end
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 = 'test queue'
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.5.2
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
- date: 2016-08-09 00:00:00.000000000 Z
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
- - Copyright (C) 2014 Keas -- All rights reserved
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.4.5.1
201
+ rubygems_version: 2.5.1
175
202
  signing_key:
176
203
  specification_version: 4
177
- summary: AMQP Messaging for Events and ActiveRecord changes
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
@@ -0,0 +1,2 @@
1
+ �ޖb��=�ҖN?1��Ԉ]�~����e_{�/;��ަg9�L�L�)��!�>=z�@�O��ōV��{�^�|#LOg<��in̻��pI~�9�e;��L�mVDWh�"��Ľ�;
2
+ B�(M�P�q�8i������ɲ�4���='(B���Y�E{Ez�xː de+*U֐!��D�i��Uu?��o�C�sX�1�UĂkW��x��f������E?gH�������i�h���wb�@