restful-riskview 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2ef860dbae91c2be20b03d673ff39e4eda794926
4
+ data.tar.gz: 9dd6335e15d2d1be03518fd5f01d00eaa360240e
5
+ SHA512:
6
+ metadata.gz: 2668646615d323f027c6a3d9d1578ddeed2f24191dc2ba3fffbc77b98be120167fe28c86513ab865b297da8fb6ebff7db75fed372ed7ca7934770252a0d794c8
7
+ data.tar.gz: 5a85feef719778bee488c9ee2b7dc8079ecbb01bcc09b0f2dbd507b225e1c6c08c4d9ae02541b651a0d96bf24ec4d9e05c063704e79aeebc8e0b51d5ea6bd7c1
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Main module/entry file for the RiskView Microservice
7
+ #
8
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
9
+ #
10
+ # ######################################################################## #
11
+
12
+
13
+ # ##########################################################################
14
+ # requires
15
+
16
+ require 'razor_risk/cassini/diagnostics/zeroth_include'
17
+
18
+ require 'razor_risk/cassini/applications/microservices/restful/risk_view'
19
+ require 'razor_risk/cassini/main'
20
+
21
+ # TODO: This needs to be added to cassini/main
22
+ require 'razor_risk/cassini/common/version'
23
+
24
+
25
+ # ##########################################################################
26
+ # includes
27
+
28
+ include ::RazorRisk::Cassini::Applications::Microservices::RESTful
29
+
30
+
31
+ # ##########################################################################
32
+ # constants
33
+
34
+ PROGRAM_VERSION = RiskView::VERSION
35
+
36
+
37
+ # ##########################################################################
38
+ # main section
39
+
40
+ TheApp = RiskView::RiskViewApp
41
+
42
+
43
+ # ############################## end of file ############################# #
44
+
45
+
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
7
+ #
8
+ # ######################################################################## #
9
+
10
+
11
+ # ##########################################################################
12
+ # requires
13
+
14
+ require 'razor_risk/cassini/applications/rest_framework/route_verb_dispatcher'
15
+ require 'razor_risk/cassini/applications/route_verb_adaptors/risk_view'
16
+ require 'razor_risk/cassini/applications/secured_microservice'
17
+ require 'razor_risk/cassini/mixin/razor_response_validator'
18
+
19
+ require 'pantheios'
20
+
21
+ require 'csv'
22
+ require 'json'
23
+
24
+
25
+ # ##########################################################################
26
+ # modules
27
+
28
+ module RazorRisk
29
+ module Cassini
30
+ module Applications
31
+ module Microservices
32
+ module RESTful
33
+ module RiskView
34
+
35
+
36
+ # ##########################################################################
37
+ # includes
38
+
39
+ include ::RazorRisk::Cassini::Applications
40
+
41
+
42
+ # ##########################################################################
43
+ # application
44
+
45
+ # Sinatra Application for the Risk-View Microservice.
46
+ class RiskViewApp < SecuredMicroservice
47
+
48
+ include RouteVerbAdaptors::RiskView
49
+ include RESTFramework::RouteVerbDispatch
50
+ include Cassini::Mixin::RazorResponseValidator
51
+
52
+ include ::Pantheios
53
+
54
+ FULL_DESIGNATION = 'RiskView'
55
+ SHORT_DESIGNATION = 'risk_view'
56
+ SERVICE_TYPE = :microservice
57
+ PROGRAM_FEATURES = {
58
+ has_web_server: true,
59
+ has_host_and_port: true,
60
+ has_razor_connectivity: true,
61
+ authentication: true,
62
+ copyright_year: 2019,
63
+ }
64
+ SUPPORTED_ROUTES = [
65
+ [ '/:domain/:id', :get, 'gets the specified risk-view', ],
66
+ ]
67
+ HTTP_ACCEPTS = %w{
68
+ text/html
69
+ application/json
70
+ application/xml
71
+ text/xml
72
+ text/csv
73
+ text/plain
74
+ text/tab-separated-values
75
+ text/tsv
76
+ }
77
+
78
+ def self.on_init_service options
79
+
80
+ trace ParamNames[ :options ], options
81
+
82
+ raise ArgumentError.new(
83
+ 'missing keyword: razor_requester'
84
+ ) unless options.has_key? :razor_requester
85
+
86
+ request_options = options[:request_options]
87
+
88
+ set :razor_requester, options[:razor_requester]
89
+ set :request_options, request_options
90
+ end
91
+
92
+ private
93
+ def sec
94
+
95
+ return '' if credentials.empty?
96
+ " (for #{credentials.join(':')})"
97
+ end
98
+ public
99
+
100
+ get '/:domain/:id/?' do
101
+
102
+ trace ParamNames[ :request, :params ], request, params
103
+
104
+ dispatch ItemGet
105
+ end
106
+
107
+ get '/' do
108
+
109
+ HTTP_ACCEPTS.each do |accept_type|
110
+
111
+ if request.accept? accept_type
112
+
113
+ content_type accept_type
114
+
115
+ case accept_type
116
+ when 'application/json'
117
+ r = make_JSON_routes SUPPORTED_ROUTES
118
+ when 'application/xml', 'text/xml'
119
+ r = make_XML_routes SUPPORTED_ROUTES
120
+ when 'text/csv'
121
+ r = make_CSV_routes SUPPORTED_ROUTES
122
+ when 'text/html'
123
+ r = make_HTML_routes SUPPORTED_ROUTES
124
+ when 'text/plain'
125
+ r = make_Plain_routes SUPPORTED_ROUTES
126
+ when 'text/tsv', 'text/tab-separated-values'
127
+ r = make_TSV_routes SUPPORTED_ROUTES
128
+ else
129
+ log :violation, "unrecognised accept type '#{accept_type}'"
130
+ halt(
131
+ 500,
132
+ {},
133
+ 'internal server failure'
134
+ )
135
+ end
136
+
137
+ return r
138
+ end
139
+ end
140
+
141
+ halt(
142
+ 406,
143
+ {},
144
+ "supports only the Accept types #{HTTP_ACCEPTS.map do |t|
145
+ %Q<'#{t}'>
146
+ end.join(', ')}"
147
+ )
148
+ end
149
+
150
+ define_catch_all_handlers
151
+
152
+
153
+ # ##########################################################
154
+ # routes helpers
155
+
156
+ # These methods provide a list of supported routes for this microservice.
157
+ # However, when running the WebAPI through the CES these cannot be reached. They
158
+ # are still included here as legacy code and likely should be removed in the
159
+ # future.
160
+
161
+ def make_CSV_routes routes
162
+ CSV.generate do |csv|
163
+ routes.each do |ar|
164
+ csv << ar
165
+ end
166
+ end
167
+ end
168
+
169
+ def make_HTML_routes routes, **options
170
+ routes = routes.map do |ar|
171
+ <<END_OF_tr
172
+ <tr>
173
+ <td>#{ar[0]}</td>
174
+ <td>#{ar[1]}</td>
175
+ <td>#{ar[2]}</td>
176
+ </tr>
177
+ END_OF_tr
178
+ end
179
+
180
+ <<END_OF_html
181
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.we.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
182
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
183
+ <head>
184
+ <title>Razor Risk Web Service API - Internal Microservice - Capabilities</title>
185
+ <meta name="revisit-after" content="24 hours" />
186
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
187
+ </head>
188
+ <body>
189
+ <h1>Routes</h1>
190
+ <table>
191
+ <tr>
192
+ <th>Route</th>
193
+ <th>Verb</th>
194
+ <th>Description</th>
195
+ </tr>
196
+ #{routes.map { |r| r.chomp("\n") }.join("\n")}
197
+ </table>
198
+ </body>
199
+ </html>
200
+ END_OF_html
201
+ end
202
+
203
+ def make_JSON_routes routes, **options
204
+ r = {
205
+ 'routes' => []
206
+ }
207
+ r['routes'] = SUPPORTED_ROUTES.map { |ar| { route: ar[0], verb: ar[1].to_s.upcase, description: ar[2] } }
208
+ r.to_json
209
+ end
210
+
211
+ def make_Plain_routes routes
212
+ make_TSV_routes routes
213
+ end
214
+
215
+ def make_TSV_routes routes
216
+ routes.map { |ar| "#{ar[0]}\t#{ar[1]}\t#{ar[2]}\n" }
217
+ end
218
+
219
+ def make_XML_routes routes
220
+ <<END_OF_xml
221
+ <?xml version="1.0">
222
+ <routes>#{routes.map { |ar| %Q{ <route route="#{ar[0]}" verb="#{ar[1].to_s.upcase}" description="#{ar[2]}"/>}}.join(%Q{\n})}
223
+ </routes>
224
+ END_OF_xml
225
+ end
226
+
227
+ end # class App
228
+
229
+
230
+ # ##########################################################################
231
+ # modules
232
+
233
+ end # module RiskView
234
+ end # module RESTful
235
+ end # module Microservices
236
+ end # module Applications
237
+ end # module Cassini
238
+ end # module RazorRisk
239
+
240
+ # ############################## end of file ############################# #
241
+
242
+
@@ -0,0 +1,50 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Version for RazorRisk.Cassini.Microservices.RESTful.RiskView library
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+ module RazorRisk
12
+ module Cassini
13
+ module Applications
14
+ module Microservices
15
+ module RESTful
16
+
17
+ module RiskView
18
+
19
+ # Current version of the RazorRisk.Cassini.Microservices.RESTful.RiskView library
20
+ VERSION = '0.0.4'
21
+
22
+ private
23
+ VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
24
+ public
25
+ # Major version of the RazorRisk.Cassini.Microservices.RESTful.RiskView library
26
+ VERSION_MAJOR = VERSION_PARTS_[0] # :nodoc:
27
+ # Minor version of the RazorRisk.Cassini.Microservices.RESTful.RiskView library
28
+ VERSION_MINOR = VERSION_PARTS_[1] # :nodoc:
29
+ # Patch version of the RazorRisk.Cassini.Microservices.RESTful.RiskView library
30
+ VERSION_PATCH = VERSION_PARTS_[2] # :nodoc:
31
+ # Commit version of the RazorRisk.Cassini.Microservices.RESTful.RiskView library
32
+ VERSION_COMMIT = VERSION_PARTS_[3] || 0 # :nodoc:
33
+
34
+
35
+ # The description of the framework
36
+ DESCRIPTION = "Razor Risk's Cassini Web-framework's RiskView RESTful microservice"
37
+
38
+ # [DEPRECATED] Instead use +DESCRIPTION+
39
+ FRAMEWORK_DESCRIPTION = DESCRIPTION
40
+ end # module RiskView
41
+
42
+ end # module RESTful
43
+ end # module Microservices
44
+ end # module Applications
45
+ end # module Cassini
46
+ end # module RazorRisk
47
+
48
+ # ############################## end of file ############################# #
49
+
50
+
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ##########################################################################
8
+
9
+
10
+ # ##########################################################
11
+ # requires
12
+
13
+ require 'razor_risk/cassini/applications/microservices/restful/risk_view/version'
14
+ require 'razor_risk/cassini/applications/microservices/restful/risk_view/app'
15
+
16
+
17
+ # ############################## end of file ############################# #
18
+
19
+
@@ -0,0 +1,349 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for RiskView microservice's hierarchy GET 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/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/mixin/razor_response_validator'
17
+ require 'razor_risk/cassini/util/conversion_util'
18
+
19
+ require 'razor_risk/razor/connectivity/razor_3/razor_requester'
20
+ require 'razor_risk/razor/connectivity/razor_3/entity_connectors/portfolios_connector'
21
+
22
+ require 'pantheios'
23
+ require 'xqsr3/conversion/integer_parser'
24
+
25
+
26
+ # ##########################################################################
27
+ # module
28
+
29
+ module RazorRisk
30
+ module Cassini
31
+ module Applications
32
+ module RouteVerbAdaptors
33
+ module RiskView
34
+
35
+
36
+ # ##########################################################################
37
+ # classes
38
+
39
+ class ItemGet < RESTFramework::VerbHandler
40
+
41
+ # ##########################################################
42
+ # includes
43
+
44
+ include Cassini::Mixin::RazorResponseValidator
45
+ include Cassini::Util::ConversionUtil
46
+
47
+ include Razor::Connectivity::EntityConnectors::Exceptions
48
+ include Razor::Connectivity::Razor3
49
+ include Razor::Connectivity::Razor3::EntityConnectors
50
+
51
+ include ::Pantheios
52
+
53
+
54
+ # ##########################################################
55
+ # Constants
56
+
57
+ private
58
+ module Constants
59
+
60
+ VALID_DOMAINS = [ 'Counterparty', 'Country', 'GroupCounterparty' ]
61
+
62
+ FieldXpathFormatString = 'fields/field[@id="%s"]'
63
+
64
+ RPD_YES = 'YES'
65
+ RPD_NO = 'NO'
66
+ end
67
+
68
+ public
69
+ HTTP_VERB = :get
70
+ HTTP_ACCEPTS = [
71
+ 'application/xml',
72
+ 'application/json',
73
+ 'text/xml',
74
+ ]
75
+ QUERY_PARAMETERS = [
76
+ 'page-base',
77
+ 'page-extent',
78
+ 'group',
79
+ ]
80
+ ROUTE_VARIABLES = [
81
+ 'domain',
82
+ 'id',
83
+ ]
84
+
85
+ def initialize *args, **options
86
+
87
+ @ptf_connector_class = options[:ptf_connector_class] || PortfoliosConnector
88
+ @rpd_connector_class = options[:rpd_connector_class] || RiskPointData::DomainsConnector
89
+ super
90
+ end
91
+
92
+ private
93
+ # Finds the ID of the group leader.
94
+ #
95
+ # @param id [String] the ID of the counterpary
96
+ #
97
+ # @return [String] the ID of the group leader if one is found
98
+ # @return [nil] if the group leader is not found
99
+ def find_group_leader_ id
100
+
101
+ domain = 'GroupLimitRelations'
102
+ cr = get_required_credentials
103
+ rr = settings.razor_requester
104
+ ec = @rpd_connector_class.new(rr, credentials: cr)
105
+ qr = ec.get_records domain, indicate_result_by: :qualified_result
106
+
107
+ validate_qualified_razor_response qr
108
+
109
+ unless qr.succeeded?
110
+ log :warning, 'Failed to get GroupLimitRelations'
111
+ error(
112
+ HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR,
113
+ 'Oop! Something went wrong!'
114
+ )
115
+ end
116
+
117
+ qr.result.xpath('//record').each do |r|
118
+ parent = r.at_xpath(
119
+ Constants::FieldXpathFormatString % 'GLParentCounterparty'
120
+ ).text
121
+ child = r.at_xpath(
122
+ Constants::FieldXpathFormatString % 'ChildCpty'
123
+ ).text
124
+ type = r.at_xpath(
125
+ Constants::FieldXpathFormatString % 'GroupLimitType'
126
+ ).text
127
+
128
+ if 'STANDARD' == type and [ parent, child ].include?(id)
129
+ return parent
130
+ end
131
+ end
132
+
133
+ nil
134
+ end
135
+
136
+ def get_limit_types_
137
+
138
+ domain = 'LimitType'
139
+ cr = get_required_credentials
140
+ rr = settings.razor_requester
141
+ ec = @rpd_connector_class.new(rr, credentials: cr)
142
+ qr = ec.get_records domain, indicate_result_by: :qualified_result
143
+
144
+ validate_qualified_razor_response qr
145
+
146
+ unless qr.succeeded?
147
+ log :warning, 'Failed to get LimitType'
148
+ error(
149
+ HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR,
150
+ 'Oops! Something went wrong!'
151
+ )
152
+ end
153
+
154
+ records = qr.result.xpath('//record')
155
+
156
+ limit_types = {
157
+ counterparty: [],
158
+ country: [],
159
+ counterparty_group: [],
160
+ }
161
+
162
+ records.each do |record|
163
+ id = record.at_xpath('@id').value
164
+ counterparty = Constants::RPD_YES == record.at_xpath(
165
+ Constants::FieldXpathFormatString % 'IsCounterpartyRelevant'
166
+ )&.text
167
+ country = Constants::RPD_YES == record.at_xpath(
168
+ Constants::FieldXpathFormatString % 'IsCountryRelevant'
169
+ )&.text
170
+ group = Constants::RPD_YES == record.at_xpath(
171
+ Constants::FieldXpathFormatString % 'IsGroupLimitRelevant'
172
+ )&.text
173
+
174
+ if counterparty
175
+ if group
176
+ limit_types[:counterparty_group] << id
177
+ else
178
+ limit_types[:counterparty] << id
179
+ end
180
+ elsif country
181
+ limit_types[:country] << id
182
+ end
183
+ end
184
+
185
+ limit_types
186
+ end
187
+ public
188
+
189
+
190
+ # ##########################################################
191
+ # Handler
192
+
193
+ def handle env, params, request, response
194
+
195
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
196
+
197
+ domain = check_option(
198
+ params,
199
+ 'domain',
200
+ strip_str_whitespace: true,
201
+ values: Constants::VALID_DOMAINS,
202
+ nothrow: true,
203
+ ) || error(HTTP_STATUS_NAMES::UNPROCESSABLE_ENTITY, 'Invalid domain')
204
+
205
+ id = check_option(
206
+ params,
207
+ 'id',
208
+ strip_str_whitespace: true,
209
+ reject_empty: true,
210
+ nothrow: true,
211
+ ) || error(HTTP_STATUS_NAMES::UNPROCESSABLE_ENTITY, 'Invalid ID')
212
+
213
+ page_base = ::Xqsr3::Conversion::IntegerParser.to_integer(
214
+ params['page-base'] || 0
215
+ ) do |x, arg|
216
+ error(
217
+ HTTP_STATUS_NAMES::UNPROCESSABLE_ENTITY,
218
+ "invalid page specifier: 'page-base'=#{arg}"
219
+ )
220
+ end
221
+ page_extent = ::Xqsr3::Conversion::IntegerParser.to_integer(
222
+ params['page-extent'] || 1000
223
+ ) do |x, arg|
224
+ error(
225
+ HTTP_STATUS_NAMES::UNPROCESSABLE_ENTITY,
226
+ "invalid page specifier: 'page-extent'=#{arg}"
227
+ )
228
+ end
229
+
230
+ if page_base < 0 || page_extent < 1
231
+ error(
232
+ HTTP_STATUS_NAMES::RANGE_NOT_SATISFIABLE,
233
+ "invalid page specifier: 'page-base'=#{page_base}; 'page-extent'=#{page_extent}"
234
+ )
235
+ end
236
+
237
+ group = 0 == (
238
+ /^t(rue)?$/i =~ check_option(
239
+ params,
240
+ 'group',
241
+ strip_str_whitespace: true,
242
+ reject_empty: true,
243
+ nothrow: true,
244
+ )
245
+ )
246
+
247
+ if group
248
+ leader_id = find_group_leader_(id)
249
+ if leader_id
250
+ id = leader_id
251
+ else
252
+ log :debug1, "Counterpary #{id} is not part of a group"
253
+ end
254
+ end
255
+
256
+ limit_types = get_limit_types_
257
+
258
+ # Handle Globals
259
+ risk_view = { domain => id }
260
+ if 'Counterparty' == domain
261
+ if group
262
+ risk_view['LimitType'] = limit_types[:counterparty_group]
263
+ else
264
+ risk_view['LimitType'] = limit_types[:counterparty]
265
+ end
266
+ elsif 'Country' == domain
267
+ risk_view['LimitType'] = limit_types[:country]
268
+ end
269
+
270
+ rq_opts = {
271
+ :page_base => page_base,
272
+ :page_extent => page_extent,
273
+ :risk_view => risk_view,
274
+ :is_group => group,
275
+ }
276
+
277
+ cr = get_required_credentials
278
+ rr = settings.razor_requester
279
+ ec = @ptf_connector_class.new(rr, credentials: cr, **rq_opts)
280
+
281
+ # TODO: allow these exceptions to be handled by the frame work. This
282
+ # will require significant change to the unit tests.
283
+ begin
284
+ qr = ec.get_hierarchy indicate_result_by: :qualified_result
285
+ rescue ::ArgumentError, ::NameError, ::NoMethodError, ::TypeError => x
286
+ log(:violation) { "(#{x.class}): #{x.message}" }
287
+ raise
288
+ rescue RazorRequester::InvalidCredentialsException => x
289
+ log(:failure) { "exception (#{x.class}): #{x}" }
290
+ error HTTP_STATUS_NAMES::UNAUTHORIZED, 'Invalid credentials'
291
+ rescue DataNotFoundException => x
292
+ log(:failure) { "exception (#{x.class}): #{x}" }
293
+ error HTTP_STATUS_NAMES::NOT_FOUND, x.message
294
+ rescue => x
295
+ log(:failure) { "exception (#{x.class}): #{x}" }
296
+ error HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR, x.message
297
+ end
298
+
299
+ log :debug1, "qr(#{qr.class})='#{qr}'"
300
+
301
+ validate_qualified_razor_response qr
302
+
303
+ unless qr.succeeded?
304
+ log :warning, "Failed to retrieve risk-view for '#{id}' for an unkown reason."
305
+ error(
306
+ HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR,
307
+ 'Oops! Something went wrong!'
308
+ )
309
+ end
310
+
311
+ r = qr.result.to_s
312
+
313
+ status HTTP_STATUS_NAMES::OK
314
+
315
+ if request.accept?('application/xml')
316
+ log :debug1, 'application/xml'
317
+ content_type 'application/xml'
318
+ r
319
+ elsif request.accept?('text/xml')
320
+ log :debug1, 'text/xml'
321
+ content_type 'text/xml'
322
+ r
323
+ elsif request.accept?('application/json')
324
+ log :debug1, 'application/json'
325
+ content_type 'application/json'
326
+ convert_XML_to_JSON r, { scheme: :gdata }
327
+ else
328
+ log :violation, "unexpected failure to match given 'Accept' header '#{request.accept}'"
329
+ error(
330
+ HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR,
331
+ 'Oops! Something went wrong!'
332
+ )
333
+ end
334
+ end
335
+ end # class ItemGet
336
+
337
+
338
+ # ##########################################################################
339
+ # module
340
+
341
+ end # module RiskView
342
+ end # module RouteVerbAdaptors
343
+ end # module Applications
344
+ end # module Cassini
345
+ end # module RazorRisk
346
+
347
+ # ############################## end of file ############################# #
348
+
349
+
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ##########################################################################
8
+
9
+
10
+ # ##########################################################
11
+ # requires
12
+
13
+ require 'razor_risk/cassini/applications/route_verb_adaptors/risk_view/item_get'
14
+
15
+
16
+ # ############################## end of file ############################# #
17
+
18
+
metadata ADDED
@@ -0,0 +1,248 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: restful-riskview
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Razor Risk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-30 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.26.24
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.26.24
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: razorrisk-razor-connectivity
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.11.2
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.11.2
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: razorrisk-razor-connectivity-entityconnectors
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 0.26.17
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 0.26.17
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '1.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: razorrisk-razor-connectivity-search
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.1.3
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.3
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '1.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: razorrisk-core-diagnostics-extensions
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.2'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '0.2'
107
+ - !ruby/object:Gem::Dependency
108
+ name: clasp-ruby
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '0.14'
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '0.14'
121
+ - !ruby/object:Gem::Dependency
122
+ name: json
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '1.8'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.8.3
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.8'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.8.3
141
+ - !ruby/object:Gem::Dependency
142
+ name: libclimate-ruby
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '0.10'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '0.10'
155
+ - !ruby/object:Gem::Dependency
156
+ name: nokogiri
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '1.6'
162
+ type: :runtime
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '1.6'
169
+ - !ruby/object:Gem::Dependency
170
+ name: pantheios-ruby
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: 0.20.2
176
+ type: :runtime
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: 0.20.2
183
+ - !ruby/object:Gem::Dependency
184
+ name: sinatra
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: 1.4.8
190
+ type: :runtime
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: 1.4.8
197
+ - !ruby/object:Gem::Dependency
198
+ name: xqsr3
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - "~>"
202
+ - !ruby/object:Gem::Version
203
+ version: '0.30'
204
+ type: :runtime
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - "~>"
209
+ - !ruby/object:Gem::Version
210
+ version: '0.30'
211
+ description: Razor Risk's Cassini Web-framework's RiskView RESTful microservice
212
+ email: operations@razor-risk.com
213
+ executables:
214
+ - razorrisk-microservice-riskview
215
+ extensions: []
216
+ extra_rdoc_files: []
217
+ files:
218
+ - bin/razorrisk-microservice-riskview
219
+ - lib/razor_risk/cassini/applications/microservices/restful/risk_view.rb
220
+ - lib/razor_risk/cassini/applications/microservices/restful/risk_view/app.rb
221
+ - lib/razor_risk/cassini/applications/microservices/restful/risk_view/version.rb
222
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/risk_view.rb
223
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/risk_view/item_get.rb
224
+ homepage: https://razor-risk.com/
225
+ licenses:
226
+ - Nonstandard
227
+ metadata: {}
228
+ post_install_message:
229
+ rdoc_options: []
230
+ require_paths:
231
+ - lib
232
+ required_ruby_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '2.0'
237
+ required_rubygems_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ requirements: []
243
+ rubyforge_project:
244
+ rubygems_version: 2.6.14
245
+ signing_key:
246
+ specification_version: 4
247
+ summary: Razor Risk Cassini Risk-View RESTful microservice
248
+ test_files: []