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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 83a83137b7deb41a7c90543b1bc5e357f80f8b3d
|
4
|
+
data.tar.gz: afa7acb7b71b8cd159a7a9cfd95ed461613566ff
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 205e376894ca96ada6eb0859d24a619e98630e5d757cb30df84ff3674f8a378226778d16c1447956954c9d784f7ae5166782970ee6dff6e1dfcd8f6044426f22
|
7
|
+
data.tar.gz: 813394bb8976e04c1609a317d04c5e4054b868e6d85a83d53b5b67d6588dee2f4dc9b10c865c30b864e3f98ab12e17f4e9f828e287bdaa0586f186e3dbcf9ecf
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.3
|
data/.yardoc/checksums
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
lib/isimud.rb 22ac8b1ab9a85d8ef39a68bd67f88712a6f0b77d
|
2
|
+
lib/isimud/event.rb 068adf31099eb773829921c85a446c2308d6750b
|
3
|
+
lib/isimud/tasks.rb 8d07d80e178928098e959ebdcbda1707e9b50617
|
4
|
+
lib/isimud/client.rb 80a360bd7a2817f7d3c67b33de8fd92f2610c5a8
|
5
|
+
lib/isimud/version.rb 39825e610d2f91209d7f98c086d8c3eb4f027b42
|
6
|
+
lib/isimud/logging.rb 2f506f049011441628a3d573d8e2a670156b4a3a
|
7
|
+
lib/isimud/railtie.rb e644c4d74ae8298f11dd0c2fcae1d72259e24ea3
|
8
|
+
lib/isimud/test_client.rb 4d3ab074ae617f47175384c742cd8acd6878718e
|
9
|
+
lib/isimud/bunny_client.rb f2e2cfdb7d9eaef1f38ebfc6d329cea849f4dc79
|
10
|
+
lib/isimud/model_watcher.rb f9294e03f6d22676ae59f07edabd16f028f7db79
|
11
|
+
lib/isimud/event_observer.rb b8d2861e876b58da8ed68c62e20883e5766e6f5e
|
12
|
+
lib/isimud/event_listener.rb 46f889072a1a19382aa45d38b599d2dbb6075225
|
13
|
+
lib/rails/generators/isimud/config_generator.rb d1c964f26c6e0f0289343bac17d3a9b1f99d7a98
|
14
|
+
lib/rails/generators/isimud/initializer_generator.rb c7b188459d17d35ccbfa820a434dd6a97a58aeeb
|
15
|
+
lib/rails/generators/isimud/templates/initializer.rb fb01711a9a3a523808f1f503a97342fb09bab4f8
|
Binary file
|
Binary file
|
data/.yardoc/proxy_types
ADDED
Binary file
|
data/Gemfile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in isimud.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem 'activesupport', '~> 3.2.17'
|
7
|
+
gem 'bundler', '~> 1.6'
|
8
|
+
gem 'rake'
|
9
|
+
|
10
|
+
group :development, :test do
|
11
|
+
gem 'awesome_print'
|
12
|
+
gem 'rspec'
|
13
|
+
gem 'combustion'
|
14
|
+
gem 'database_cleaner'
|
15
|
+
gem 'sqlite3'
|
16
|
+
gem 'codeclimate-test-reporter', require: false
|
17
|
+
end
|
18
|
+
|
19
|
+
group :test do
|
20
|
+
gem 'test_after_commit'
|
21
|
+
gem 'timecop'
|
22
|
+
end
|
23
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
isimud (0.5.2)
|
5
|
+
activerecord (>= 3.2.17)
|
6
|
+
activesupport (>= 3.2.17)
|
7
|
+
bunny (>= 1.6.0)
|
8
|
+
chronic_duration (>= 0.10.6)
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
actionpack (3.2.21)
|
14
|
+
activemodel (= 3.2.21)
|
15
|
+
activesupport (= 3.2.21)
|
16
|
+
builder (~> 3.0.0)
|
17
|
+
erubis (~> 2.7.0)
|
18
|
+
journey (~> 1.0.4)
|
19
|
+
rack (~> 1.4.5)
|
20
|
+
rack-cache (~> 1.2)
|
21
|
+
rack-test (~> 0.6.1)
|
22
|
+
sprockets (~> 2.2.1)
|
23
|
+
activemodel (3.2.21)
|
24
|
+
activesupport (= 3.2.21)
|
25
|
+
builder (~> 3.0.0)
|
26
|
+
activerecord (3.2.21)
|
27
|
+
activemodel (= 3.2.21)
|
28
|
+
activesupport (= 3.2.21)
|
29
|
+
arel (~> 3.0.2)
|
30
|
+
tzinfo (~> 0.3.29)
|
31
|
+
activesupport (3.2.21)
|
32
|
+
i18n (~> 0.6, >= 0.6.4)
|
33
|
+
multi_json (~> 1.0)
|
34
|
+
amq-protocol (2.0.0)
|
35
|
+
arel (3.0.3)
|
36
|
+
awesome_print (1.2.0)
|
37
|
+
builder (3.0.4)
|
38
|
+
bunny (2.1.0)
|
39
|
+
amq-protocol (>= 2.0.0)
|
40
|
+
chronic_duration (0.10.6)
|
41
|
+
numerizer (~> 0.1.1)
|
42
|
+
codeclimate-test-reporter (0.4.5)
|
43
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
44
|
+
combustion (0.5.2)
|
45
|
+
activesupport (>= 3.0.0)
|
46
|
+
railties (>= 3.0.0)
|
47
|
+
thor (>= 0.14.6)
|
48
|
+
database_cleaner (1.4.0)
|
49
|
+
diff-lcs (1.2.5)
|
50
|
+
docile (1.1.5)
|
51
|
+
erubis (2.7.0)
|
52
|
+
hike (1.2.3)
|
53
|
+
i18n (0.7.0)
|
54
|
+
journey (1.0.4)
|
55
|
+
json (1.8.2)
|
56
|
+
multi_json (1.10.1)
|
57
|
+
numerizer (0.1.1)
|
58
|
+
rack (1.4.5)
|
59
|
+
rack-cache (1.2)
|
60
|
+
rack (>= 0.4)
|
61
|
+
rack-ssl (1.3.4)
|
62
|
+
rack
|
63
|
+
rack-test (0.6.3)
|
64
|
+
rack (>= 1.0)
|
65
|
+
railties (3.2.21)
|
66
|
+
actionpack (= 3.2.21)
|
67
|
+
activesupport (= 3.2.21)
|
68
|
+
rack-ssl (~> 1.3.2)
|
69
|
+
rake (>= 0.8.7)
|
70
|
+
rdoc (~> 3.4)
|
71
|
+
thor (>= 0.14.6, < 2.0)
|
72
|
+
rake (10.4.2)
|
73
|
+
rdoc (3.12.2)
|
74
|
+
json (~> 1.4)
|
75
|
+
rspec (3.1.0)
|
76
|
+
rspec-core (~> 3.1.0)
|
77
|
+
rspec-expectations (~> 3.1.0)
|
78
|
+
rspec-mocks (~> 3.1.0)
|
79
|
+
rspec-core (3.1.7)
|
80
|
+
rspec-support (~> 3.1.0)
|
81
|
+
rspec-expectations (3.1.2)
|
82
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
83
|
+
rspec-support (~> 3.1.0)
|
84
|
+
rspec-mocks (3.1.3)
|
85
|
+
rspec-support (~> 3.1.0)
|
86
|
+
rspec-support (3.1.2)
|
87
|
+
simplecov (0.9.1)
|
88
|
+
docile (~> 1.1.0)
|
89
|
+
multi_json (~> 1.0)
|
90
|
+
simplecov-html (~> 0.8.0)
|
91
|
+
simplecov-html (0.8.0)
|
92
|
+
sprockets (2.2.3)
|
93
|
+
hike (~> 1.2)
|
94
|
+
multi_json (~> 1.0)
|
95
|
+
rack (~> 1.0)
|
96
|
+
tilt (~> 1.1, != 1.3.0)
|
97
|
+
sqlite3 (1.3.10)
|
98
|
+
test_after_commit (0.4.0)
|
99
|
+
activerecord (>= 3.2)
|
100
|
+
thor (0.19.1)
|
101
|
+
tilt (1.4.1)
|
102
|
+
timecop (0.7.1)
|
103
|
+
tzinfo (0.3.42)
|
104
|
+
|
105
|
+
PLATFORMS
|
106
|
+
ruby
|
107
|
+
|
108
|
+
DEPENDENCIES
|
109
|
+
activesupport (~> 3.2.17)
|
110
|
+
awesome_print
|
111
|
+
bundler (~> 1.6)
|
112
|
+
codeclimate-test-reporter
|
113
|
+
combustion
|
114
|
+
database_cleaner
|
115
|
+
isimud!
|
116
|
+
rake
|
117
|
+
rspec
|
118
|
+
sqlite3
|
119
|
+
test_after_commit
|
120
|
+
timecop
|
121
|
+
|
122
|
+
BUNDLED WITH
|
123
|
+
1.10.6
|
data/README.md
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
# Isimud: AMQP based Messaging abstraction component.
|
2
|
+
|
3
|
+
>Isimud is a minor god, the messenger of the god Enki in Sumerian mythology.
|
4
|
+
>He is readily identifiable by the fact that he possesses two faces looking in opposite directions.
|
5
|
+
>
|
6
|
+
>*Source: Wikipedia*
|
7
|
+
|
8
|
+
Isimud is a message publishing and consumption gem. It consists of the following components:
|
9
|
+
|
10
|
+
* A [Bunny](http://rubybunny.info) based client interface for publishing and receiving messages using AMQP.
|
11
|
+
* A test client which mocks most client operations and allows for synchronous delivery and processing of messages for unit tests.
|
12
|
+
* A Model Watcher mixin for ActiveRecord that automatically sends messages whenever an ActiveRecord instance is created, modified, or destroyed.
|
13
|
+
* An Event Observer mixin for registering ActiveRecord models and instances with the EventListener for receiving messages.
|
14
|
+
* An Event Listener daemon process which manages queues for Event Observers.
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
Add this line to your application's Gemfile:
|
19
|
+
|
20
|
+
gem 'isimud'
|
21
|
+
|
22
|
+
And then execute:
|
23
|
+
|
24
|
+
$ bundle
|
25
|
+
|
26
|
+
Or install it yourself as:
|
27
|
+
|
28
|
+
$ gem install isimud
|
29
|
+
|
30
|
+
For Rails applications, use the following generators to create config and initializer files, respectively:
|
31
|
+
|
32
|
+
$ rails g isimud:config
|
33
|
+
$ rails g isimud:initializer
|
34
|
+
|
35
|
+
Customize the AMQP broker settings in the config/isimud.yml
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
### Connecting to an AMQP server
|
40
|
+
|
41
|
+
There are two supported conventions for specifying a RabbitMQ server (broker) in the configuration file:
|
42
|
+
|
43
|
+
#### Using a URL
|
44
|
+
|
45
|
+
server: amqp:port//user_name:password@host/vhost
|
46
|
+
|
47
|
+
#### Using separate parameters:
|
48
|
+
|
49
|
+
server:
|
50
|
+
host: hostname
|
51
|
+
port: 15672
|
52
|
+
user: user_name
|
53
|
+
pass: password
|
54
|
+
vhost: vhost
|
55
|
+
|
56
|
+
[Complete list of Bunny options available here](http://rubybunny.info/articles/connecting.html)
|
57
|
+
|
58
|
+
Isimud is designed to work with [RabbitMQ](http://www.rabbitmq.com).
|
59
|
+
Besides the standard AMQP 0.9.1 protocol, Isimud relies on Publishing Confirms (Acknowledgements), which
|
60
|
+
is a RabbitMQ specific extension to AMQP 0.9.1.
|
61
|
+
|
62
|
+
Note that Isimud does not automatically create exchanges. Make sure the exchange has been declared on the
|
63
|
+
message server, or you will get an exception. It is highly recommended to set the /durable/ parameter on the exchange
|
64
|
+
in order to prevent loss of messages due to failures.
|
65
|
+
|
66
|
+
Isimud uses [Bunny](http://rubybunny.info) to connect to RabbitMQ.
|
67
|
+
|
68
|
+
### Message publication
|
69
|
+
|
70
|
+
Isimud uses topic based exchanges publish messages. This allows for multiple listener
|
71
|
+
workers to operate in parallel to process messages.
|
72
|
+
|
73
|
+
### Message binding and consumption
|
74
|
+
|
75
|
+
Isimud uses non-exclusive, durable queues to listen for and consume messages. Named queues are automatically created
|
76
|
+
if they do not exist.
|
77
|
+
|
78
|
+
## Changes
|
79
|
+
|
80
|
+
### 0.5.2
|
81
|
+
|
82
|
+
* Fixed regexp bug in TestClient affecting message delivery
|
83
|
+
* Add more logging for EventObserver binding
|
84
|
+
|
85
|
+
### 0.5.1
|
86
|
+
|
87
|
+
* Added Event#attributes
|
88
|
+
|
89
|
+
### 0.5.0
|
90
|
+
|
91
|
+
* Allow EventObserver classes to override the exchange for listening to events
|
92
|
+
* Corrected initialization of EventListener for handling defaults
|
93
|
+
* Create an explicit name for EventListener model queues for EventObserver instances
|
94
|
+
* Fixed a bug in EventObserver that caused ModelWatcher to not send update events appropriately when default columns are watched
|
95
|
+
* Moved requires for Isimud below config attribute declarations
|
96
|
+
|
97
|
+
### 0.4.10
|
98
|
+
|
99
|
+
* Corrected trap of INT and TERM signals
|
100
|
+
* Added error counter mutex and cleaned up logging
|
101
|
+
* Corrected race condition for registering EventObserver classes
|
102
|
+
|
103
|
+
### 0.4.5
|
104
|
+
|
105
|
+
* Fixed issues with exception handling
|
106
|
+
|
107
|
+
### 0.4.1
|
108
|
+
|
109
|
+
* Event now accepts an exchange option for publishing
|
110
|
+
* Added Isimud.events_exchange
|
111
|
+
* Cleaned up initializer template
|
112
|
+
|
113
|
+
### 0.4.0
|
114
|
+
|
115
|
+
* Event logging of published message now set to debug level
|
116
|
+
* Added EventListener and EventObserver
|
117
|
+
* Added new Client methods: create_queue, delete_queue. It is now possible to create queues with
|
118
|
+
customized options (such as exclusive, non-durable queues).
|
119
|
+
* Clients can now be configured with an exception handler. This is used by EventListener to intercept exceptions raised
|
120
|
+
during message handling by an observer.
|
121
|
+
|
122
|
+
### 0.3.7
|
123
|
+
|
124
|
+
* Added EventObserver mix-in
|
125
|
+
* Added accessors for queues and routing_keys to TestClient
|
126
|
+
|
127
|
+
### 0.3.6
|
128
|
+
|
129
|
+
* Reraise all exceptions in message processing block in BunnyClient#bind.
|
130
|
+
|
131
|
+
### 0.3.5
|
132
|
+
|
133
|
+
* Fixed deprecation on setting manual ack on Bunny queue subscriptions.
|
134
|
+
|
135
|
+
### 0.3.4
|
136
|
+
|
137
|
+
* Catch Timeout::Error in ModelWatcher.synchronize
|
138
|
+
|
139
|
+
### 0.3.1
|
140
|
+
|
141
|
+
* Tuning gargabe collector on ModelWatcher.synchronize
|
142
|
+
|
143
|
+
### 0.3.0
|
144
|
+
|
145
|
+
* Added rake task for manual synchronization using ModelWatcher
|
146
|
+
|
147
|
+
### 0.2.17
|
148
|
+
|
149
|
+
* Added guard on null #updated_at instances
|
150
|
+
* Added ModelWatcher#isimud_sync for manual synchronization
|
151
|
+
|
152
|
+
### 0.2.15
|
153
|
+
|
154
|
+
* Changed Event#send to Event#publish, to avoid overloading Ruby.
|
155
|
+
|
156
|
+
### 0.2.13
|
157
|
+
|
158
|
+
* Add :omit_parameters option to Event#as_json
|
159
|
+
|
160
|
+
### 0.2.12
|
161
|
+
|
162
|
+
* Demodulize ActiveRecord model name when setting ModelWatcher event type
|
163
|
+
|
164
|
+
### 0.2.10
|
165
|
+
|
166
|
+
* Added Isimud.retry_failures
|
167
|
+
* Isimud::ModelWatcher now includes :created_at and :updated_at columns by default
|
168
|
+
* Added Isimud::Client.connected?
|
169
|
+
* Avoid connecting to database when Isimud::ModelWatcher.watch_attributes is called
|
170
|
+
|
171
|
+
### 0.2.4
|
172
|
+
|
173
|
+
* Add Isimud::ModelWatcher#isimud_synchronize? to allow conditional synchronization. Override to activate.
|
174
|
+
|
175
|
+
### 0.2.2
|
176
|
+
|
177
|
+
* Add enable_model_watcher configuration parameter (default is true)
|
178
|
+
|
179
|
+
### 0.2.0
|
180
|
+
|
181
|
+
* Added Isimud::Event
|
182
|
+
* Extracted Isimud::Client#log into Isimud::Logging module
|
183
|
+
|
184
|
+
### 0.1.4
|
185
|
+
|
186
|
+
* Don't reject messages when exception is raised in bind block
|
187
|
+
|
188
|
+
### 0.1.3
|
189
|
+
|
190
|
+
* Upgrade bunny gem requirement to 1.3.x
|
191
|
+
* Fixed message acknowledgements
|
192
|
+
* Added log_level configuration parameter (default is :debug)
|
193
|
+
|
194
|
+
### 0.1.2
|
195
|
+
|
196
|
+
* Reject message with requeue when an exception is raised during processing
|
197
|
+
|
198
|
+
### 0.1.1
|
199
|
+
|
200
|
+
* Enable channel confirmations for message publication
|
201
|
+
|
202
|
+
### 0.1.0
|
203
|
+
|
204
|
+
* ModelWatcher mix-in for ActiveRecord, sends events on instance changes
|
205
|
+
* Initializer generator for Rails
|
206
|
+
|
207
|
+
### 0.0.8 (first working version)
|
208
|
+
|
209
|
+
* Don't clear the queues when reconnecting TestClient
|
210
|
+
|
211
|
+
|
212
|
+
## Contributing
|
213
|
+
|
214
|
+
1. Fork it ( https://github.com/KeasInc/isimud/fork )
|
215
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
216
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
217
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
218
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/config.ru
ADDED