isimud 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.yardoc/checksums +15 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +123 -0
- data/README.md +218 -0
- data/Rakefile +2 -0
- data/config.ru +7 -0
- data/config/tddium.yml +11 -0
- data/doc/Isimud.html +1696 -0
- data/doc/Isimud/BunnyClient.html +1004 -0
- data/doc/Isimud/Client.html +812 -0
- data/doc/Isimud/Event.html +1500 -0
- data/doc/Isimud/EventListener.html +1217 -0
- data/doc/Isimud/EventObserver.html +367 -0
- data/doc/Isimud/EventObserver/ClassMethods.html +292 -0
- data/doc/Isimud/Generators.html +117 -0
- data/doc/Isimud/Generators/ConfigGenerator.html +192 -0
- data/doc/Isimud/Generators/InitializerGenerator.html +192 -0
- data/doc/Isimud/Logging.html +230 -0
- data/doc/Isimud/ModelWatcher.html +312 -0
- data/doc/Isimud/ModelWatcher/ClassMethods.html +511 -0
- data/doc/Isimud/Railtie.html +123 -0
- data/doc/Isimud/TestClient.html +1003 -0
- data/doc/Isimud/TestClient/Queue.html +556 -0
- data/doc/_index.html +290 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +338 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +338 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +711 -0
- data/doc/top-level-namespace.html +112 -0
- data/isimud.gemspec +25 -0
- data/lib/isimud.rb +91 -0
- data/lib/isimud/bunny_client.rb +95 -0
- data/lib/isimud/client.rb +48 -0
- data/lib/isimud/event.rb +112 -0
- data/lib/isimud/event_listener.rb +200 -0
- data/lib/isimud/event_observer.rb +81 -0
- data/lib/isimud/logging.rb +11 -0
- data/lib/isimud/model_watcher.rb +144 -0
- data/lib/isimud/railtie.rb +9 -0
- data/lib/isimud/tasks.rb +20 -0
- data/lib/isimud/test_client.rb +89 -0
- data/lib/isimud/version.rb +3 -0
- data/lib/rails/generators/isimud/config_generator.rb +12 -0
- data/lib/rails/generators/isimud/initializer_generator.rb +12 -0
- data/lib/rails/generators/isimud/templates/initializer.rb +17 -0
- data/lib/rails/generators/isimud/templates/isimud.yml +20 -0
- data/spec/internal/app/models/admin.rb +2 -0
- data/spec/internal/app/models/company.rb +34 -0
- data/spec/internal/app/models/user.rb +27 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +22 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/isimud/bunny_client_spec.rb +125 -0
- data/spec/isimud/event_listener_spec.rb +86 -0
- data/spec/isimud/event_observer_spec.rb +32 -0
- data/spec/isimud/event_spec.rb +74 -0
- data/spec/isimud/model_watcher_spec.rb +189 -0
- data/spec/isimud/test_client_spec.rb +28 -0
- data/spec/isimud_spec.rb +49 -0
- data/spec/spec_helper.rb +55 -0
- 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
|
data/spec/isimud_spec.rb
ADDED
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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:
|