carrot_rpc 0.2.3 → 0.3.0
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 +4 -4
- data/CHANGELOG.md +23 -9
- data/README.md +49 -6
- data/carrot_rpc.gemspec +1 -1
- data/lib/carrot_rpc/rpc_server/jsonapi_resources.rb +2 -2
- data/lib/carrot_rpc/tagged_log.rb +2 -2
- data/lib/carrot_rpc/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b2493a7ffe385eee686f6d78b57e7e2240d370
|
4
|
+
data.tar.gz: 6839c61baeafbeb0097bf89badd080d1d05c480d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e611390a7dbc157412efbdd2c472c1358b1a7f6a62ca69e9637f010d46cf4382ec2a7f545e1279189aa4b1dac5426b74f7f30b7fdc326788069669470fd44d88
|
7
|
+
data.tar.gz: c6ccb1a6315f64c9180b938d551a1d38ea174ff95bc2dd48d729efe9dfa162f78069e4f7a10131f96de735bcd35eb4535afd989931684ce37d026686b67e11d9
|
data/CHANGELOG.md
CHANGED
@@ -3,22 +3,25 @@
|
|
3
3
|
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
|
4
4
|
|
5
5
|
- [Changelog](#changelog)
|
6
|
-
- [v0.
|
6
|
+
- [v0.3.0](#v030)
|
7
7
|
- [Enhancements](#enhancements)
|
8
8
|
- [Bug Fixes](#bug-fixes)
|
9
|
+
- [v0.2.3](#v023)
|
10
|
+
- [Enhancements](#enhancements-1)
|
11
|
+
- [Bug Fixes](#bug-fixes-1)
|
9
12
|
- [Upgrading](#upgrading)
|
10
13
|
- [v0.2.1](#v021)
|
11
|
-
- [Bug Fixes](#bug-fixes-1)
|
12
|
-
- [v0.2.0](#v020)
|
13
|
-
- [Enhancements](#enhancements-1)
|
14
14
|
- [Bug Fixes](#bug-fixes-2)
|
15
|
-
|
16
|
-
- [v0.1.2](#v012)
|
15
|
+
- [v0.2.0](#v020)
|
17
16
|
- [Enhancements](#enhancements-2)
|
18
17
|
- [Bug Fixes](#bug-fixes-3)
|
19
|
-
|
18
|
+
- [Incompatible Changes](#incompatible-changes)
|
19
|
+
- [v0.1.2](#v012)
|
20
20
|
- [Enhancements](#enhancements-3)
|
21
21
|
- [Bug Fixes](#bug-fixes-4)
|
22
|
+
- [v0.1.1](#v011)
|
23
|
+
- [Enhancements](#enhancements-4)
|
24
|
+
- [Bug Fixes](#bug-fixes-5)
|
22
25
|
- [Incompatible Changes](#incompatible-changes-1)
|
23
26
|
|
24
27
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
@@ -26,11 +29,22 @@
|
|
26
29
|
# Changelog
|
27
30
|
All significant changes in the project are documented here.
|
28
31
|
|
29
|
-
## v0.
|
32
|
+
## v0.3.0
|
33
|
+
|
34
|
+
### Enhancements
|
35
|
+
* [#11](https://githb.com/C-S-D/carrot_rpc/pull/11) - Add CodeClimate badge to README - [thewalkingtoast](https://github.com/thewalkingtoast)
|
36
|
+
* [#13](https://githb.com/C-S-D/carrot_rpc/pull/13) - Document `queue_name` - [shamil614](https://github.com/shamil614)
|
37
|
+
* [#14](https://githb.com/C-S-D/carrot_rpc/pull/14) - Pass `rpc_request: true` in the `JSONAPI::Request` `context`, so resources can differentiate between API and RPC calls - [shamil614](https://github.com/shamil614)
|
30
38
|
|
39
|
+
### Bug Fixes
|
40
|
+
* [#12](https://githb.com/C-S-D/carrot_rpc/pull/12) - Pass `request` to `render_errors` when handling exceptions in `CarrotRpc::RpcServer::JSONAPIResources` - [shamil614](https://github.com/shamil614)
|
41
|
+
* [#15](https://githb.com/C-S-D/carrot_rpc/pull/15) - Fix argument error bug when passing block to `CarrotRpc::TaggedLog` methods by allowing either a message or a block like standard `Logger` interface - [shamil614](https://github.com/shamil614)
|
42
|
+
* [#17](https://githb.com/C-S-D/carrot_rpc/pull/17) - New rubocop versions add new cops or deprecate old config settings, so it is not safe to have `"rubocop"` without a version in the gemspec. - [KronicDeth](http://github.com/kronicdeth)
|
43
|
+
|
44
|
+
## v0.2.3
|
31
45
|
|
32
46
|
### Enhancements
|
33
|
-
* [#9](https://github.com/C-S-D/carrot_rpc/pull/9) - [KronicDeth](http://github.com/
|
47
|
+
* [#9](https://github.com/C-S-D/carrot_rpc/pull/9) - [KronicDeth](http://github.com/kronicdeth)
|
34
48
|
* `CarrotRpc::RpcServer` subclasses can `include CarrotRpc::RpcServer::JSONAPIResources` to get
|
35
49
|
[`JSONAPI::ActsAsResourceController`](https://github.com/cerebris/jsonapi-resources/blob/8e85d68dfbaf9181344c7618b0b29b4cfd362034/lib/jsonapi/acts_as_resource_controller.rb)
|
36
50
|
helper methods for processing JSONAPI requests in server methods.
|
data/README.md
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
An opinionated approach to doing Remote Procedure Call (RPC) with RabbitMQ and the bunny gem. CarrotRpc serves as a way to streamline the RPC workflow so developers can focus on the implementation and not the plumbing when working with RabbitMQ.
|
21
21
|
|
22
|
+
[](https://codeclimate.com/github/C-S-D/carrot_rpc)
|
22
23
|
[](https://circleci.com/gh/C-S-D/carrot_rpc)
|
23
24
|
|
24
25
|
## Installation
|
@@ -42,7 +43,7 @@ There's two modes for CarrotRpc: server and client. The server is run via comman
|
|
42
43
|
### Server
|
43
44
|
The server is configured via command line and run in it's own process.
|
44
45
|
|
45
|
-
Carrot is easy to run via command line:
|
46
|
+
Carrot is easy to run via command line:
|
46
47
|
```bash
|
47
48
|
carrot_rpc
|
48
49
|
```
|
@@ -75,15 +76,15 @@ Clients are configured by initializing `CarrotRpc::Configuration`. The most comm
|
|
75
76
|
|
76
77
|
```ruby
|
77
78
|
CarrotRpc.configure do |config|
|
78
|
-
# Required on the client to connect to RabbitMQ.
|
79
|
+
# Required on the client to connect to RabbitMQ.
|
79
80
|
# Bunny defaults to connecting to ENV['RABBITMQ_URL']. See Bunny docs.
|
80
81
|
config.bunny = Bunny.new.start
|
81
82
|
# Set the log level. Ruby Logger Docs http://ruby-doc.org/stdlib-2.2.0/libdoc/logger/rdoc/Logger.html
|
82
83
|
config.loglevel = Logger::INFO
|
83
|
-
# Create a new logger or use the Rails logger.
|
84
|
+
# Create a new logger or use the Rails logger.
|
84
85
|
# When using Rails, use a tagged log to make it easier to track RPC.
|
85
86
|
config.logger = CarrotRpc::TaggedLog.new(logger: Rails.logger, tags: ["Carrot RPC Client"])
|
86
|
-
|
87
|
+
|
87
88
|
# Don't use. Server implementation only. The values below are set via CLI:
|
88
89
|
# config.pidfile = nil
|
89
90
|
# config.runloop_sleep = 0
|
@@ -93,12 +94,14 @@ end
|
|
93
94
|
|
94
95
|
## Usage
|
95
96
|
### Writing Servers
|
96
|
-
Carrot CLI will look for your servers in `app/servers` directory. This directory should not be autoloaded by the host application.
|
97
|
+
Carrot CLI will look for your servers in `app/servers` directory. This directory should not be autoloaded by the host application. Very important to declare the name of the queue with `queue_name`. The name must be the same as what's implemented in the `Client`.
|
97
98
|
|
98
99
|
|
99
100
|
Example Server: `app/servers/car_server.rb`
|
100
101
|
```ruby
|
101
102
|
class CarServer < CarrotRpc::RpcServer
|
103
|
+
queue_name "car_queue"
|
104
|
+
|
102
105
|
def show(params)
|
103
106
|
# ...do something
|
104
107
|
Car.find(params[:id]).to_json
|
@@ -127,11 +130,13 @@ end
|
|
127
130
|
```
|
128
131
|
|
129
132
|
### Writing Clients
|
130
|
-
Clients are not run in the CLI, and are typlically invoked during a request / response lifecycle in a web application. In the case of Rails, Clients would most likely be used in a controller action. Clients should be written in the `app/clients` directory of the host application, and should be autoloaded by Rails.
|
133
|
+
Clients are not run in the CLI, and are typlically invoked during a request / response lifecycle in a web application. In the case of Rails, Clients would most likely be used in a controller action. Clients should be written in the `app/clients` directory of the host application, and should be autoloaded by Rails. The name of the queue to send messages to must be declared with `queue_name`.
|
131
134
|
|
132
135
|
Example Client: `app/clients/cars_client.rb`
|
133
136
|
```ruby
|
134
137
|
class CarClient < CarrotRpc::RpcClient
|
138
|
+
queue_name "car_queue"
|
139
|
+
|
135
140
|
# By default RpcClient defines the following Railsy inspired methods:
|
136
141
|
# def show(params)
|
137
142
|
# def index(params)
|
@@ -147,6 +152,8 @@ Example Client: `app/clients/cars_client.rb`
|
|
147
152
|
Example Rails Controller:
|
148
153
|
```ruby
|
149
154
|
class CarsController < ApplicationController
|
155
|
+
queue_name "car_queue"
|
156
|
+
|
150
157
|
def show
|
151
158
|
car_client = CarClient.new
|
152
159
|
car_client.start
|
@@ -157,6 +164,42 @@ class CarsController < ApplicationController
|
|
157
164
|
end
|
158
165
|
```
|
159
166
|
|
167
|
+
### Support for JSONAPI::Resources
|
168
|
+
In the case that you're writing an application that uses the `jsonapi-resources` gem and you want the `RpcServer` to have the same functionality, then we got you covered. All you need to do is import a few modules. See [jsonapi-resources](https://github.com/cerebris/jsonapi-resources) for details on how to implement resources for your models.
|
169
|
+
|
170
|
+
Example Server with JSONAPI functionality:
|
171
|
+
```ruby
|
172
|
+
class CarServer < CarrotRpc::RpcServer
|
173
|
+
extend CarrotRpc::RpcServer::JSONAPIResources::Actions
|
174
|
+
include CarrotRpc::RpcServer::JSONAPIResources
|
175
|
+
|
176
|
+
# declare the actions to enable
|
177
|
+
actions: :create, :destroy, :index, :show, :update
|
178
|
+
|
179
|
+
# Context so it can build urls
|
180
|
+
def base_url
|
181
|
+
"http://foo.com"
|
182
|
+
end
|
183
|
+
|
184
|
+
# Context to find the resource and create links.
|
185
|
+
def controller
|
186
|
+
"api/cars"
|
187
|
+
end
|
188
|
+
|
189
|
+
# JSONAPI::Resource example: `app/resources/car_resource.rb`
|
190
|
+
def resource_klass
|
191
|
+
CarResource
|
192
|
+
end
|
193
|
+
|
194
|
+
queue_name "car_queue"
|
195
|
+
|
196
|
+
def show(params)
|
197
|
+
# ...do something
|
198
|
+
Car.find(params[:id]).to_json
|
199
|
+
end
|
200
|
+
end
|
201
|
+
```
|
202
|
+
|
160
203
|
## Development
|
161
204
|
|
162
205
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/carrot_rpc.gemspec
CHANGED
@@ -43,7 +43,7 @@ Gem::Specification.new do |spec|
|
|
43
43
|
# Unit test framework
|
44
44
|
spec.add_development_dependency "rspec"
|
45
45
|
# Style-checker
|
46
|
-
spec.add_development_dependency "rubocop"
|
46
|
+
spec.add_development_dependency "rubocop", "~> 0.36.0"
|
47
47
|
|
48
48
|
spec.required_ruby_version = "~> 2.2"
|
49
49
|
end
|
@@ -77,7 +77,7 @@ module CarrotRpc::RpcServer::JSONAPIResources
|
|
77
77
|
logger.error { # rubocop:disable Style/BlockDelimiters
|
78
78
|
"Internal Server Error: #{exception.message} #{exception.backtrace.join("\n")}"
|
79
79
|
}
|
80
|
-
render_errors(internal_server_error.errors)
|
80
|
+
render_errors(internal_server_error.errors, request: request)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -101,7 +101,7 @@ module CarrotRpc::RpcServer::JSONAPIResources
|
|
101
101
|
def process_request_params(params) # rubocop:disable Metrics/MethodLength
|
102
102
|
request = JSONAPI::Request.new(
|
103
103
|
params,
|
104
|
-
context: {},
|
104
|
+
context: { rpc_request: true },
|
105
105
|
key_formatter: key_formatter,
|
106
106
|
server_error_callbacks: []
|
107
107
|
)
|
@@ -17,8 +17,8 @@ class CarrotRpc::TaggedLog
|
|
17
17
|
|
18
18
|
# Dyanmically define logger methods with a tagged reference. Makes filtering of logs possible.
|
19
19
|
%i(debug info warn error fatal unknown).each do |level|
|
20
|
-
define_method(level) do |msg|
|
21
|
-
logger.tagged(tags) { logger.send(level, msg) }
|
20
|
+
define_method(level) do |msg = nil, &block|
|
21
|
+
logger.tagged(tags) { logger.send(level, msg || block.call) }
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/carrot_rpc/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrot_rpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Hamilton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -99,16 +99,16 @@ dependencies:
|
|
99
99
|
name: rubocop
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
104
|
+
version: 0.36.0
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - "
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
111
|
+
version: 0.36.0
|
112
112
|
description: Streamlined approach to setting up RPC over RabbitMQ.
|
113
113
|
email:
|
114
114
|
- shamil614@gmail.com
|