restful-portfolios 0.13.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,138 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Portfolios microservice's item PUT verb
6
+ #
7
+ # Copyright (c) 2018 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/route_verb_adaptors/utilities/portfolios'
16
+
17
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
18
+
19
+ require 'razor_risk/razor/connectivity/razor_3/entity_connectors/portfolios_connector'
20
+
21
+ require 'razor_risk/core/diagnostics/logger'
22
+
23
+ require 'pantheios'
24
+
25
+ # ##########################################################################
26
+ # module
27
+
28
+ module RazorRisk
29
+ module Cassini
30
+ module Applications
31
+ module RouteVerbAdaptors
32
+ module Portfolios
33
+
34
+ # ##########################################################################
35
+ # classes
36
+
37
+ class ItemPut < RESTFramework::VerbHandler
38
+
39
+ include ::RazorRisk::Cassini::Applications::RouteVerbAdaptors::Utilities::Portfolios
40
+
41
+ include ::RazorRisk::Razor::Connectivity::Razor3::EntityConnectors
42
+
43
+ include ::RazorRisk::Core::Diagnostics::Logger
44
+
45
+ include ::Pantheios
46
+
47
+ HTTP_VERB = :put
48
+
49
+ HTTP_CONTENT_TYPES = %w{ application/xml text/xml }
50
+
51
+ HTTP_ACCEPTS = %w{ application/xml application/json text/xml }
52
+
53
+ ROUTE_VARIABLES = %w{
54
+
55
+ id
56
+ }
57
+
58
+ QUERY_PARAMETERS = []
59
+
60
+ def handle env, params, request, response
61
+
62
+ # trace
63
+
64
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
65
+
66
+ # parameters
67
+
68
+ id = Integer(params['id']) { halt *[ 404, {}, 'invalid identifier for PUT verb - must be an integer' ] }
69
+
70
+ # read request body (XML)
71
+ #
72
+ # NOTE: For this handler, the input is required to be XML, and it
73
+ # is required that the document has a single top-level node
74
+ # 'portfolios'
75
+
76
+ request.body.rewind
77
+
78
+ body_text = request.body.read
79
+ rq_body = nil
80
+
81
+ case request.content_type
82
+ when 'application/xml', 'text/xml'
83
+
84
+ rq_body = ::Nokogiri.XML body_text
85
+ else
86
+
87
+ log :violation, "unexpected content-type '#{request.content_type}'"
88
+ end
89
+
90
+ rq_body = validate_request_body rq_body, require_id: true
91
+
92
+ # get credentials
93
+
94
+ cr = get_required_credentials
95
+
96
+ # get requester
97
+
98
+ rr = settings.razor_requester
99
+
100
+ # get connector
101
+
102
+ ec = PortfoliosConnector.new(rr, credentials: cr)
103
+
104
+ # issue request
105
+
106
+ qr = ec.update_portfolio id, rq_body, indicate_result_by: :qualified_result
107
+
108
+ unless qr.succeeded?
109
+
110
+ log :warning, "failed to put portfolio with id '#{id}': #{qr.failure_qualifier.reasons.join(':')}"
111
+
112
+ if r = qr.failure_qualifier.reasons.lookup?('RZ0011')
113
+
114
+ halt *[ 404, {}, "#{r.message}: #{r.details}" ]
115
+ else
116
+
117
+ halt *[ 422, {}, "failed to put portfolio" ]
118
+ =begin
119
+
120
+ halt *[ 500, {}, qr.failure_qualifier.reasons.join("\n") ]
121
+ =end
122
+ end
123
+ end
124
+ end
125
+ end # class ItemPut
126
+
127
+ # ##########################################################################
128
+ # module
129
+
130
+ end # module Portfolios
131
+ end # module RouteVerbAdaptors
132
+ end # module Applications
133
+ end # module Cassini
134
+ end # module RazorRisk
135
+
136
+ # ############################## end of file ############################# #
137
+
138
+
@@ -0,0 +1,8 @@
1
+
2
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/collection_get'
3
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_delete'
4
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_get'
5
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_post'
6
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_put'
7
+ require 'razor_risk/cassini/applications/route_verb_adaptors/portfolios/hierarchy_get'
8
+
@@ -0,0 +1,85 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Utility functions for Portfolios Adaptors
6
+ #
7
+ # Copyright (c) 2018 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/razor/connectivity/search/parsers/multi_value_conjunction_parser'
16
+
17
+ require 'nokogiri'
18
+
19
+ # ##########################################################################
20
+ # module
21
+
22
+ module RazorRisk
23
+ module Cassini
24
+ module Applications
25
+ module RouteVerbAdaptors
26
+ module Utilities
27
+
28
+ # ##########################################################################
29
+ # classes
30
+
31
+ module Portfolios
32
+
33
+ include ::RazorRisk::Razor::Connectivity::Search::Parsers
34
+
35
+ def validate_request_body rq_body, **options
36
+
37
+ check_parameter rq_body, 'rq_body', types: [ ::Nokogiri::XML::Document, ::Nokogiri::XML::Element ]
38
+
39
+ require_id = options[:require_id]
40
+
41
+ case rq_body.children.count
42
+ when 0
43
+
44
+ halt 400, {'Content-Type' => 'text/plain'}, 'not a valid body'
45
+ when 1
46
+
47
+ x_portfolio = rq_body.at_xpath('./portfolios/portfolio')
48
+
49
+ x_portfolio ||= rq_body.at_xpath('./portfolio')
50
+
51
+ unless x_portfolio
52
+
53
+ halt 422, {'Content-Type' => 'text/plain'}, 'given request does not appear to contain a valid portfolio definition'
54
+ end
55
+
56
+ if require_id
57
+
58
+ porf_id = x_portfolio['id'].to_i
59
+
60
+ unless porf_id > 0
61
+
62
+ halt 422, {'Content-Type' => 'text/plain'}, 'given request does not appear to contain a valid portfolio definition'
63
+ end
64
+ end
65
+
66
+ return rq_body
67
+ else
68
+
69
+ halt 400, {'Content-Type' => 'text/plain'}, 'too many children'
70
+ end
71
+ end
72
+ end # module Portfolios
73
+
74
+ # ##########################################################################
75
+ # module
76
+
77
+ end # module Utilities
78
+ end # module RouteVerbAdaptors
79
+ end # module Applications
80
+ end # module Cassini
81
+ end # module RazorRisk
82
+
83
+ # ############################## end of file ############################# #
84
+
85
+
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: restful-portfolios
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.13.17
5
+ platform: ruby
6
+ authors:
7
+ - Razor Risk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-06-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: razorrisk-cassini-common
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.23'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.23'
27
+ - !ruby/object:Gem::Dependency
28
+ name: razorrisk-razor-connectivity
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.11.2
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '1.0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.11.2
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: razorrisk-razor-connectivity-entityconnectors
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.26.27
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.0'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.26.27
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: razorrisk-razor-connectivity-search
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.1.5
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.1.5
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '1.0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: razorrisk-core-diagnostics-extensions
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '0.2'
94
+ type: :runtime
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '0.2'
101
+ - !ruby/object:Gem::Dependency
102
+ name: activesupport
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '4.0'
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '4.0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: clasp-ruby
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '0.14'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '0.14'
129
+ - !ruby/object:Gem::Dependency
130
+ name: json
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '1.8'
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 1.8.3
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.8'
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 1.8.3
149
+ - !ruby/object:Gem::Dependency
150
+ name: libclimate-ruby
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '0.10'
156
+ type: :runtime
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '0.10'
163
+ - !ruby/object:Gem::Dependency
164
+ name: nokogiri
165
+ requirement: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '1.6'
170
+ type: :runtime
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '1.6'
177
+ - !ruby/object:Gem::Dependency
178
+ name: pantheios-ruby
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: 0.20.2
184
+ type: :runtime
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: 0.20.2
191
+ - !ruby/object:Gem::Dependency
192
+ name: sinatra
193
+ requirement: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: 1.4.8
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: 1.4.8
205
+ - !ruby/object:Gem::Dependency
206
+ name: xqsr3
207
+ requirement: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: '0.30'
212
+ type: :runtime
213
+ prerelease: false
214
+ version_requirements: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - "~>"
217
+ - !ruby/object:Gem::Version
218
+ version: '0.30'
219
+ description: Razor Risk's Cassini Web-framework's Portfolios RESTful microservice
220
+ email: operations@razor-risk.com
221
+ executables:
222
+ - razorrisk-microservice-portfolios
223
+ extensions: []
224
+ extra_rdoc_files: []
225
+ files:
226
+ - bin/razorrisk-microservice-portfolios
227
+ - lib/razor_risk/cassini/applications/microservices/restful/portfolios.rb
228
+ - lib/razor_risk/cassini/applications/microservices/restful/portfolios/version.rb
229
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios.rb
230
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/collection_get.rb
231
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/hierarchy_get.rb
232
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_delete.rb
233
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_get.rb
234
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_post.rb
235
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/portfolios/item_put.rb
236
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/utilities/portfolios.rb
237
+ homepage: https://razor-risk.com/
238
+ licenses:
239
+ - Nonstandard
240
+ metadata: {}
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '2.0'
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ requirements: []
256
+ rubygems_version: 3.2.3
257
+ signing_key:
258
+ specification_version: 4
259
+ summary: Razor Risk Cassini Portfolios RESTful microservice
260
+ test_files: []