gilmour 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,10 @@
1
+ require 'amqp'
2
+ require_relative '../../lib/gilmour'
3
+
4
+ class TestServiceBase
5
+ include Gilmour::Base
6
+
7
+ def initialize(options, backend)
8
+ enable_backend(backend, options)
9
+ end
10
+ end
data/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Gilmour
2
+ VERSION = '0.2.4'
3
+ end
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