gilmour 0.2.4
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 +5 -0
- data/.travis.yml +16 -0
- data/Gemfile +3 -0
- data/LICENSE +19 -0
- data/README.md +32 -0
- data/examples/echoclient.rb +22 -0
- data/examples/server.rb +47 -0
- data/examples/thread_example.rb +40 -0
- data/gilmour.gemspec +26 -0
- data/lib/gilmour/backends/backend.rb +148 -0
- data/lib/gilmour/backends/redis.rb +254 -0
- data/lib/gilmour/base.rb +178 -0
- data/lib/gilmour/protocol.rb +48 -0
- data/lib/gilmour/responder.rb +224 -0
- data/lib/gilmour/waiter.rb +20 -0
- data/lib/gilmour.rb +11 -0
- data/test/spec/helpers/common.rb +25 -0
- data/test/spec/helpers/connection.rb +58 -0
- data/test/spec/helpers/data.yml +12 -0
- data/test/spec/test_service_base.rb +48 -0
- data/test/spec/test_subscriber_redis.rb +339 -0
- data/test/spec/test_subscriber_redis_forked.rb +370 -0
- data/test/testservice/subscribers/test_subscriber.rb +103 -0
- data/test/testservice/test_service_base.rb +10 -0
- data/version.rb +3 -0
- metadata +161 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
class TestSubscriber < TestServiceBase
|
2
|
+
ExclusiveTimeoutTopic = 'test.exclusive_topic'
|
3
|
+
ExclusiveTimeoutReturn = 'test.exclusive_return'
|
4
|
+
|
5
|
+
MultiTimeoutTopic = 'test.multi_timeout'
|
6
|
+
MultiTimeoutReturn = 'test.multi_return'
|
7
|
+
|
8
|
+
TimeoutTopic = "test.timeout"
|
9
|
+
Topic = 'test.topic'
|
10
|
+
WildcardTopic = 'test.wildcard.*'
|
11
|
+
Simulation = 'simulate.topic'
|
12
|
+
Republish = 'test.republish'
|
13
|
+
GroupReturn = "group_return"
|
14
|
+
GroupTopic = "test.group"
|
15
|
+
ExclusiveTopic = "test.exclusive"
|
16
|
+
ExitTopic = "topic.exit"
|
17
|
+
ReListenTopic = "topic.relisten"
|
18
|
+
|
19
|
+
|
20
|
+
def self.get_callback
|
21
|
+
@callback
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.callback
|
25
|
+
@callback = Proc.new
|
26
|
+
end
|
27
|
+
|
28
|
+
2.times do |i|
|
29
|
+
listen_to ExclusiveTopic, {exclusive: true} do
|
30
|
+
publish(i, TestSubscriber::GroupReturn)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
2.times do
|
35
|
+
listen_to GroupTopic do
|
36
|
+
publish(request.body, TestSubscriber::GroupReturn)
|
37
|
+
publish("2", TestSubscriber::GroupReturn)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
listen_to ExclusiveTimeoutTopic, {exclusive: true} do
|
43
|
+
data, _, _ = Gilmour::Protocol.parse_response(request.body)
|
44
|
+
logger.info "Will sleep for #{data} seconds now. But allowed timeout is 2."
|
45
|
+
sleep data
|
46
|
+
publish("2", TestSubscriber::ExclusiveTimeoutReturn)
|
47
|
+
end
|
48
|
+
|
49
|
+
3.times do
|
50
|
+
listen_to MultiTimeoutTopic do
|
51
|
+
data, _, _ = Gilmour::Protocol.parse_response(request.body)
|
52
|
+
logger.info "Will sleep for #{data} seconds now. But allowed timeout is 2."
|
53
|
+
sleep data
|
54
|
+
publish("2", TestSubscriber::MultiTimeoutReturn)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
listen_to TimeoutTopic, {exclusive: false, timeout: 2} do
|
59
|
+
data, _, _ = Gilmour::Protocol.parse_response(request.body)
|
60
|
+
logger.info "Will sleep for #{data} seconds now. But allowed timeout is 2."
|
61
|
+
sleep data
|
62
|
+
respond 'Pong!'
|
63
|
+
end
|
64
|
+
|
65
|
+
listen_to ExitTopic do
|
66
|
+
logger.info "Sleeping for 2 seconds, and then will exit"
|
67
|
+
sleep 2
|
68
|
+
exit!
|
69
|
+
end
|
70
|
+
|
71
|
+
listen_to ReListenTopic do
|
72
|
+
# In forked environment this should not work.
|
73
|
+
add_listener "test.world" do
|
74
|
+
respond "Pong!"
|
75
|
+
end
|
76
|
+
respond "Pong"
|
77
|
+
end
|
78
|
+
|
79
|
+
listen_to Topic do
|
80
|
+
if TestSubscriber.get_callback
|
81
|
+
TestSubscriber.get_callback.call(request.topic, request.body)
|
82
|
+
end
|
83
|
+
respond 'Pong!' if request.body == 'Ping!'
|
84
|
+
end
|
85
|
+
|
86
|
+
listen_to WildcardTopic do
|
87
|
+
if TestSubscriber.get_callback
|
88
|
+
TestSubscriber.get_callback.call(request.topic, request.body)
|
89
|
+
end
|
90
|
+
respond request.body, 200
|
91
|
+
end
|
92
|
+
|
93
|
+
listen_to Simulation do |topic, data|
|
94
|
+
@callback.call(topic, data)
|
95
|
+
end
|
96
|
+
|
97
|
+
listen_to Republish do
|
98
|
+
resp = self
|
99
|
+
publish(request.body, Topic) do |data, code|
|
100
|
+
resp.respond data, 200, now: true
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gilmour
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aditya Godbole
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-given
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mash
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: redis
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: gilmour-em-hiredis
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: amqp
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: This gem provides a Sinatra like DSL and a simple protocol to enable
|
98
|
+
writing services that communicate over AMQP
|
99
|
+
email:
|
100
|
+
- code.aa@gdbl.me
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE
|
109
|
+
- README.md
|
110
|
+
- examples/echoclient.rb
|
111
|
+
- examples/server.rb
|
112
|
+
- examples/thread_example.rb
|
113
|
+
- gilmour.gemspec
|
114
|
+
- lib/gilmour.rb
|
115
|
+
- lib/gilmour/backends/backend.rb
|
116
|
+
- lib/gilmour/backends/redis.rb
|
117
|
+
- lib/gilmour/base.rb
|
118
|
+
- lib/gilmour/protocol.rb
|
119
|
+
- lib/gilmour/responder.rb
|
120
|
+
- lib/gilmour/waiter.rb
|
121
|
+
- test/spec/helpers/common.rb
|
122
|
+
- test/spec/helpers/connection.rb
|
123
|
+
- test/spec/helpers/data.yml
|
124
|
+
- test/spec/test_service_base.rb
|
125
|
+
- test/spec/test_subscriber_redis.rb
|
126
|
+
- test/spec/test_subscriber_redis_forked.rb
|
127
|
+
- test/testservice/subscribers/test_subscriber.rb
|
128
|
+
- test/testservice/test_service_base.rb
|
129
|
+
- version.rb
|
130
|
+
homepage: ''
|
131
|
+
licenses: []
|
132
|
+
metadata: {}
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 2.2.2
|
150
|
+
signing_key:
|
151
|
+
specification_version: 4
|
152
|
+
summary: A Sinatra like DSL for implementing AMQP services
|
153
|
+
test_files:
|
154
|
+
- test/spec/helpers/common.rb
|
155
|
+
- test/spec/helpers/connection.rb
|
156
|
+
- test/spec/helpers/data.yml
|
157
|
+
- test/spec/test_service_base.rb
|
158
|
+
- test/spec/test_subscriber_redis.rb
|
159
|
+
- test/spec/test_subscriber_redis_forked.rb
|
160
|
+
- test/testservice/subscribers/test_subscriber.rb
|
161
|
+
- test/testservice/test_service_base.rb
|