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.
- 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:
|