hoodoo 2.12.0 → 2.12.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hoodoo/client/endpoint/endpoints/http.rb +15 -0
- data/lib/hoodoo/presenters/base_dsl.rb +8 -0
- data/lib/hoodoo/presenters/types/hash.rb +6 -3
- data/lib/hoodoo/version.rb +2 -2
- data/spec/client/client_spec.rb +26 -11
- data/spec/presenters/types/hash_spec.rb +88 -0
- data/spec/utilities/utilities_spec.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97098d14a63ca3169567bec32d623914a8e04389c0b26a1c513ccfcd3069e101
|
4
|
+
data.tar.gz: 0d673e879ca169f1dbcecd0d1c03bba5c8ec138f377abe99fc7aeccb3c39713d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a626927fcbd049c377698fe423550c78cd2feaf1225a54281e63dcc16cfa61093f7d03fbadfa01ef9739ca6987e6a1737fc0e29460a0734ee01536311479dd27
|
7
|
+
data.tar.gz: 056a00f6fb6e7d171a3228d20e931f27e4e95aad9c5813dc91999666e1472b2f379964d87edf34e40adb2bfcb0692bd33fa0db091a6244a25c35b57297abde1e
|
@@ -56,7 +56,22 @@ module Hoodoo
|
|
56
56
|
|
57
57
|
# See Hoodoo::Client::Endpoint#show.
|
58
58
|
#
|
59
|
+
# In RESTful HTTP, `GET /resources/#{ident = nil}` gets evaluated
|
60
|
+
# as `GET /resources/`, which is of course interpreted as a #list
|
61
|
+
# request. Since this is undesirable behaviour, the +ident+ must be
|
62
|
+
# populated, and this will return `404 Not Found` if it is not.
|
63
|
+
#
|
59
64
|
def show( ident, query_hash = nil )
|
65
|
+
if ident.nil?
|
66
|
+
data = response_class_for( :show ).new
|
67
|
+
data.platform_errors.add_error(
|
68
|
+
'platform.not_found',
|
69
|
+
'reference' => {entity_name: 'nil identifier given on :show action'}
|
70
|
+
)
|
71
|
+
|
72
|
+
return data
|
73
|
+
end
|
74
|
+
|
60
75
|
d = @description.dup
|
61
76
|
d.action = :show
|
62
77
|
d.ident = ident
|
@@ -747,6 +747,10 @@ module Hoodoo
|
|
747
747
|
# Hoodoo::Presenters::Text
|
748
748
|
# [:uuid]
|
749
749
|
# Hoodoo::Presenters::UUID
|
750
|
+
# [:hash]
|
751
|
+
# Hoodoo::Presenters::Hash
|
752
|
+
# [:object]
|
753
|
+
# Hoodoo::Presenters::Object
|
750
754
|
#
|
751
755
|
def type_option_to_class( type )
|
752
756
|
case type
|
@@ -776,6 +780,10 @@ module Hoodoo
|
|
776
780
|
Hoodoo::Presenters::Text
|
777
781
|
when :uuid
|
778
782
|
Hoodoo::Presenters::UUID
|
783
|
+
when :object
|
784
|
+
Hoodoo::Presenters::Object
|
785
|
+
when :hash
|
786
|
+
Hoodoo::Presenters::Hash
|
779
787
|
else
|
780
788
|
raise "Unsupported 'type' option value of '#{ type }' in Hoodoo::Presenters::BaseDSL"
|
781
789
|
end
|
@@ -58,9 +58,12 @@ module Hoodoo
|
|
58
58
|
end
|
59
59
|
|
60
60
|
@specific = true
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
|
62
|
+
# If an explicit type is given, use that. Otherwise, default to Field
|
63
|
+
# if no block is given, or Object is a block is given.
|
64
|
+
#
|
65
|
+
value_klass = !options[:type].blank? ? type_option_to_class( options.delete( :type ) ) :
|
66
|
+
(block_given? ? Hoodoo::Presenters::Object : Hoodoo::Presenters::Field)
|
64
67
|
|
65
68
|
# If we're defining specific keys and some of those keys have fields
|
66
69
|
# with defaults, we need to merge those up to provide a whole-Hash
|
data/lib/hoodoo/version.rb
CHANGED
@@ -12,11 +12,11 @@ module Hoodoo
|
|
12
12
|
# The Hoodoo gem version. If this changes, be sure to re-run
|
13
13
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
14
14
|
#
|
15
|
-
VERSION = '2.12.
|
15
|
+
VERSION = '2.12.2'
|
16
16
|
|
17
17
|
# The Hoodoo gem date. If this changes, be sure to re-run
|
18
18
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
19
19
|
#
|
20
|
-
DATE = '
|
20
|
+
DATE = '2019-07-11'
|
21
21
|
|
22
22
|
end
|
data/spec/client/client_spec.rb
CHANGED
@@ -388,6 +388,14 @@ describe Hoodoo::Client do
|
|
388
388
|
expect( result.platform_errors.has_errors? ).to eq( false )
|
389
389
|
expect( result[ 'kind' ] ).to eq( 'Errors' )
|
390
390
|
end
|
391
|
+
|
392
|
+
it 'returns a 404 for show(nil)', :wont_create_net_http do
|
393
|
+
result = @endpoint.show( nil )
|
394
|
+
|
395
|
+
expect( result.platform_errors.has_errors? ).to eq( true )
|
396
|
+
expect( result.platform_errors.errors[ 0 ][ 'code' ] ).to eq( 'platform.not_found' )
|
397
|
+
expect( result.platform_errors.errors[ 0 ][ 'reference' ] ).to eq( 'nil identifier given on :show action' )
|
398
|
+
end
|
391
399
|
end
|
392
400
|
|
393
401
|
before :each do
|
@@ -451,6 +459,11 @@ describe Hoodoo::Client do
|
|
451
459
|
end
|
452
460
|
|
453
461
|
context 'and with an HTTP proxy via custom discoverer' do
|
462
|
+
around :each do | example |
|
463
|
+
@example_wont_create_net_http = example.metadata[ :wont_create_net_http ]
|
464
|
+
example.run
|
465
|
+
end
|
466
|
+
|
454
467
|
before :each do
|
455
468
|
base_uri = "http://localhost:#{ @port }"
|
456
469
|
proxy_uri = 'http://foo:bar@proxyhost:1234'
|
@@ -459,17 +472,19 @@ describe Hoodoo::Client do
|
|
459
472
|
proxy_uri: proxy_uri
|
460
473
|
)
|
461
474
|
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
expect(
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
475
|
+
if @example_wont_create_net_http
|
476
|
+
expect( Net::HTTP ).not_to receive( :new )
|
477
|
+
else
|
478
|
+
expect( Net::HTTP ).to receive( :new ).at_least( :once ).and_wrap_original do | original_new, host, port, proxy_host, proxy_port, proxy_user, proxy_pass |
|
479
|
+
expect( host ).to eq( 'localhost' )
|
480
|
+
expect( port ).to eq( @port )
|
481
|
+
expect( proxy_host ).to eq( 'proxyhost' )
|
482
|
+
expect( proxy_port ).to eq( 1234 )
|
483
|
+
expect( proxy_user ).to eq( 'foo' )
|
484
|
+
expect( proxy_pass ).to eq( 'bar' )
|
485
|
+
|
486
|
+
original_new.call( host, port )
|
487
|
+
end
|
473
488
|
end
|
474
489
|
|
475
490
|
set_vars_for(
|
@@ -663,6 +663,94 @@ describe Hoodoo::Presenters::Hash do
|
|
663
663
|
|
664
664
|
############################################################################
|
665
665
|
|
666
|
+
class TestHashKeyWithHashType < Hoodoo::Presenters::Base
|
667
|
+
schema do
|
668
|
+
hash :key_with_hash_type do
|
669
|
+
key :specific_hash, :type => :hash do
|
670
|
+
key :optional_field, required: false
|
671
|
+
key :required_field, required: true
|
672
|
+
end
|
673
|
+
key :generic_hash, :type => :hash do
|
674
|
+
keys :length => 6
|
675
|
+
end
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
|
681
|
+
############################################################################
|
682
|
+
|
683
|
+
context 'specific key with a hash as the type' do
|
684
|
+
context '#render' do
|
685
|
+
it 'renders required fields correctly' do
|
686
|
+
input_data = { 'key_with_hash_type' => {
|
687
|
+
'specific_hash' => {'required_field' => 'foo'}
|
688
|
+
} }
|
689
|
+
expected_data = { 'key_with_hash_type' => {
|
690
|
+
'specific_hash' => {'required_field' => 'foo'}
|
691
|
+
} }
|
692
|
+
|
693
|
+
expect( TestHashKeyWithHashType.render( input_data ) ).to eq( expected_data )
|
694
|
+
end
|
695
|
+
|
696
|
+
it 'renders optional fields correctly' do
|
697
|
+
input_data = { 'key_with_hash_type' => {
|
698
|
+
'specific_hash' => {'required_field' => 'foo', 'optional_field' => 'bar'},
|
699
|
+
'generic_hash' => {'foo' => 'bar', 'somekey' => 'somevalue'}
|
700
|
+
} }
|
701
|
+
expected_data = { 'key_with_hash_type' => {
|
702
|
+
'specific_hash' => {'required_field' => 'foo', 'optional_field' => 'bar'},
|
703
|
+
'generic_hash' => {'foo' => 'bar', 'somekey' => 'somevalue'}
|
704
|
+
} }
|
705
|
+
|
706
|
+
expect( TestHashKeyWithHashType.render( input_data ) ).to eq( expected_data )
|
707
|
+
end
|
708
|
+
end
|
709
|
+
|
710
|
+
context '#validate' do
|
711
|
+
it 'succeeds if the key is optional and absent' do
|
712
|
+
expect( TestHashKeyWithHashType.validate( {} ).errors.size ).to( eql( 0 ) )
|
713
|
+
end
|
714
|
+
|
715
|
+
it 'succeeds if the key is present and its specific required keys are present' do
|
716
|
+
input_data = { 'key_with_hash_type' => {
|
717
|
+
'specific_hash' => {'required_field' => 'foo'}
|
718
|
+
} }
|
719
|
+
expect( TestHashKeyWithHashType.validate( input_data ).errors.size ).to( eql( 0 ) )
|
720
|
+
end
|
721
|
+
|
722
|
+
it 'succeeds if the key is present and its specific required and optional keys are present' do
|
723
|
+
input_data = { 'key_with_hash_type' => {
|
724
|
+
'specific_hash' => {'required_field' => 'foo', 'optional_field' => 'bar'}
|
725
|
+
} }
|
726
|
+
expect( TestHashKeyWithHashType.validate( input_data ).errors.size ).to( eql( 0 ) )
|
727
|
+
end
|
728
|
+
|
729
|
+
it 'fails if the key is present and its specific required keys are missing' do
|
730
|
+
input_data = { 'key_with_hash_type' => {
|
731
|
+
'specific_hash' => {'optional_field' => 'bar'}
|
732
|
+
} }
|
733
|
+
expect( TestHashKeyWithHashType.validate( input_data ).errors.size ).to( eql( 1 ) )
|
734
|
+
end
|
735
|
+
|
736
|
+
it 'succeeds if the key is present and its generic keys are valid' do
|
737
|
+
input_data = { 'key_with_hash_type' => {
|
738
|
+
'generic_hash' => {'foo' => 'bar'}
|
739
|
+
} }
|
740
|
+
expect( TestHashKeyWithHashType.validate( input_data ).errors.size ).to( eql( 0 ) )
|
741
|
+
end
|
742
|
+
|
743
|
+
it 'fails if the key is present and its generic keys are invalid' do
|
744
|
+
input_data = { 'key_with_hash_type' => {
|
745
|
+
'generic_hash' => {'keynametoolong' => 'bar'}
|
746
|
+
} }
|
747
|
+
expect( TestHashKeyWithHashType.validate( input_data ).errors.size ).to( eql( 1 ) )
|
748
|
+
end
|
749
|
+
end
|
750
|
+
end
|
751
|
+
|
752
|
+
############################################################################
|
753
|
+
|
666
754
|
class TestHashGenericKeyPresenterNoValues < Hoodoo::Presenters::Base
|
667
755
|
schema do
|
668
756
|
hash :generic do
|
@@ -678,11 +678,11 @@ describe Hoodoo::Utilities do
|
|
678
678
|
it 'rejects invalid input with an exception' do
|
679
679
|
expect {
|
680
680
|
Hoodoo::Utilities.rationalise_datetime( "hello" )
|
681
|
-
}.to raise_exception
|
681
|
+
}.to raise_exception( /Invalid parameter 'hello'/ )
|
682
682
|
|
683
683
|
expect {
|
684
684
|
Hoodoo::Utilities.rationalise_datetime( Array.new )
|
685
|
-
}.to raise_exception
|
685
|
+
}.to raise_exception( /Invalid parameter '\[\]'/ )
|
686
686
|
end
|
687
687
|
end
|
688
688
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoodoo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.12.
|
4
|
+
version: 2.12.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Loyalty New Zealand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|