hoodoo 1.9.1 → 1.9.2
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 +8 -8
- data/lib/hoodoo/active/active_record/writer.rb +3 -3
- data/lib/hoodoo/services/middleware/middleware.rb +6 -4
- data/lib/hoodoo/version.rb +1 -1
- data/spec/files/regenerate.rb +37 -0
- data/spec/services/middleware/middleware_spec.rb +33 -5
- data/spec/services/services/application_spec.rb +1 -1
- data/spec/services/services/context_spec.rb +14 -10
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODE5N2QwMWIyMWIxNDgxYTliZmUyODdjZThkZmFlOTFiYzEzYWEyMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGVmODcxY2UxYzNiNTE0NmFlODhhYjhlZjFlZjhiZDA4OGY0MjNkYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmZiODc1NjM5MDYxMzI4NWRmYjEyOTNmNGQyN2YxNmU5MGNlMmQ4NjEzMzZl
|
10
|
+
Y2YzZjAzMjBjZWMxZDgwNTkzN2M1M2M5Y2Y3OWZlYTJhMGM3NTkwY2NmNzgx
|
11
|
+
OGJmODhhOTQxZmJmNGFiMzUyOTI3NGExYmJiYTNhOTM2NGY3YTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODA0YmQ2ZmZjOTgwMGFkZGNhZWVkZTA3MzI5ZjVmZTE2ZTE2ZTVlYWQ1NDJi
|
14
|
+
MGU0MWJhZmU4MmVkMWFmMzMwOWFhNTQwNDRlMjEwYjQ0YTIzOTBhNjgwODIz
|
15
|
+
YWNiODZkN2FhMjc1MjRjYmM1MmNmMDhhMGNjNGVjMTI0NDFkYzg=
|
@@ -85,8 +85,8 @@ module Hoodoo
|
|
85
85
|
# As an instance-based method, the return value and error handling
|
86
86
|
# semantics differ from the class-based counterpart. Instead of
|
87
87
|
# checking "persisted?", check the return value of +persist_in+. This
|
88
|
-
# means you can also use +persist_in+ to save a
|
89
|
-
# now updated record, should you so wish.
|
88
|
+
# means you can also use +persist_in+ to save a previously persisted,
|
89
|
+
# but now updated record, should you so wish.
|
90
90
|
#
|
91
91
|
# def create( context )
|
92
92
|
# attributes = mapping_of( context.request.body )
|
@@ -217,7 +217,7 @@ module Hoodoo
|
|
217
217
|
# must-be-unique fields (within your defined scope) automatically.
|
218
218
|
#
|
219
219
|
# Using this method for data storage instead of plain ActiveRecord
|
220
|
-
# +
|
220
|
+
# +save+ or <tt>save!</tt> will also help your code auto-inherit any
|
221
221
|
# additional future write-related enhancements in Hoodoo should they
|
222
222
|
# arise, without necessarily needing service code changes.
|
223
223
|
#
|
@@ -2637,11 +2637,13 @@ module Hoodoo; module Services
|
|
2637
2637
|
end
|
2638
2638
|
end
|
2639
2639
|
|
2640
|
-
# Flatten
|
2640
|
+
# Flatten remaining sub-arrays and make sure values are unique. Sort
|
2641
|
+
# keys and sort directions are deduplicated intelligently within the
|
2642
|
+
# #process_query_hash method.
|
2641
2643
|
|
2642
2644
|
query_hash.each do | key, value |
|
2643
2645
|
value.flatten!
|
2644
|
-
value.uniq!
|
2646
|
+
value.uniq! unless key == 'sort' || key == 'direction'
|
2645
2647
|
end
|
2646
2648
|
|
2647
2649
|
# For search and filter strings, decode the key/value pairs as a
|
@@ -2720,11 +2722,11 @@ module Hoodoo; module Services
|
|
2720
2722
|
# 0 created asc
|
2721
2723
|
# 1 name desc
|
2722
2724
|
# 2 title
|
2723
|
-
# =>
|
2725
|
+
# => mismatched sort vs direction list length
|
2724
2726
|
#
|
2725
2727
|
# 0 created asc
|
2726
2728
|
# 1 desc
|
2727
|
-
# =>
|
2729
|
+
# => mismatched sort vs direction list length
|
2728
2730
|
|
2729
2731
|
sort_keys = query_hash[ 'sort' ] || [ interface.to_list.default_sort_key ]
|
2730
2732
|
sort_directions = query_hash[ 'direction' ] || []
|
data/lib/hoodoo/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Adapted from https://gist.github.com/nickyp/886884.
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
certd = File.join( File.dirname( __FILE__ ), 'ssl.pem' )
|
7
|
+
keyd = File.join( File.dirname( __FILE__ ), 'ssl.key' )
|
8
|
+
|
9
|
+
key = OpenSSL::PKey::RSA.new(2048)
|
10
|
+
public_key = key.public_key
|
11
|
+
|
12
|
+
subject = "/C=BE/O=127.0.0.1/OU=127.0.0.1/CN=127.0.0.1"
|
13
|
+
|
14
|
+
cert = OpenSSL::X509::Certificate.new
|
15
|
+
cert.subject = cert.issuer = OpenSSL::X509::Name.parse(subject)
|
16
|
+
cert.not_before = Time.now
|
17
|
+
cert.not_after = Time.now + 365 * 24 * 60 * 60 * 99
|
18
|
+
cert.public_key = public_key
|
19
|
+
cert.serial = 0x0
|
20
|
+
cert.version = 2
|
21
|
+
|
22
|
+
ef = OpenSSL::X509::ExtensionFactory.new
|
23
|
+
ef.subject_certificate = cert
|
24
|
+
ef.issuer_certificate = cert
|
25
|
+
cert.extensions = [
|
26
|
+
ef.create_extension("basicConstraints","CA:TRUE", true),
|
27
|
+
ef.create_extension("subjectKeyIdentifier", "hash"),
|
28
|
+
]
|
29
|
+
cert.add_extension ef.create_extension("authorityKeyIdentifier",
|
30
|
+
"keyid:always,issuer:always")
|
31
|
+
|
32
|
+
cert.sign key, OpenSSL::Digest::SHA256.new
|
33
|
+
|
34
|
+
open keyd, 'w' do |io| io.write key.to_pem end
|
35
|
+
open certd, 'w' do |io| io.write cert.to_pem end
|
36
|
+
|
37
|
+
puts "OK"
|
@@ -29,7 +29,8 @@ class RSpecTestServiceStubInterface < Hoodoo::Services::Interface
|
|
29
29
|
endpoint :rspec_test_service_stub, RSpecTestServiceStubImplementation
|
30
30
|
embeds :emb, :embs
|
31
31
|
to_list do
|
32
|
-
sort :extra
|
32
|
+
sort :extra => [:up, :down]
|
33
|
+
sort :conventional => [:asc, :desc]
|
33
34
|
search :foo, :bar
|
34
35
|
filter :baz, :boo
|
35
36
|
end
|
@@ -681,16 +682,43 @@ describe Hoodoo::Services::Middleware do
|
|
681
682
|
expect(context.request.list.sort_data).to eq({'extra'=>'up', 'created_at'=>'desc'})
|
682
683
|
end
|
683
684
|
|
684
|
-
get '/v2/rspec_test_service_stub?sort=extra&sort=created_at&direction=up
|
685
|
+
get '/v2/rspec_test_service_stub?sort=extra&sort=created_at&direction=up&direction=desc', nil, { 'CONTENT_TYPE' => 'application/json; charset=utf-8' }
|
686
|
+
expect(last_response.status).to eq(200)
|
687
|
+
end
|
688
|
+
|
689
|
+
it 'should handle legitimate duplicated sort values (form 1)' do
|
690
|
+
expect_any_instance_of(RSpecTestServiceStubImplementation).to receive(:list).once do | ignored_rspec_mock_instance, context |
|
691
|
+
expect(context.request.list.sort_data).to eq({'conventional' => 'desc', 'extra'=>'up', 'created_at'=>'desc'})
|
692
|
+
end
|
693
|
+
|
694
|
+
get '/v2/rspec_test_service_stub?sort=conventional,extra,created_at&direction=desc,up,desc', nil, { 'CONTENT_TYPE' => 'application/json; charset=utf-8' }
|
695
|
+
expect(last_response.status).to eq(200)
|
696
|
+
end
|
697
|
+
|
698
|
+
it 'should handle legitimate duplicated sort values (form 2)' do
|
699
|
+
expect_any_instance_of(RSpecTestServiceStubImplementation).to receive(:list).once do | ignored_rspec_mock_instance, context |
|
700
|
+
expect(context.request.list.sort_data).to eq({'conventional' => 'desc', 'extra'=>'up', 'created_at'=>'desc'})
|
701
|
+
end
|
702
|
+
|
703
|
+
get '/v2/rspec_test_service_stub?sort=conventional&direction=desc&sort=extra&sort=created_at&direction=up&direction=desc', nil, { 'CONTENT_TYPE' => 'application/json; charset=utf-8' }
|
704
|
+
expect(last_response.status).to eq(200)
|
705
|
+
end
|
706
|
+
|
707
|
+
it 'should handle a mixture of sort forms' do
|
708
|
+
expect_any_instance_of(RSpecTestServiceStubImplementation).to receive(:list).once do | ignored_rspec_mock_instance, context |
|
709
|
+
expect(context.request.list.sort_data).to eq({'conventional' => 'desc', 'extra'=>'up', 'created_at'=>'desc'})
|
710
|
+
end
|
711
|
+
|
712
|
+
get '/v2/rspec_test_service_stub?sort=conventional&direction=desc&sort=extra,created_at&direction=up,desc', nil, { 'CONTENT_TYPE' => 'application/json; charset=utf-8' }
|
685
713
|
expect(last_response.status).to eq(200)
|
686
714
|
end
|
687
715
|
|
688
|
-
it 'should
|
716
|
+
it 'should de-duplicate unnecessarily duplicated sort query parameters' do
|
689
717
|
expect_any_instance_of(RSpecTestServiceStubImplementation).to receive(:list).once do | ignored_rspec_mock_instance, context |
|
690
|
-
expect(context.request.list.sort_data).to eq({'created_at'=>'desc', 'extra'=>'
|
718
|
+
expect(context.request.list.sort_data).to eq({'created_at'=>'desc', 'extra'=>'down', 'conventional' => 'desc'})
|
691
719
|
end
|
692
720
|
|
693
|
-
get '/v2/rspec_test_service_stub?sort=extra,extra&sort=
|
721
|
+
get '/v2/rspec_test_service_stub?sort=created_at,extra,extra&sort=conventional&direction=desc,down,down,desc', nil, { 'CONTENT_TYPE' => 'application/json; charset=utf-8' }
|
694
722
|
expect(last_response.status).to eq(200)
|
695
723
|
end
|
696
724
|
|
@@ -43,7 +43,7 @@ describe Hoodoo::Services::Service do
|
|
43
43
|
|
44
44
|
it 'should correctly report its component classes' do
|
45
45
|
RSpecTestService.comprised_of( RSpecTestInterfaceA,
|
46
|
-
|
46
|
+
RSpecTestInterfaceB )
|
47
47
|
|
48
48
|
expect(RSpecTestService.component_interfaces).to eq([
|
49
49
|
RSpecTestInterfaceA,
|
@@ -1,19 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
end
|
3
|
+
describe Hoodoo::Services::Context do
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
endpoint :rspec_test_service_stub, RSpecTestContextImplementation
|
5
|
+
before :all do
|
6
|
+
Hoodoo::Services::Middleware.flush_services_for_test()
|
9
7
|
end
|
10
|
-
end
|
11
8
|
|
12
|
-
class
|
13
|
-
|
14
|
-
end
|
9
|
+
class RSpecTestContextImplementation < Hoodoo::Services::Implementation
|
10
|
+
end
|
15
11
|
|
16
|
-
|
12
|
+
class RSpecTestContextInterface < Hoodoo::Services::Interface
|
13
|
+
interface :RSpecTestResource do
|
14
|
+
endpoint :rspec_test_service_stub, RSpecTestContextImplementation
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class RSpecTestContext < Hoodoo::Services::Service
|
19
|
+
comprised_of RSpecTestContextInterface
|
20
|
+
end
|
17
21
|
|
18
22
|
it 'should initialise correctly' do
|
19
23
|
ses = Hoodoo::Services::Session.new
|
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: 1.9.
|
4
|
+
version: 1.9.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: 2016-
|
11
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kgio
|
@@ -409,6 +409,7 @@ files:
|
|
409
409
|
- spec/data/types/permissions_spec.rb
|
410
410
|
- spec/errors/error_descriptions_spec.rb
|
411
411
|
- spec/errors/errors_spec.rb
|
412
|
+
- spec/files/regenerate.rb
|
412
413
|
- spec/integration/service_actions_spec.rb
|
413
414
|
- spec/logger/fast_writer_spec.rb
|
414
415
|
- spec/logger/logger_spec.rb
|
@@ -541,6 +542,7 @@ test_files:
|
|
541
542
|
- spec/data/types/permissions_spec.rb
|
542
543
|
- spec/errors/error_descriptions_spec.rb
|
543
544
|
- spec/errors/errors_spec.rb
|
545
|
+
- spec/files/regenerate.rb
|
544
546
|
- spec/integration/service_actions_spec.rb
|
545
547
|
- spec/logger/fast_writer_spec.rb
|
546
548
|
- spec/logger/logger_spec.rb
|