olive_branch 2.1.2 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af62cb65fbea81bf6ad9a11e59412a2b8a834c94
4
- data.tar.gz: 716f051af8d506fb0ebd1d9091c532654209baf6
3
+ metadata.gz: 0a07c5fbe243ac3032362eea45fa6d25c69e407f
4
+ data.tar.gz: 2977031f9cdf6abd823f21974e4647054f73440d
5
5
  SHA512:
6
- metadata.gz: 833e3fb79c0f420ab19feb5b58b5b696671e755ced9d1c52556be334e4f2f0a1345118cede1fb18f1cd77a3c75e9b2a1a097b246362b996d6335649e4ee105a3
7
- data.tar.gz: 775099adb481be8ab774b68e2a8eb1abeb01e7084304d879df953d6616d637701e35f1b15afa3b96ceb3085531f24630041ddf84f4ed11de963367f6ddbb7535
6
+ metadata.gz: c01b70ec3056840cfd42a429a81656372106251dc568fde88cf561796b132d794b62ac75c74c3808a185bfa0d4f4a76771ac558f4d468560d17653216d03776b
7
+ data.tar.gz: b7e9938aec19f96a77d73a3ba64a394cd58e201ac40a5e3036fceecfc3c55b54098bff659aae9df6fb8d8c03bb860ce5b86a0ec330b73482ce52be2a921181c9
data/README.md CHANGED
@@ -9,17 +9,20 @@ This gem lets your API users pass in and receive camelCased or dash-cased keys,
9
9
 
10
10
  1. Add this to your Gemfile and then `bundle install`:
11
11
 
12
- gem "olive_branch"
12
+ ```ruby
13
+ gem "olive_branch"
14
+ ```
13
15
 
14
16
  2. Add this to `config/applcation.rb`:
15
17
 
16
- config.middleware.use OliveBranch::Middleware
18
+ ```ruby
19
+ config.middleware.use OliveBranch::Middleware
20
+ ```
17
21
 
18
22
  ## Use
19
23
 
20
24
  Include a `X-Key-Inflection` header with values of `camel`, `dash`, or `snake` in your JSON API requests.
21
25
 
22
-
23
26
  For more examples, see [our blog post](https://www.viget.com/articles/introducing-olivebranch).
24
27
 
25
28
  ## Optimizations and configuration
@@ -42,14 +45,13 @@ end
42
45
 
43
46
  ...
44
47
 
45
- config.middleware.use OliveBranch::Middleware, camelize: FastCamel.method(:camelize)
46
-
48
+ config.middleware.use OliveBranch::Middleware, camelize: FastCamel.method(:camelize)
47
49
  ```
48
50
 
49
51
  A default inflection can be specified so you don't have to include the `X-Key-Inflection` header on every request.
50
52
 
51
53
  ```ruby
52
- config.middleware.use OliveBranch::Middleware, inflection: 'camel'
54
+ config.middleware.use OliveBranch::Middleware, inflection: 'camel'
53
55
  ```
54
56
 
55
57
  A benchmark of this compared to the standard implementation shows a saving of ~75% rails response times for a complex response payload, or a ~400% improvement, but there is a risk of memory usage ballooning if you have dynamic keys. You can make this method as complex as required, but keep in mind that it will end up being called a _lot_ in a busy app, so it's worth thinking about how to do what you need in the fastest manner possible.
@@ -61,7 +63,9 @@ A benchmark of this compared to the standard implementation shows a saving of ~7
61
63
  It is also possible to include a custom content type check in the same manner
62
64
 
63
65
  ```ruby
64
- config.middleware.use OliveBranch::Middleware, content_type_check: -> (content_type) { content_type == "my/content-type" }
66
+ config.middleware.use OliveBranch::Middleware, content_type_check: -> (content_type) {
67
+ content_type == "my/content-type"
68
+ }
65
69
  ```
66
70
 
67
71
  #### Excluding URLs
@@ -71,13 +75,25 @@ Additionally you can define a custom check by passing a proc
71
75
  For params transforming
72
76
 
73
77
  ```ruby
74
- config.middleware.use OliveBranch::Middleware, exclude_params: -> (env) { env['PATH_INFO'].match(/^\/do_not_transform/) }
78
+ config.middleware.use OliveBranch::Middleware, exclude_params: -> (env) {
79
+ env['PATH_INFO'].match(/^\/do_not_transform/)
80
+ }
75
81
  ```
76
82
 
77
83
  Or response transforming
78
84
 
79
85
  ```ruby
80
- config.middleware.use OliveBranch::Middleware, exclude_response: -> (env) { env['PATH_INFO'].match(/^\/do_not_transform/) }
86
+ config.middleware.use OliveBranch::Middleware, exclude_response: -> (env) {
87
+ env['PATH_INFO'].match(/^\/do_not_transform/)
88
+ }
89
+ ```
90
+
91
+ ## Troubleshooting
92
+
93
+ We've seen a few folks raise issues that inbound transformations are not taking place. This is often due to the fact that OliveBranch, by default, is only transforming keys when a request's Content-Type is `application/json`. If you would like to force inbound transformation on every request, you must define an override for the `content_type_check` functionality:
94
+
95
+ ```ruby
96
+ config.middleware.use OliveBranch::Middleware, content_type_check: -> (content_type) { true }
81
97
  ```
82
98
 
83
99
  * * *
@@ -54,22 +54,26 @@ module OliveBranch
54
54
 
55
55
  def call(env)
56
56
  Transformations.underscore_params(env) unless exclude_params?(env)
57
+ status, headers, response = @app.call(env)
57
58
 
58
- @app.call(env).tap do |_status, headers, response|
59
- next if exclude_response?(env, headers)
59
+ return [status, headers, response] if exclude_response?(env, headers)
60
60
 
61
- response.each do |body|
62
- begin
63
- new_response = MultiJson.load(body)
64
- rescue MultiJson::ParseError
65
- next
66
- end
61
+ new_responses = []
67
62
 
68
- Transformations.transform(new_response, inflection_method(env))
69
-
70
- body.replace(MultiJson.dump(new_response))
63
+ response.each do |body|
64
+ begin
65
+ new_response = MultiJson.load(body)
66
+ rescue MultiJson::ParseError
67
+ new_responses << body
68
+ next
71
69
  end
70
+
71
+ Transformations.transform(new_response, inflection_method(env))
72
+
73
+ new_responses << MultiJson.dump(new_response)
72
74
  end
75
+
76
+ [status, headers, new_responses]
73
77
  end
74
78
 
75
79
  private
@@ -1,3 +1,3 @@
1
1
  module OliveBranch
2
- VERSION = '2.1.2'
2
+ VERSION = '2.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: olive_branch
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eli Fatsi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-01-29 00:00:00.000000000 Z
12
+ date: 2018-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  requirements: []
144
144
  rubyforge_project:
145
- rubygems_version: 2.5.1
145
+ rubygems_version: 2.5.2
146
146
  signing_key:
147
147
  specification_version: 4
148
148
  summary: Handle camel/snake/dash case conversion