restful-capabilities 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (20) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +111 -0
  3. data/bin/razorrisk-microservice-capabilities +57 -0
  4. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/app.rb +306 -0
  5. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/version.rb +43 -0
  6. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities.rb +17 -0
  7. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subject_get.rb +65 -0
  8. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subjects_get.rb +59 -0
  9. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin.rb +159 -0
  10. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_get.rb +65 -0
  11. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_users_get.rb +65 -0
  12. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/groups_get.rb +59 -0
  13. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subject_get.rb +65 -0
  14. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subjects_get.rb +59 -0
  15. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/user_get.rb +65 -0
  16. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/users_get.rb +59 -0
  17. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities.rb +24 -0
  18. data/test/unit/adapters/tc_get_handler_mixin.rb +342 -0
  19. data/test/unit/microservice/tc_app.rb +765 -0
  20. metadata +254 -0
@@ -0,0 +1,159 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Mixin for all Capabilities microservice's get route handlers.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/razor/connectivity/entity_connectors/exceptions'
16
+ require 'razor_risk/razor/connectivity/razor_3/entity_connectors/capabilities_connector'
17
+
18
+ require 'razor_risk/cassini/util/conversion_util'
19
+
20
+ require 'pantheios'
21
+
22
+
23
+ # ##########################################################################
24
+ # modules
25
+
26
+ module RazorRisk
27
+ module Cassini
28
+ module Applications
29
+ module RouteVerbAdaptors
30
+ module Capabilities
31
+
32
+
33
+ # ##########################################################################
34
+ # Get Handler Mixin
35
+
36
+ # This ia a mixin module that provides the implementation for handling a get
37
+ # capabilities request.
38
+ #
39
+ # @note Methods in this module should not be used directly, only as methods
40
+ # on handler classes.
41
+ module GetHandlerMixin
42
+
43
+ include ::RazorRisk::Cassini::Util::ConversionUtil
44
+
45
+ include ::RazorRisk::Razor::Connectivity::EntityConnectors::Exceptions
46
+ include ::RazorRisk::Razor::Connectivity::Razor3::EntityConnectors
47
+
48
+ include ::Pantheios
49
+
50
+ HTTP_VERB = :get
51
+ HTTP_ACCEPTS = %w{
52
+ application/xml
53
+ application/json
54
+ text/xml
55
+ }
56
+ QUERY_PARAMETERS = %w{
57
+ }
58
+ ErrorHeaders = {
59
+ 'Content-Type' => 'text/plain',
60
+ }
61
+
62
+ # Handles a GET capabilities request.
63
+ #
64
+ # @param env [::Hash] The Rack request environment (@see
65
+ # Rack::Request#env).
66
+ # @param params [::Hash] Validated query parameters (@see
67
+ # ValidateQueryParametersMixin#validate_query_parameters)
68
+ # @param request [::Sinatra::Request] The request to be handled.
69
+ # @param response [::Sinatra::Response] The response object that will be
70
+ # returned.
71
+ #
72
+ # @yield [ec] Gives the entity connector to be used to perform the Razor
73
+ # Request.
74
+ # @yieldparam [CapabilitiesConnector] The entity connector.
75
+ # @yieldreturn [RazorRisk::Core::QualifiedResult] The qulified result of
76
+ # the request.
77
+ def handle env, params, request, response, &block
78
+
79
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
80
+
81
+ request_options = settings.request_options
82
+
83
+ cr = get_required_credentials
84
+ rr = settings.razor_requester
85
+ ec = CapabilitiesConnector.new(
86
+ rr,
87
+ credentials: cr,
88
+ **request_options
89
+ )
90
+
91
+ # Send reqest
92
+ begin
93
+ qr = yield(ec)
94
+ rescue ::ArgumentError, ::NameError, ::NoMethodError, ::TypeError => x
95
+ log :failure, "exception (#{x.class}): #{x}"
96
+ raise
97
+ rescue UnexpectedServerResponseException => x
98
+ log :failure, "exception (#{x.class}): #{x}"
99
+ halt 500, ErrorHeaders, "Server Error"
100
+ end
101
+
102
+ log :debug1, "qr(#{qr.class})='#{qr}'"
103
+
104
+ r = qr.result
105
+
106
+ # check result
107
+ unless qr.succeeded?
108
+
109
+ if qr.failure_qualifier.reasons.lookup?('RZ0011')
110
+ r = qr.failure_qualifier.reasons.lookup?('RZ0011')
111
+ reasons = qr.failure_qualifier.reasons.join("\n")
112
+ log :debug1, "failed to retrieve capabilities; #{reasons}"
113
+ halt 404, ErrorHeaders, "#{r.message}: #{r.details}"
114
+ elsif !qr.failure_qualifier.reasons.empty?
115
+ reasons = qr.failure_qualifier.reasons.join("\n")
116
+ log :warning, "Failed to retrieve capabilities; #{reasons}"
117
+ halt 500, ErrorHeaders, 'Server Error'
118
+ elsif r.nil?
119
+ log :debug1, 'failed to retrieve capabilities'
120
+ halt 404, ErrorHeaders, "Capabilities not found"
121
+ else
122
+ log :warning, "Failed to retrieve capabilities for an unknown reason #{r}"
123
+ halt 500, ErrorHeaders, 'Server Error'
124
+ end
125
+ end
126
+
127
+ # return result
128
+ status 200
129
+ if request.accept?('text/xml')
130
+ log :debug1, 'text/xml'
131
+ content_type 'text/xml'
132
+ r.to_s
133
+ elsif request.accept?('application/xml')
134
+ log :debug1, 'application/xml'
135
+ content_type 'application/xml'
136
+ r.to_s
137
+ elsif request.accept?('application/json')
138
+ log :debug1, 'application/json'
139
+ content_type 'application/json'
140
+ convert_XML_to_JSON r, { scheme: :gdata }
141
+ else
142
+ log :violation, "unexpected failure to match given 'Accept' header '#{request.accept}'"
143
+ halt 500, ErrorHeaders, 'No supported Accept types'
144
+ end
145
+ end
146
+ end # class GetHandlerMixin
147
+
148
+ # ##########################################################################
149
+ # modules
150
+
151
+ end # module Portfolios
152
+ end # module RouteVerbAdaptors
153
+ end # module Applications
154
+ end # module Cassini
155
+ end # module RazorRisk
156
+
157
+ # ############################## end of file ############################# #
158
+
159
+
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET group.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # GroupGet
32
+
33
+ class GroupGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ ROUTE_VARIABLES = %w{
38
+ id
39
+ }
40
+
41
+ def handle env, params, request, response
42
+
43
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
44
+
45
+ id = params['id']
46
+
47
+ super do |ec|
48
+ ec.get_group id, indicate_result_by: :qualified_result
49
+ end
50
+ end
51
+ end # class GroupGet
52
+
53
+
54
+ # ##########################################################################
55
+ # module
56
+
57
+ end # module Capabilities
58
+ end # module RouteVerbAdaptors
59
+ end # module Applications
60
+ end # module Cassini
61
+ end # module RazorRisk
62
+
63
+ # ############################## end of file ############################# #
64
+
65
+
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET groups.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # GroupsGet
32
+
33
+ class GroupUsersGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ ROUTE_VARIABLES = %w{
38
+ group_id
39
+ }
40
+
41
+ def handle env, params, request, response
42
+
43
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
44
+
45
+ group_id = params['group_id']
46
+
47
+ super do |ec|
48
+ ec.get_group_users group_id, indicate_result_by: :qualified_result
49
+ end
50
+ end
51
+ end # class GroupsGet
52
+
53
+
54
+ # ##########################################################################
55
+ # module
56
+
57
+ end # module Capabilities
58
+ end # module RouteVerbAdaptors
59
+ end # module Applications
60
+ end # module Cassini
61
+ end # module RazorRisk
62
+
63
+ # ############################## end of file ############################# #
64
+
65
+
@@ -0,0 +1,59 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET groups.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # GroupsGet
32
+
33
+ class GroupsGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ def handle env, params, request, response
38
+
39
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
40
+
41
+ super do |ec|
42
+ ec.get_groups indicate_result_by: :qualified_result
43
+ end
44
+ end
45
+ end # class GroupsGet
46
+
47
+
48
+ # ##########################################################################
49
+ # module
50
+
51
+ end # module Capabilities
52
+ end # module RouteVerbAdaptors
53
+ end # module Applications
54
+ end # module Cassini
55
+ end # module RazorRisk
56
+
57
+ # ############################## end of file ############################# #
58
+
59
+
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET group.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # SubjectGet
32
+
33
+ class SubjectGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ ROUTE_VARIABLES = %w{
38
+ id
39
+ }
40
+
41
+ def handle env, params, request, response
42
+
43
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
44
+
45
+ id = params['id']
46
+
47
+ super do |ec|
48
+ ec.get_subject id, indicate_result_by: :qualified_result
49
+ end
50
+ end
51
+ end # class SubjectGet
52
+
53
+
54
+ # ##########################################################################
55
+ # module
56
+
57
+ end # module Capabilities
58
+ end # module RouteVerbAdaptors
59
+ end # module Applications
60
+ end # module Cassini
61
+ end # module RazorRisk
62
+
63
+ # ############################## end of file ############################# #
64
+
65
+
@@ -0,0 +1,59 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET users.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # SubjectsGet
32
+
33
+ class SubjectsGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ def handle env, params, request, response
38
+
39
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
40
+
41
+ super do |ec|
42
+ ec.get_subjects indicate_result_by: :qualified_result
43
+ end
44
+ end
45
+ end # class SubjectsGet
46
+
47
+
48
+ # ##########################################################################
49
+ # module
50
+
51
+ end # module Capabilities
52
+ end # module RouteVerbAdaptors
53
+ end # module Applications
54
+ end # module Cassini
55
+ end # module RazorRisk
56
+
57
+ # ############################## end of file ############################# #
58
+
59
+
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET group.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # UserGet
32
+
33
+ class UserGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ ROUTE_VARIABLES = %w{
38
+ id
39
+ }
40
+
41
+ def handle env, params, request, response
42
+
43
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
44
+
45
+ id = params['id']
46
+
47
+ super do |ec|
48
+ ec.get_user id, indicate_result_by: :qualified_result
49
+ end
50
+ end
51
+ end # class UserGet
52
+
53
+
54
+ # ##########################################################################
55
+ # module
56
+
57
+ end # module Capabilities
58
+ end # module RouteVerbAdaptors
59
+ end # module Applications
60
+ end # module Cassini
61
+ end # module RazorRisk
62
+
63
+ # ############################## end of file ############################# #
64
+
65
+
@@ -0,0 +1,59 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET users.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # UsersGet
32
+
33
+ class UsersGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ def handle env, params, request, response
38
+
39
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
40
+
41
+ super do |ec|
42
+ ec.get_users indicate_result_by: :qualified_result
43
+ end
44
+ end
45
+ end # class UsersGet
46
+
47
+
48
+ # ##########################################################################
49
+ # module
50
+
51
+ end # module Capabilities
52
+ end # module RouteVerbAdaptors
53
+ end # module Applications
54
+ end # module Cassini
55
+ end # module RazorRisk
56
+
57
+ # ############################## end of file ############################# #
58
+
59
+
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ##########################################################################
8
+
9
+ # ##########################################################
10
+ # requires
11
+
12
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_get'
13
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/groups_get'
14
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/user_get'
15
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/users_get'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_users_get'
17
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/subjects_get'
18
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/subject_get'
19
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subjects_get'
20
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subject_get'
21
+
22
+ # ############################## end of file ############################# #
23
+
24
+