mno-enterprise-core 3.0.3 → 3.0.4

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: f86f23ee03e94efd1fe73caa8f9d167f0f7c4e26
4
- data.tar.gz: 8475c78dc8b587d24699376b1b7124d56c18c79b
3
+ metadata.gz: 813c8e1d92349154521dc8890567c5d781cfa6c6
4
+ data.tar.gz: 193b99609bab56ce9e15352ca4b4bd4545785683
5
5
  SHA512:
6
- metadata.gz: 82833934086d69a762e128cbff7bccc713842cbc73aa4d7177fa11d3b8385f0a1bfe2b8a5a36335b4f7c675504e7376f9d14d7e3b3fb8f7707f510c5810be608
7
- data.tar.gz: 6407779f446de1b82fc3e9fb934270e762f96ec967eb916a2a044b0fcc21f4a45606365e2ba337873802ff9c6d7fb67c3a4316891d8cbf5f0c144cd8f2e1b93f
6
+ metadata.gz: 506c85a6be60f669dd1e757f9fc867f8bdd19824b1140434ffb2221ecbe89ff3744c2e37bb2691551d3451d71d1678e1c0a149c07a2530af7e801f2c872f53b8
7
+ data.tar.gz: a5e71645e53acc694ebc7fde9aa497101c449a5e35704b693c1c61c6147db6c586008652183ae574792107da2d5806431b3252ef655408a9eb9248ddaaa4d6a2
@@ -0,0 +1,21 @@
1
+ module Her
2
+ module Middleware
3
+ # This middleware will raise errors based on the response status
4
+ # Same as Faraday::Response::RaiseError, except it will catch specific
5
+ # errors codes rather than everything in 400..600
6
+ class MnoeRaiseError < Faraday::Response::RaiseError
7
+ def on_complete(env)
8
+ case env[:status]
9
+ when 407
10
+ # mimic the behavior that we get with proxy requests with HTTPS
11
+ raise Faraday::Error::ConnectionFailed,
12
+ %(407 "Proxy Authentication Required ")
13
+ when 502..504
14
+ raise Faraday::Error::ConnectionFailed, response_values(env)
15
+ when 401, 500
16
+ raise Faraday::Error::ClientError, response_values(env)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -26,6 +26,9 @@ module Her
26
26
  # Use filter instead of raw parameters
27
27
  def where(params = {})
28
28
  return self if !params || params.empty?
29
+ # If a value is an empty array, it'll be excluded when calling params.to_query, so convert it to nil instead
30
+ params.each { |k, v| params[k] = v.presence if v.is_a?(Array) }
31
+
29
32
  self.params[:filter] ||= {}
30
33
  self.params[:filter].merge!(params)
31
34
  self
@@ -18,6 +18,7 @@ require "her_extension/model/associations/association"
18
18
  require "her_extension/model/associations/association_proxy"
19
19
  require "her_extension/model/associations/has_many_association"
20
20
  require "her_extension/middleware/mnoe_api_v1_parse_json"
21
+ require "her_extension/middleware/mnoe_raise_error"
21
22
  require "faraday_middleware"
22
23
  require "mno_enterprise/engine"
23
24
 
@@ -292,6 +293,9 @@ module MnoEnterprise
292
293
 
293
294
  # Adapter
294
295
  c.use Faraday::Adapter::NetHttpNoProxy
296
+
297
+ # Error Handling
298
+ c.use Her::Middleware::MnoeRaiseError
295
299
  end
296
300
  end
297
301
  end
@@ -124,7 +124,8 @@ module MnoEnterpriseApiTestHelper
124
124
 
125
125
  # Response
126
126
  c.use Her::Middleware::MnoeApiV1ParseJson
127
-
127
+ c.use Her::Middleware::MnoeRaiseError
128
+
128
129
  # Add stubs on the test adapter
129
130
  c.use MnoeFaradayTestAdapter do |receiver|
130
131
  @_stub_list.each do |key,stub|
@@ -1,3 +1,3 @@
1
1
  module MnoEnterprise
2
- VERSION = '3.0.3'
2
+ VERSION = '3.0.4'
3
3
  end
@@ -3,5 +3,19 @@ require 'rails_helper'
3
3
  module MnoEnterprise
4
4
  RSpec.describe Her::Model::Relation do
5
5
  pending "add specs for Her::Model::Relation monkey patch: #{__FILE__}"
6
+
7
+ let(:dummy_class) { Class.new { include Her::Model } }
8
+
9
+ describe '.where' do
10
+ it 'adds the filter to params[:filter]' do
11
+ rel = Her::Model::Relation.new(dummy_class).where('uid.in' => [1, 2], 'foo' => 'bar')
12
+ expect(rel.params[:filter]).to eq('uid.in' => [1, 2], 'foo' => 'bar')
13
+ end
14
+
15
+ it 'replaces empty array values with nil' do
16
+ rel = Her::Model::Relation.new(dummy_class).where('id.in' => [])
17
+ expect(rel.params[:filter]).to eq('id.in' => nil)
18
+ end
19
+ end
6
20
  end
7
21
  end
@@ -2,6 +2,28 @@ require 'rails_helper'
2
2
 
3
3
  module MnoEnterprise
4
4
  RSpec.describe BaseResource, type: :model do
5
+ describe 'Error Handling' do
6
+ class Test < BaseResource; end
7
+
8
+ context 'Connection Errors' do
9
+ ((502..504).to_a<<407).each do |code|
10
+ it "handles #{code} error" do
11
+ api_stub_for(get: "/tests/1", code: code)
12
+ expect { Test.find(1) }.to raise_error(Faraday::ConnectionFailed)
13
+ end
14
+ end
15
+ end
16
+
17
+ context 'Server Errors' do
18
+ [401, 500].each do |code|
19
+ it "handles #{code} error" do
20
+ api_stub_for(get: "/tests/1", code: code)
21
+ expect { Test.find(1) }.to raise_error(Faraday::Error::ClientError)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
5
27
  describe '#cache_key' do
6
28
  context 'for existing record' do
7
29
  let(:user) { build(:user) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mno-enterprise-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 3.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-07-13 00:00:00.000000000 Z
12
+ date: 2016-08-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -445,6 +445,7 @@ files:
445
445
  - lib/generators/mno_enterprise/templates/scripts/upstart/app.conf
446
446
  - lib/her_extension/her_orm_adapter.rb
447
447
  - lib/her_extension/middleware/mnoe_api_v1_parse_json.rb
448
+ - lib/her_extension/middleware/mnoe_raise_error.rb
448
449
  - lib/her_extension/model/associations/association.rb
449
450
  - lib/her_extension/model/associations/association_proxy.rb
450
451
  - lib/her_extension/model/associations/has_many_association.rb