isimud 0.5.2

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.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/.yardoc/checksums +15 -0
  6. data/.yardoc/object_types +0 -0
  7. data/.yardoc/objects/root.dat +0 -0
  8. data/.yardoc/proxy_types +0 -0
  9. data/Gemfile +23 -0
  10. data/Gemfile.lock +123 -0
  11. data/README.md +218 -0
  12. data/Rakefile +2 -0
  13. data/config.ru +7 -0
  14. data/config/tddium.yml +11 -0
  15. data/doc/Isimud.html +1696 -0
  16. data/doc/Isimud/BunnyClient.html +1004 -0
  17. data/doc/Isimud/Client.html +812 -0
  18. data/doc/Isimud/Event.html +1500 -0
  19. data/doc/Isimud/EventListener.html +1217 -0
  20. data/doc/Isimud/EventObserver.html +367 -0
  21. data/doc/Isimud/EventObserver/ClassMethods.html +292 -0
  22. data/doc/Isimud/Generators.html +117 -0
  23. data/doc/Isimud/Generators/ConfigGenerator.html +192 -0
  24. data/doc/Isimud/Generators/InitializerGenerator.html +192 -0
  25. data/doc/Isimud/Logging.html +230 -0
  26. data/doc/Isimud/ModelWatcher.html +312 -0
  27. data/doc/Isimud/ModelWatcher/ClassMethods.html +511 -0
  28. data/doc/Isimud/Railtie.html +123 -0
  29. data/doc/Isimud/TestClient.html +1003 -0
  30. data/doc/Isimud/TestClient/Queue.html +556 -0
  31. data/doc/_index.html +290 -0
  32. data/doc/class_list.html +58 -0
  33. data/doc/css/common.css +1 -0
  34. data/doc/css/full_list.css +57 -0
  35. data/doc/css/style.css +339 -0
  36. data/doc/file.README.html +338 -0
  37. data/doc/file_list.html +60 -0
  38. data/doc/frames.html +26 -0
  39. data/doc/index.html +338 -0
  40. data/doc/js/app.js +219 -0
  41. data/doc/js/full_list.js +181 -0
  42. data/doc/js/jquery.js +4 -0
  43. data/doc/method_list.html +711 -0
  44. data/doc/top-level-namespace.html +112 -0
  45. data/isimud.gemspec +25 -0
  46. data/lib/isimud.rb +91 -0
  47. data/lib/isimud/bunny_client.rb +95 -0
  48. data/lib/isimud/client.rb +48 -0
  49. data/lib/isimud/event.rb +112 -0
  50. data/lib/isimud/event_listener.rb +200 -0
  51. data/lib/isimud/event_observer.rb +81 -0
  52. data/lib/isimud/logging.rb +11 -0
  53. data/lib/isimud/model_watcher.rb +144 -0
  54. data/lib/isimud/railtie.rb +9 -0
  55. data/lib/isimud/tasks.rb +20 -0
  56. data/lib/isimud/test_client.rb +89 -0
  57. data/lib/isimud/version.rb +3 -0
  58. data/lib/rails/generators/isimud/config_generator.rb +12 -0
  59. data/lib/rails/generators/isimud/initializer_generator.rb +12 -0
  60. data/lib/rails/generators/isimud/templates/initializer.rb +17 -0
  61. data/lib/rails/generators/isimud/templates/isimud.yml +20 -0
  62. data/spec/internal/app/models/admin.rb +2 -0
  63. data/spec/internal/app/models/company.rb +34 -0
  64. data/spec/internal/app/models/user.rb +27 -0
  65. data/spec/internal/config/database.yml +3 -0
  66. data/spec/internal/config/routes.rb +3 -0
  67. data/spec/internal/db/schema.rb +22 -0
  68. data/spec/internal/log/.gitignore +1 -0
  69. data/spec/internal/public/favicon.ico +0 -0
  70. data/spec/isimud/bunny_client_spec.rb +125 -0
  71. data/spec/isimud/event_listener_spec.rb +86 -0
  72. data/spec/isimud/event_observer_spec.rb +32 -0
  73. data/spec/isimud/event_spec.rb +74 -0
  74. data/spec/isimud/model_watcher_spec.rb +189 -0
  75. data/spec/isimud/test_client_spec.rb +28 -0
  76. data/spec/isimud_spec.rb +49 -0
  77. data/spec/spec_helper.rb +55 -0
  78. metadata +195 -0
@@ -0,0 +1,32 @@
1
+ describe Isimud::EventObserver do
2
+ let(:client) { Isimud.client }
3
+ let(:exchange_name) { 'events' }
4
+ let(:user) { User.create!(first_name: 'Geo',
5
+ last_name: 'Feil',
6
+ encrypted_password: "itsasecret",
7
+ email: 'george.feil@keas.com') }
8
+ let!(:eventful) { Company.create!(name: 'Keas', description: 'Health Engagement Platform', url: 'http://keas.com') }
9
+ let(:time) { 1.hour.ago }
10
+ let(:params) { {'a' => 'foo', 'b' => 123} }
11
+ let!(:evented) { User.create(routing_keys: ['model.Company.*.create', 'model.Event.*.report']) }
12
+ let(:event) { Isimud::Event.new(user, eventful, action: :create, occurred_at: time, parameters: params) }
13
+
14
+
15
+ it 'registers class in observed_models' do
16
+ expect(Isimud::EventObserver.observed_models).to include(User)
17
+ end
18
+
19
+ describe '#observe_events' do
20
+ before(:each) do
21
+ evented.observe_events(client, exchange_name)
22
+ end
23
+
24
+ it 'binds routing keys to the named queue in the exchange' do
25
+ queue = client.queues["combustion.user.#{evented.id}"]
26
+ expect(queue).to have_matching_key("model.Company.123.create")
27
+ end
28
+
29
+ it 'parses messages and dispatches to the handle_event method'
30
+ end
31
+
32
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe Isimud::Event do
4
+ let(:user) { User.create!(first_name: 'Geo',
5
+ last_name: 'Feil',
6
+ encrypted_password: "itsasecret",
7
+ email: 'george.feil@keas.com') }
8
+ let(:eventful) { Company.create!(name: 'Keas', description: 'Health Engagement Platform', url: 'http://keas.com') }
9
+ let(:time) { 1.hour.ago }
10
+ let(:params) { {'a' => 'foo', 'b' => 123} }
11
+
12
+ describe 'initialization' do
13
+ it 'initializes with a User, Eventful, and parameters' do
14
+ event = Isimud::Event.new(user, eventful, action: :create, occurred_at: time, parameters: params)
15
+ expect(event.user_id).to eq(user.id)
16
+ expect(event.type).to eq(:model)
17
+ expect(event.occurred_at).to eq(time)
18
+ expect(event.eventful_type).to eq(eventful.class.name)
19
+ expect(event.eventful_id).to eq(eventful.id)
20
+ expect(event.action).to eq(:create)
21
+ expect(event.parameters).to eq(params)
22
+ end
23
+
24
+ it 'initializes with an attributes Hash' do
25
+ event = Isimud::Event.new(user_id: user.id, eventful: eventful, action: :create, occurred_at: time,
26
+ parameters: params)
27
+ expect(event.user_id).to eq(user.id)
28
+ expect(event.type).to eq(:model)
29
+ expect(event.occurred_at).to eq(time)
30
+ expect(event.eventful_type).to eq(eventful.class.name)
31
+ expect(event.eventful_id).to eq(eventful.id)
32
+ expect(event.action).to eq(:create)
33
+ expect(event.parameters).to eq(params)
34
+ end
35
+
36
+ it 'sets parameters to remaining options' do
37
+ event = Isimud::Event.new(user_id: user.id, eventful: eventful, action: :create, occurred_at: time,
38
+ a: 'foo', b: 123)
39
+ expect(event.parameters).to eq({'a' => 'foo', 'b' => 123})
40
+ end
41
+
42
+ it 'parses time strings' do
43
+ now = Time.now
44
+ time = now.to_s
45
+ event = Isimud::Event.new(occurred_at: time)
46
+ expect(event.occurred_at.to_i).to eq(now.to_i)
47
+ end
48
+
49
+ it 'sets occurred_at to now by default' do
50
+ Timecop.freeze do
51
+ event = Isimud::Event.new
52
+ expect(event.occurred_at).to eq(Time.now)
53
+ end
54
+ end
55
+
56
+ it 'sets type to model by default' do
57
+ event = Isimud::Event.new
58
+ expect(event.type).to eq(:model)
59
+ end
60
+ end
61
+
62
+ describe '#routing_key' do
63
+ it 'composes a key from the eventful and action' do
64
+ event = Isimud::Event.new(eventful: eventful, action: 'create')
65
+ expect(event.routing_key).to eq("model.Company.#{eventful.id}.create")
66
+ end
67
+
68
+ it 'handles null' do
69
+ event = Isimud::Event.new(eventful_type: 'Mission', action: 'intake')
70
+ expect(event.routing_key).to eq('model.Mission.intake')
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,189 @@
1
+ require 'spec_helper'
2
+
3
+ describe Isimud::ModelWatcher do
4
+ let(:client) { Isimud.client }
5
+
6
+ describe '.watch_attributes' do
7
+ context 'default' do
8
+ it 'returns the data attributes, minus the id and timestamps' do
9
+ expect(Company.isimud_watch_attributes).to be_nil
10
+ end
11
+ end
12
+
13
+ context 'when assigned' do
14
+ it 'assigns the watch attributes appropriately' do
15
+ # User: watch_attributes :key, :login_count
16
+ expect(User.isimud_watch_attributes).to eq(%w(key login_count))
17
+ end
18
+ end
19
+
20
+ context 'for a subclass' do
21
+ it 'uses the watch attributes for the superclass' do
22
+ expect(Admin.isimud_watch_attributes).to eq(%w(key login_count))
23
+ end
24
+ end
25
+ end
26
+
27
+ describe 'when creating an instance' do
28
+ context 'with explicit watched attributes' do
29
+ it 'sends a create message' do
30
+ Timecop.freeze do
31
+ user = User.new(first_name: 'Geo',
32
+ last_name: 'Feil',
33
+ encrypted_password: "itsasecret",
34
+ email: 'george.feil@keas.com')
35
+
36
+
37
+ messages = Array.new
38
+ exchange = Isimud::ModelWatcher::DEFAULT_EXCHANGE
39
+ routing_key = 'test_schema.User.create'
40
+
41
+ Isimud.client.bind('model_watcher_spec_create', exchange, routing_key) do |payload|
42
+ messages << payload
43
+ end
44
+ user.save!
45
+ expect(messages).to include(expected_user_payload(user, :create))
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'with default attributes' do
51
+ it 'sends a create message with default attributes' do
52
+ messages = Array.new
53
+ exchange = Isimud::ModelWatcher::DEFAULT_EXCHANGE
54
+ routing_key = 'test_schema.Company.create'
55
+
56
+ Isimud.client.bind('model_watcher_spec_create_company', exchange, routing_key) do |payload|
57
+ messages << payload
58
+ end
59
+ company = Company.new(name: 'Google', url: 'http://google.com')
60
+ company.save!
61
+ message = JSON.parse(messages.first)
62
+ expect(message['attributes'].keys).to eql(%w(name description url user_count active created_at updated_at))
63
+ end
64
+
65
+ end
66
+ end
67
+
68
+ describe '#isimud_synchronize?' do
69
+ it "doesn't send a message when false" do
70
+ user = User.new(first_name: 'Geo',
71
+ last_name: 'Feil',
72
+ encrypted_password: "itsasecret",
73
+ email: 'george.feil@keas.com')
74
+ user.stub(:isimud_synchronize?).and_return(false)
75
+ messages = Array.new
76
+ Isimud.client.bind('model_watcher_spec_create', Isimud::ModelWatcher::DEFAULT_EXCHANGE, '*') do |payload|
77
+ messages << payload
78
+ end
79
+ user.save!
80
+ expect(messages).to be_empty
81
+ end
82
+ end
83
+
84
+ describe 'when disabled' do
85
+ before do
86
+ Isimud.enable_model_watcher = false
87
+ end
88
+ after do
89
+ Isimud.enable_model_watcher = nil
90
+ end
91
+
92
+ it 'does not send a message' do
93
+ messages = Array.new
94
+ Isimud.client.bind('model_watcher_spec_create', Isimud::ModelWatcher::DEFAULT_EXCHANGE, '*') do |payload|
95
+ messages << payload
96
+ end
97
+ User.create!(first_name: 'Geo',
98
+ last_name: 'Feil',
99
+ encrypted_password: "itsasecret",
100
+ email: 'george.feil@keas.com')
101
+ expect(messages).to be_empty
102
+ end
103
+
104
+ end
105
+
106
+ describe 'when updating an instance' do
107
+ before(:all) do
108
+ @messages = Array.new
109
+ Isimud.client.bind('model_watcher_spec_update',
110
+ Isimud::ModelWatcher::DEFAULT_EXCHANGE,
111
+ 'test_schema.User.update') do |payload|
112
+ @messages << payload
113
+ end
114
+ end
115
+ before(:each) do
116
+ @messages.clear
117
+ end
118
+
119
+ let!(:user) { User.create!(first_name: 'Geo',
120
+ last_name: 'Feil',
121
+ encrypted_password: "itsasecret",
122
+ email: 'george.feil@keas.com') }
123
+
124
+
125
+ context 'with a watched attribute updated' do
126
+ it 'sends a message with the update' do
127
+ Timecop.freeze do
128
+ user.login_count = 1
129
+ user.save!
130
+ expect(@messages).to include(expected_user_payload(user, :update))
131
+ end
132
+ end
133
+
134
+ context 'with no watched attributes updated' do
135
+ it 'sends no messages' do
136
+ user.first_name = 'Hal'
137
+ user.save!
138
+ expect(@messages).to be_empty
139
+ end
140
+ end
141
+
142
+ end
143
+ end
144
+
145
+ describe 'when destroying an instance' do
146
+ before(:all) do
147
+ @messages = Array.new
148
+ Isimud.client.bind('model_watcher_spec_destroy',
149
+ Isimud::ModelWatcher::DEFAULT_EXCHANGE,
150
+ 'test_schema.User.destroy') do |payload|
151
+ @messages << payload
152
+ end
153
+ end
154
+ before(:each) do
155
+ @messages.clear
156
+ end
157
+
158
+ let!(:user) { User.create!(first_name: 'Geo',
159
+ last_name: 'Feil',
160
+ encrypted_password: "itsasecret",
161
+ email: 'george.feil@keas.com') }
162
+ it 'sends a destroy message' do
163
+ Timecop.freeze do
164
+ user.destroy
165
+ expected_message = {schema: 'test_schema',
166
+ type: 'User',
167
+ action: :destroy,
168
+ id: user.id,
169
+ timestamp: Time.now.utc}.to_json
170
+ expect(@messages).to include(expected_message)
171
+ end
172
+ end
173
+ end
174
+
175
+ private
176
+
177
+ def expected_user_payload(user, action)
178
+ {
179
+ :schema => "test_schema",
180
+ :type => "User",
181
+ :action => action,
182
+ :id => user.id,
183
+ :timestamp => Time.now.utc,
184
+ :attributes => {:key => user.key, :login_count => user.login_count}
185
+ }.to_json
186
+ end
187
+
188
+ end
189
+
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Isimud::TestClient do
4
+ let(:client) { Isimud::TestClient.new(url) }
5
+ let!(:connection) { client.connect }
6
+
7
+ after(:each) do
8
+ client.close
9
+ end
10
+
11
+ describe '#initialize' do
12
+ it 'sets up new queues'
13
+ end
14
+
15
+ describe '#bind' do
16
+ let(:proc) { Proc.new { puts('hello') } }
17
+ let(:keys) { %w(foo.bar baz.*) }
18
+
19
+ it 'creates a new queue'
20
+
21
+ it 'binds specified routing keys and calls the specified method'
22
+ end
23
+
24
+ describe '#publish' do
25
+ it 'pushes the data to the appropriate queues'
26
+ end
27
+
28
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Isimud do
4
+ before(:each) do
5
+ Isimud.default_client = nil
6
+ end
7
+
8
+ describe '.client' do
9
+ context 'for test configuration' do
10
+ before do
11
+ Isimud.client_type = :test
12
+ end
13
+
14
+ it 'creates a new TestClient client' do
15
+ Isimud.client.should be_a Isimud::TestClient
16
+ end
17
+ end
18
+
19
+ context 'for a remote Bunny server' do
20
+ let(:server_url) { 'amqp://guest:guest@example.com' }
21
+ before do
22
+ Isimud.server = server_url
23
+ Isimud.client_type = :bunny
24
+ end
25
+
26
+ it 'creates a new Isimud::BunnyClient for the specified server' do
27
+ client = Isimud.client
28
+ expect(client).to be_a Isimud::BunnyClient
29
+ expect(client.url).to eql(server_url)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '.model_watcher_enabled?' do
35
+ it 'is true by default' do
36
+ Isimud.should be_model_watcher_enabled
37
+ end
38
+
39
+ it 'is true if enable_model_watcher is explicitly set' do
40
+ Isimud.enable_model_watcher = true
41
+ expect(Isimud).to be_model_watcher_enabled
42
+ end
43
+
44
+ it 'is false if enable_model_watcher is set to false' do
45
+ Isimud.enable_model_watcher = false
46
+ expect(Isimud).to_not be_model_watcher_enabled
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,55 @@
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+ require 'isimud'
7
+
8
+ require 'combustion'
9
+ require 'database_cleaner'
10
+
11
+ Isimud.client_type = :test
12
+ Isimud.logger = Logger.new(STDOUT)
13
+ Isimud.logger.level = Logger::DEBUG
14
+ Isimud.log_level = :debug
15
+ Isimud.enable_model_watcher = true
16
+ Isimud.model_watcher_schema = 'test_schema'
17
+ Isimud::EventObserver.observed_models = Array.new
18
+ Isimud::EventObserver.observed_mutex = Mutex.new
19
+ Combustion.initialize! :active_record
20
+
21
+ puts "database configuration: "
22
+
23
+ RSpec.configure do |config|
24
+ # rspec-expectations config goes here. You can use an alternate
25
+ # assertion/expectation library such as wrong or the stdlib/minitest
26
+ # assertions if you prefer.
27
+ config.expect_with :rspec do |expectations|
28
+ # This option will default to `true` in RSpec 4. It makes the `description`
29
+ # and `failure_message` of custom matchers include text for helper methods
30
+ # defined using `chain`, e.g.:
31
+ # be_bigger_than(2).and_smaller_than(4).description
32
+ # # => "be bigger than 2 and smaller than 4"
33
+ # ...rather than:
34
+ # # => "be bigger than 2"
35
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
36
+ end
37
+
38
+ # rspec-mocks config goes here. You can use an alternate test double
39
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
40
+ config.mock_with :rspec do |mocks|
41
+ # Prevents you from mocking or stubbing a method that does not exist on
42
+ # a real object. This is generally recommended, and will default to
43
+ # `true` in RSpec 4.
44
+ mocks.verify_partial_doubles = true
45
+ end
46
+
47
+ config.before(:suite) do
48
+ DatabaseCleaner.strategy = :truncation
49
+ end
50
+
51
+ config.after(:each) do
52
+ DatabaseCleaner.clean
53
+ end
54
+ end
55
+
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isimud
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.2
5
+ platform: ruby
6
+ authors:
7
+ - George Feil
8
+ - Brian Jenkins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-08-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 3.2.17
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: 3.2.17
28
+ - !ruby/object:Gem::Dependency
29
+ name: activesupport
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 3.2.17
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 3.2.17
42
+ - !ruby/object:Gem::Dependency
43
+ name: bunny
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 1.6.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.6.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: chronic_duration
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.10.6
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 0.10.6
70
+ description: ''
71
+ email:
72
+ - george.feil@keas.com
73
+ - bonkydog@bonkydog.com
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".gitignore"
79
+ - ".rspec"
80
+ - ".ruby-version"
81
+ - ".yardoc/checksums"
82
+ - ".yardoc/object_types"
83
+ - ".yardoc/objects/root.dat"
84
+ - ".yardoc/proxy_types"
85
+ - Gemfile
86
+ - Gemfile.lock
87
+ - README.md
88
+ - Rakefile
89
+ - config.ru
90
+ - config/tddium.yml
91
+ - doc/Isimud.html
92
+ - doc/Isimud/BunnyClient.html
93
+ - doc/Isimud/Client.html
94
+ - doc/Isimud/Event.html
95
+ - doc/Isimud/EventListener.html
96
+ - doc/Isimud/EventObserver.html
97
+ - doc/Isimud/EventObserver/ClassMethods.html
98
+ - doc/Isimud/Generators.html
99
+ - doc/Isimud/Generators/ConfigGenerator.html
100
+ - doc/Isimud/Generators/InitializerGenerator.html
101
+ - doc/Isimud/Logging.html
102
+ - doc/Isimud/ModelWatcher.html
103
+ - doc/Isimud/ModelWatcher/ClassMethods.html
104
+ - doc/Isimud/Railtie.html
105
+ - doc/Isimud/TestClient.html
106
+ - doc/Isimud/TestClient/Queue.html
107
+ - doc/_index.html
108
+ - doc/class_list.html
109
+ - doc/css/common.css
110
+ - doc/css/full_list.css
111
+ - doc/css/style.css
112
+ - doc/file.README.html
113
+ - doc/file_list.html
114
+ - doc/frames.html
115
+ - doc/index.html
116
+ - doc/js/app.js
117
+ - doc/js/full_list.js
118
+ - doc/js/jquery.js
119
+ - doc/method_list.html
120
+ - doc/top-level-namespace.html
121
+ - isimud.gemspec
122
+ - lib/isimud.rb
123
+ - lib/isimud/bunny_client.rb
124
+ - lib/isimud/client.rb
125
+ - lib/isimud/event.rb
126
+ - lib/isimud/event_listener.rb
127
+ - lib/isimud/event_observer.rb
128
+ - lib/isimud/logging.rb
129
+ - lib/isimud/model_watcher.rb
130
+ - lib/isimud/railtie.rb
131
+ - lib/isimud/tasks.rb
132
+ - lib/isimud/test_client.rb
133
+ - lib/isimud/version.rb
134
+ - lib/rails/generators/isimud/config_generator.rb
135
+ - lib/rails/generators/isimud/initializer_generator.rb
136
+ - lib/rails/generators/isimud/templates/initializer.rb
137
+ - lib/rails/generators/isimud/templates/isimud.yml
138
+ - spec/internal/app/models/admin.rb
139
+ - spec/internal/app/models/company.rb
140
+ - spec/internal/app/models/user.rb
141
+ - spec/internal/config/database.yml
142
+ - spec/internal/config/routes.rb
143
+ - spec/internal/db/schema.rb
144
+ - spec/internal/log/.gitignore
145
+ - spec/internal/public/favicon.ico
146
+ - spec/isimud/bunny_client_spec.rb
147
+ - spec/isimud/event_listener_spec.rb
148
+ - spec/isimud/event_observer_spec.rb
149
+ - spec/isimud/event_spec.rb
150
+ - spec/isimud/model_watcher_spec.rb
151
+ - spec/isimud/test_client_spec.rb
152
+ - spec/isimud_spec.rb
153
+ - spec/spec_helper.rb
154
+ homepage: ''
155
+ licenses:
156
+ - Copyright (C) 2014 Keas -- All rights reserved
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.4.5.1
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: AMQP Messaging for Events and ActiveRecord changes
178
+ test_files:
179
+ - spec/internal/app/models/admin.rb
180
+ - spec/internal/app/models/company.rb
181
+ - spec/internal/app/models/user.rb
182
+ - spec/internal/config/database.yml
183
+ - spec/internal/config/routes.rb
184
+ - spec/internal/db/schema.rb
185
+ - spec/internal/log/.gitignore
186
+ - spec/internal/public/favicon.ico
187
+ - spec/isimud/bunny_client_spec.rb
188
+ - spec/isimud/event_listener_spec.rb
189
+ - spec/isimud/event_observer_spec.rb
190
+ - spec/isimud/event_spec.rb
191
+ - spec/isimud/model_watcher_spec.rb
192
+ - spec/isimud/test_client_spec.rb
193
+ - spec/isimud_spec.rb
194
+ - spec/spec_helper.rb
195
+ has_rdoc: