railway-ipc 0.1.7 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -3
  3. data/CHANGELOG.md +67 -0
  4. data/Gemfile +2 -2
  5. data/README.md +1 -1
  6. data/Rakefile +10 -4
  7. data/bin/console +3 -3
  8. data/bin/rspec +29 -0
  9. data/bin/rubocop +29 -0
  10. data/lib/railway_ipc.rb +9 -11
  11. data/lib/railway_ipc/Rakefile +2 -0
  12. data/lib/railway_ipc/consumer/consumer.rb +33 -73
  13. data/lib/railway_ipc/consumer/process_incoming_message.rb +111 -0
  14. data/lib/railway_ipc/errors.rb +9 -1
  15. data/lib/railway_ipc/handler.rb +17 -3
  16. data/lib/railway_ipc/handler_store.rb +5 -2
  17. data/lib/railway_ipc/incoming_message.rb +51 -0
  18. data/lib/railway_ipc/logger.rb +44 -26
  19. data/lib/railway_ipc/models/consumed_message.rb +40 -35
  20. data/lib/railway_ipc/models/published_message.rb +11 -9
  21. data/lib/railway_ipc/publisher.rb +67 -16
  22. data/lib/railway_ipc/rabbitmq/adapter.rb +23 -15
  23. data/lib/railway_ipc/rabbitmq/payload.rb +9 -4
  24. data/lib/railway_ipc/railtie.rb +2 -0
  25. data/lib/railway_ipc/responder.rb +10 -3
  26. data/lib/railway_ipc/response.rb +4 -1
  27. data/lib/railway_ipc/rpc/client/client.rb +43 -18
  28. data/lib/railway_ipc/rpc/client/client_response_handlers.rb +2 -0
  29. data/lib/railway_ipc/rpc/client/errors/timeout_error.rb +2 -0
  30. data/lib/railway_ipc/rpc/concerns/error_adapter_configurable.rb +2 -0
  31. data/lib/railway_ipc/rpc/concerns/message_observation_configurable.rb +2 -0
  32. data/lib/railway_ipc/rpc/concerns/publish_location_configurable.rb +2 -0
  33. data/lib/railway_ipc/rpc/rpc.rb +2 -0
  34. data/lib/railway_ipc/rpc/server/server.rb +25 -7
  35. data/lib/railway_ipc/rpc/server/server_response_handlers.rb +2 -0
  36. data/lib/railway_ipc/tasks/generate_migrations.rake +16 -16
  37. data/lib/railway_ipc/tasks/start_consumers.rake +3 -1
  38. data/lib/railway_ipc/tasks/start_servers.rake +3 -1
  39. data/lib/railway_ipc/unhandled_message_error.rb +2 -0
  40. data/lib/railway_ipc/unknown_message.pb.rb +18 -0
  41. data/lib/railway_ipc/version.rb +3 -1
  42. data/priv/migrations/add_railway_ipc_consumed_messages.rb +5 -3
  43. data/priv/migrations/add_railway_ipc_published_messages.rb +3 -1
  44. data/railway_ipc.gemspec +34 -30
  45. metadata +62 -64
  46. data/.rspec +0 -3
  47. data/.travis.yml +0 -7
  48. data/CHANGELOG.MD +0 -7
  49. data/Gemfile.lock +0 -186
  50. data/lib/railway_ipc/base_message.pb.rb +0 -21
  51. data/lib/railway_ipc/consumer/consumer_response_handlers.rb +0 -14
  52. data/lib/railway_ipc/handler_manifest.rb +0 -10
  53. data/lib/railway_ipc/null_handler.rb +0 -7
  54. data/lib/railway_ipc/null_message.rb +0 -7
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :railway_ipc do
2
4
  namespace :consumers do
3
5
  task :start do
4
- ENV["WORKERS"] = ENV["CONSUMERS"]
6
+ ENV['WORKERS'] = ENV['CONSUMERS']
5
7
  RailwayIpc.start
6
8
  end
7
9
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :railway_ipc do
2
4
  namespace :servers do
3
5
  task :start do
4
- ENV["WORKERS"] = ENV["SERVERS"]
6
+ ENV['WORKERS'] = ENV['SERVERS']
5
7
  RailwayIpc.start
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailwayIpc
2
4
  class UnhandledMessageError < StandardError
3
5
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'google/protobuf'
4
+
5
+ Google::Protobuf::DescriptorPool.generated_pool.build do
6
+ add_message 'railway_ipc.messages.Unknown' do
7
+ optional :user_uuid, :string, 1
8
+ optional :correlation_id, :string, 2
9
+ optional :uuid, :string, 3
10
+ map :context, :string, :string, 4
11
+ end
12
+ end
13
+
14
+ module RailwayIpc
15
+ module Messages
16
+ Unknown = Google::Protobuf::DescriptorPool.generated_pool.lookup('railway_ipc.messages.Unknown').msgclass
17
+ end
18
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailwayIpc
2
- VERSION = "0.1.7"
4
+ VERSION = '2.0.1'
3
5
  end
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddRailwayIpcConsumedMessages < ActiveRecord::Migration
2
4
  def change
3
- create_table :railway_ipc_consumed_messages, id: false do | t |
5
+ create_table :railway_ipc_consumed_messages do |t|
4
6
  t.uuid :uuid, null: false
5
7
  t.string :message_type
6
8
  t.uuid :user_uuid
7
9
  t.uuid :correlation_id
8
10
  t.text :encoded_message
9
11
  t.string :status, null: false
10
- t.string :queue
12
+ t.string :queue, null: false
11
13
  t.string :exchange
12
14
 
13
15
  t.datetime :updated_at
14
16
  t.datetime :inserted_at
15
17
  end
16
18
 
17
- add_index :railway_ipc_consumed_messages, :uuid, unique: true
19
+ add_index :railway_ipc_consumed_messages, %i[uuid queue], unique: true
18
20
  end
19
21
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddRailwayIpcPublishedMessages < ActiveRecord::Migration
2
4
  def change
3
- create_table :railway_ipc_published_messages, id: false do | t |
5
+ create_table :railway_ipc_published_messages, id: false do |t|
4
6
  t.uuid :uuid, null: false
5
7
  t.string :message_type
6
8
  t.uuid :user_uuid
@@ -1,50 +1,54 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "railway_ipc/version"
5
+ require 'railway_ipc/version'
4
6
 
5
7
  Gem::Specification.new do |spec|
6
- spec.name = "railway-ipc"
8
+ spec.name = 'railway-ipc'
7
9
  spec.version = RailwayIpc::VERSION
8
- spec.authors = ""
9
- spec.email = ""
10
+ spec.authors = ''
11
+ spec.email = ''
12
+ spec.required_ruby_version = '>= 2.5'
10
13
 
11
- spec.summary = %q{IPC components for Rails}
12
- spec.description = %q{IPC components for Rails}
13
- spec.homepage = "http://learn.co"
14
- spec.license = "MIT"
14
+ spec.summary = 'IPC components for Rails'
15
+ spec.description = 'IPC components for Rails'
16
+ spec.homepage = 'http://learn.co'
17
+ spec.license = 'MIT'
15
18
 
16
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
18
21
  if spec.respond_to?(:metadata)
19
- spec.metadata["allowed_push_host"] = "https://rubygems.org/"
22
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org/'
20
23
  else
21
- raise "RubyGems 2.0 or newer is required to protect against " \
22
- "public gem pushes."
24
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
25
+ 'public gem pushes.'
23
26
  end
24
27
 
25
28
  # Specify which files should be added to the gem when it is released.
26
29
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
- spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
28
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
30
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
31
+ `git ls-files -z`.split("\x0").reject { |f| f.match(/^(.circleci|.rspec|.rubocop.yml|test|spec|features)/) }
29
32
  end
30
- spec.bindir = "exe"
33
+ spec.bindir = 'exe'
31
34
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
35
+ spec.require_paths = ['lib']
36
+
37
+ spec.add_development_dependency 'bundler', '2.0.1'
38
+ spec.add_development_dependency 'factory_bot', '~> 5.1'
39
+ spec.add_development_dependency 'google-protobuf', '~> 3.9'
40
+ spec.add_development_dependency 'rake', '>= 10.0.0'
41
+ spec.add_development_dependency 'rspec', '~> 3.0'
42
+ spec.add_development_dependency 'rubocop', '~> 0.86'
33
43
 
34
- spec.add_development_dependency "rake", ">= 10.0.0"
35
- spec.add_development_dependency "bundler", "2.0.1"
36
- spec.add_development_dependency "rspec", "~> 3.0"
37
- spec.add_development_dependency "factory_bot", "~> 5.1"
38
- spec.add_development_dependency "pry-byebug", "3.4.2"
39
- spec.add_development_dependency "google-protobuf", "~> 3.9"
40
- spec.add_dependency "sneakers", "~> 2.3.5"
41
- spec.add_dependency "bunny", "~> 2.2.0"
44
+ spec.add_dependency 'bunny', '~> 2.2.0'
45
+ spec.add_dependency 'sneakers', '~> 2.3.5'
42
46
 
43
47
  # Setup for testing Rails type code within mock Rails app
44
- spec.add_development_dependency "rails", "~> 5.0.7"
45
- spec.add_development_dependency "rspec-rails"
46
- spec.add_development_dependency "pg", "~> 0.18"
47
- spec.add_development_dependency "shoulda-matchers", "~> 4.2"
48
- spec.add_development_dependency "database_cleaner", "~> 1.7"
49
- spec.add_development_dependency "listen", "~> 3.0.5"
48
+ spec.add_development_dependency 'database_cleaner', '~> 1.7'
49
+ spec.add_development_dependency 'listen', '~> 3.0.5'
50
+ spec.add_development_dependency 'pg', '~> 0.18'
51
+ spec.add_development_dependency 'rails', '~> 5.0.7'
52
+ spec.add_development_dependency 'rspec-rails'
53
+ spec.add_development_dependency 'shoulda-matchers', '~> 4.2'
50
54
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railway-ipc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-29 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 10.0.0
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 10.0.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -39,75 +25,75 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: 2.0.1
41
27
  - !ruby/object:Gem::Dependency
42
- name: rspec
28
+ name: factory_bot
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '3.0'
33
+ version: '5.1'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '3.0'
40
+ version: '5.1'
55
41
  - !ruby/object:Gem::Dependency
56
- name: factory_bot
42
+ name: google-protobuf
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '5.1'
47
+ version: '3.9'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '5.1'
54
+ version: '3.9'
69
55
  - !ruby/object:Gem::Dependency
70
- name: pry-byebug
56
+ name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - '='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: 3.4.2
61
+ version: 10.0.0
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: 3.4.2
68
+ version: 10.0.0
83
69
  - !ruby/object:Gem::Dependency
84
- name: google-protobuf
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '3.9'
75
+ version: '3.0'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '3.9'
82
+ version: '3.0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: sneakers
84
+ name: rubocop
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: 2.3.5
104
- type: :runtime
89
+ version: '0.86'
90
+ type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: 2.3.5
96
+ version: '0.86'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: bunny
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -123,33 +109,47 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: 2.2.0
125
111
  - !ruby/object:Gem::Dependency
126
- name: rails
112
+ name: sneakers
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: 5.0.7
117
+ version: 2.3.5
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.3.5
125
+ - !ruby/object:Gem::Dependency
126
+ name: database_cleaner
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.7'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 5.0.7
138
+ version: '1.7'
139
139
  - !ruby/object:Gem::Dependency
140
- name: rspec-rails
140
+ name: listen
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: 3.0.5
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: 3.0.5
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pg
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -165,47 +165,47 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.18'
167
167
  - !ruby/object:Gem::Dependency
168
- name: shoulda-matchers
168
+ name: rails
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '4.2'
173
+ version: 5.0.7
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '4.2'
180
+ version: 5.0.7
181
181
  - !ruby/object:Gem::Dependency
182
- name: database_cleaner
182
+ name: rspec-rails
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - "~>"
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: '1.7'
187
+ version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - "~>"
192
+ - - ">="
193
193
  - !ruby/object:Gem::Version
194
- version: '1.7'
194
+ version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: listen
196
+ name: shoulda-matchers
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 3.0.5
201
+ version: '4.2'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 3.0.5
208
+ version: '4.2'
209
209
  description: IPC components for Rails
210
210
  email: ''
211
211
  executables: []
@@ -213,31 +213,27 @@ extensions: []
213
213
  extra_rdoc_files: []
214
214
  files:
215
215
  - ".gitignore"
216
- - ".rspec"
217
- - ".travis.yml"
218
- - CHANGELOG.MD
216
+ - CHANGELOG.md
219
217
  - CODE_OF_CONDUCT.md
220
218
  - Gemfile
221
- - Gemfile.lock
222
219
  - LICENSE.txt
223
220
  - README.md
224
221
  - Rakefile
225
222
  - bin/console
223
+ - bin/rspec
224
+ - bin/rubocop
226
225
  - bin/setup
227
226
  - lib/railway_ipc.rb
228
227
  - lib/railway_ipc/Rakefile
229
- - lib/railway_ipc/base_message.pb.rb
230
228
  - lib/railway_ipc/consumer/consumer.rb
231
- - lib/railway_ipc/consumer/consumer_response_handlers.rb
229
+ - lib/railway_ipc/consumer/process_incoming_message.rb
232
230
  - lib/railway_ipc/errors.rb
233
231
  - lib/railway_ipc/handler.rb
234
- - lib/railway_ipc/handler_manifest.rb
235
232
  - lib/railway_ipc/handler_store.rb
233
+ - lib/railway_ipc/incoming_message.rb
236
234
  - lib/railway_ipc/logger.rb
237
235
  - lib/railway_ipc/models/consumed_message.rb
238
236
  - lib/railway_ipc/models/published_message.rb
239
- - lib/railway_ipc/null_handler.rb
240
- - lib/railway_ipc/null_message.rb
241
237
  - lib/railway_ipc/publisher.rb
242
238
  - lib/railway_ipc/rabbitmq/adapter.rb
243
239
  - lib/railway_ipc/rabbitmq/payload.rb
@@ -257,6 +253,7 @@ files:
257
253
  - lib/railway_ipc/tasks/start_consumers.rake
258
254
  - lib/railway_ipc/tasks/start_servers.rake
259
255
  - lib/railway_ipc/unhandled_message_error.rb
256
+ - lib/railway_ipc/unknown_message.pb.rb
260
257
  - lib/railway_ipc/version.rb
261
258
  - priv/migrations/add_railway_ipc_consumed_messages.rb
262
259
  - priv/migrations/add_railway_ipc_published_messages.rb
@@ -274,14 +271,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
274
271
  requirements:
275
272
  - - ">="
276
273
  - !ruby/object:Gem::Version
277
- version: '0'
274
+ version: '2.5'
278
275
  required_rubygems_version: !ruby/object:Gem::Requirement
279
276
  requirements:
280
277
  - - ">="
281
278
  - !ruby/object:Gem::Version
282
279
  version: '0'
283
280
  requirements: []
284
- rubygems_version: 3.0.8
281
+ rubyforge_project:
282
+ rubygems_version: 2.7.6
285
283
  signing_key:
286
284
  specification_version: 4
287
285
  summary: IPC components for Rails