restful-portfolios 0.13.17

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.
@@ -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: []