isimud 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
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: