restful-externalfacilities 0.0.1
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 +7 -0
- data/Rakefile +111 -0
- data/bin/razorrisk-microservice-externalfacilities +57 -0
- data/lib/razor_risk/cassini/applications/microservices/restful/externalfacilities/app.rb +244 -0
- data/lib/razor_risk/cassini/applications/microservices/restful/externalfacilities/version.rb +43 -0
- data/lib/razor_risk/cassini/applications/microservices/restful/externalfacilities.rb +17 -0
- data/lib/razor_risk/cassini/applications/route_verb_adaptors/externalfacilities/externalfacilities_get.rb +59 -0
- data/lib/razor_risk/cassini/applications/route_verb_adaptors/externalfacilities.rb +16 -0
- data/test/unit/microservice/tc_app.rb +381 -0
- metadata +243 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 712e64b4db1d45bb15f239e308c5e5874c26d5c561e3c2f0062927c75b187d4d
|
4
|
+
data.tar.gz: fe0378c2bfa05e2273a79d000d65a17aa1af0ea87281d7143ecbf223694c2ee4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 26afb94efa10f29750bde7d5c0c20305839d004c806eeac68ab409cbdb2e6abca5b2e715aec8723352392f8aa073f41438f2b63b8eb3fc1a288367e867caf0f7
|
7
|
+
data.tar.gz: 19709dd1afaa2183171edac42a5a12f140adb87c0547d5d447cdf1cdd9a8a24cbef58ab0c58dad30eb11592e55f87a7d347996a1115776520a0a43b7510afa84
|
data/Rakefile
ADDED
@@ -0,0 +1,111 @@
|
|
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
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
11
|
+
|
12
|
+
|
13
|
+
# ##########################################################
|
14
|
+
# bundler
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'bundler/setup'
|
18
|
+
|
19
|
+
|
20
|
+
# ######################################################################## #
|
21
|
+
# requires
|
22
|
+
|
23
|
+
require 'razor_risk/razor/control/rake_helpers/diagnostic_tasks'
|
24
|
+
require 'razor_risk/razor/control/rake_helpers/gem_tasks'
|
25
|
+
require 'razor_risk/razor/control/rake_helpers/task_helpers'
|
26
|
+
|
27
|
+
require 'rake'
|
28
|
+
require 'rake/clean'
|
29
|
+
|
30
|
+
|
31
|
+
# ##########################################################
|
32
|
+
# includes
|
33
|
+
|
34
|
+
include ::RazorRisk::Razor::Control
|
35
|
+
include ::Pantheios
|
36
|
+
|
37
|
+
|
38
|
+
# ##########################################################
|
39
|
+
# Constants
|
40
|
+
|
41
|
+
Spec = ::Gem::Specification.load(Dir['*.gemspec'].first)
|
42
|
+
LogDir = 'log'
|
43
|
+
LogThresholds = [ :informational, :informational ]
|
44
|
+
|
45
|
+
|
46
|
+
# ##########################################################
|
47
|
+
# clean/clobber
|
48
|
+
|
49
|
+
Dir[
|
50
|
+
'log',
|
51
|
+
'doc',
|
52
|
+
'test/reports',
|
53
|
+
].each { |f| CLEAN << f }
|
54
|
+
Dir[
|
55
|
+
'.bundle',
|
56
|
+
'vendor',
|
57
|
+
'GEM_HOME',
|
58
|
+
'*.gem',
|
59
|
+
'*.zip',
|
60
|
+
].each { |f| CLOBBER << f }
|
61
|
+
|
62
|
+
|
63
|
+
# ##########################################################
|
64
|
+
# Tasks
|
65
|
+
|
66
|
+
desc 'Run tests'
|
67
|
+
task :test => [ :'gem:unit_test' ]
|
68
|
+
|
69
|
+
desc 'Build zip'
|
70
|
+
task :build_zip, [ :path ] do |task, args|
|
71
|
+
|
72
|
+
trace ParamNames[ :task, :args ], task, args
|
73
|
+
|
74
|
+
`build_zip.cmd #{args[:path]}`
|
75
|
+
end
|
76
|
+
|
77
|
+
desc 'Build gem'
|
78
|
+
task :build_gem, [ :path ] => :'gem:build'
|
79
|
+
|
80
|
+
desc 'Builds the Razor EntityConnector Gem'
|
81
|
+
task :build, [ :path ] => [
|
82
|
+
:build_gem,
|
83
|
+
:build_zip,
|
84
|
+
]
|
85
|
+
|
86
|
+
desc 'Push the gem to the gem server.'
|
87
|
+
task :deploy => :'gem:push'
|
88
|
+
|
89
|
+
|
90
|
+
# ##########################################################
|
91
|
+
# Hooks
|
92
|
+
|
93
|
+
task :default do
|
94
|
+
puts 'Run \'bundler exec rake --tasks\' to see available tasks'
|
95
|
+
end
|
96
|
+
|
97
|
+
task :first do
|
98
|
+
::Rake::Task[:'diagnostics:init'].execute(
|
99
|
+
name: Spec.name,
|
100
|
+
version: Spec.version.to_s,
|
101
|
+
directory: LogDir,
|
102
|
+
thresholds: LogThresholds,
|
103
|
+
)
|
104
|
+
end
|
105
|
+
|
106
|
+
RakeHelpers::TaskHelpers.add_hooks
|
107
|
+
|
108
|
+
|
109
|
+
# ############################## end of file ############################# #
|
110
|
+
|
111
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
# ######################################################################## #
|
5
|
+
#
|
6
|
+
# Main module/entry file for the External Facilities Microservice
|
7
|
+
#
|
8
|
+
# Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
|
9
|
+
#
|
10
|
+
# ######################################################################## #
|
11
|
+
|
12
|
+
# ##########################################################################
|
13
|
+
# requires
|
14
|
+
|
15
|
+
require 'razor_risk/cassini/diagnostics/zeroth_include'
|
16
|
+
|
17
|
+
require 'razor_risk/cassini/applications/microservices/restful/externalfacilities'
|
18
|
+
require 'razor_risk/cassini/main'
|
19
|
+
|
20
|
+
# Requires for compatibility check
|
21
|
+
require 'razor_risk/cassini/util/version_util'
|
22
|
+
require 'razor_risk/cassini/common/version'
|
23
|
+
require 'razor_risk/razor/connectivity/version'
|
24
|
+
require 'xqsr3/version'
|
25
|
+
|
26
|
+
|
27
|
+
# ##########################################################################
|
28
|
+
# includes
|
29
|
+
|
30
|
+
include ::RazorRisk::Cassini::Applications::Microservices::RESTful
|
31
|
+
include ::RazorRisk::Cassini::Util::VersionUtil
|
32
|
+
|
33
|
+
|
34
|
+
# ##########################################################################
|
35
|
+
# constants
|
36
|
+
|
37
|
+
PROGRAM_VERSION = ExternalFacilities::VERSION
|
38
|
+
|
39
|
+
|
40
|
+
# ##########################################################################
|
41
|
+
# compatibility checks
|
42
|
+
|
43
|
+
check_version_compatibility ::RazorRisk::Cassini::Common, [ 0, 21 ], 'RazorRisk.Cassini.Common'
|
44
|
+
check_version_compatibility ::RazorRisk::Razor::Connectivity, [ 0, 11, 2 ], 'RazorRisk.Razor.Connectivity'
|
45
|
+
check_version_compatibility ::LibCLImate, '0.10'
|
46
|
+
check_version_compatibility ::Pantheios, '0.20'
|
47
|
+
check_version_compatibility ::Xqsr3::VERSION, '0.30'
|
48
|
+
|
49
|
+
|
50
|
+
# ##########################################################################
|
51
|
+
# main section
|
52
|
+
|
53
|
+
TheApp = ExternalFacilities::CapabilitiesApp
|
54
|
+
|
55
|
+
# ############################## end of file ############################# #
|
56
|
+
|
57
|
+
|
@@ -0,0 +1,244 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# ######################################################################## #
|
4
|
+
#
|
5
|
+
# Sinatra App for ExternalFacilities microservice.
|
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/route_verb_dispatcher'
|
16
|
+
require 'razor_risk/cassini/applications/route_verb_adaptors/externalfacilities'
|
17
|
+
require 'razor_risk/cassini/applications/secured_microservice'
|
18
|
+
require 'razor_risk/core/diagnostics/logger'
|
19
|
+
|
20
|
+
require 'pantheios'
|
21
|
+
|
22
|
+
require 'csv'
|
23
|
+
require 'json'
|
24
|
+
|
25
|
+
|
26
|
+
# ##########################################################################
|
27
|
+
# modules
|
28
|
+
|
29
|
+
module RazorRisk
|
30
|
+
module Cassini
|
31
|
+
module Applications
|
32
|
+
module Microservices
|
33
|
+
module RESTful
|
34
|
+
module ExternalFacilities
|
35
|
+
|
36
|
+
|
37
|
+
# ##########################################################################
|
38
|
+
# includes
|
39
|
+
|
40
|
+
include ::RazorRisk::Cassini::Applications
|
41
|
+
|
42
|
+
|
43
|
+
# ##########################################################################
|
44
|
+
# application
|
45
|
+
|
46
|
+
# Sinatra Application for the ExternalFacilities Microservice.
|
47
|
+
class ExternalFacilitiesApp < SecuredMicroservice
|
48
|
+
|
49
|
+
include RouteVerbAdaptors::ExternalFacilities
|
50
|
+
include RESTFramework::RouteVerbDispatch
|
51
|
+
|
52
|
+
include ::Pantheios
|
53
|
+
include ::RazorRisk::Core::Diagnostics::Logger
|
54
|
+
|
55
|
+
FULL_DESIGNATION = 'ExternalFacilities'
|
56
|
+
SHORT_DESIGNATION = 'externalfacilities'
|
57
|
+
SERVICE_TYPE = :microservice
|
58
|
+
PROGRAM_FEATURES = {
|
59
|
+
has_web_server: true,
|
60
|
+
has_host_and_port: true,
|
61
|
+
has_razor_connectivity: true,
|
62
|
+
authentication: :with_credentials_algorithm,
|
63
|
+
copyright_year: 2019,
|
64
|
+
}
|
65
|
+
SUPPORTED_ROUTES = [
|
66
|
+
[ '/externalfacilities/?', :get, 'Get the external facilities.' ],
|
67
|
+
]
|
68
|
+
HTTP_ACCEPTS = %w{
|
69
|
+
text/html
|
70
|
+
application/json
|
71
|
+
application/xml
|
72
|
+
text/xml
|
73
|
+
text/csv
|
74
|
+
text/plain
|
75
|
+
text/tab-separated-values
|
76
|
+
text/tsv
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
def self.on_init_service options
|
81
|
+
|
82
|
+
trace ParamNames[ :options ], options
|
83
|
+
|
84
|
+
raise ArgumentError.new(
|
85
|
+
'missing keyword: razor_requester'
|
86
|
+
) unless options.has_key? :razor_requester
|
87
|
+
|
88
|
+
request_options = options[:request_options] || {
|
89
|
+
validate: true
|
90
|
+
}
|
91
|
+
|
92
|
+
set :razor_requester, options[:razor_requester]
|
93
|
+
set :request_options, request_options
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
def sec
|
98
|
+
return '' if credentials.empty?
|
99
|
+
" (for #{credentials.join(':')})"
|
100
|
+
end
|
101
|
+
public
|
102
|
+
|
103
|
+
|
104
|
+
# ##########################################################
|
105
|
+
# routes
|
106
|
+
|
107
|
+
get '/externalfacilities/:id/?' do
|
108
|
+
|
109
|
+
trace ParamNames[ :request, :params ], request, params
|
110
|
+
|
111
|
+
dispatch ExternalFacilitiesSet
|
112
|
+
end
|
113
|
+
|
114
|
+
get '/' do
|
115
|
+
|
116
|
+
HTTP_ACCEPTS.each do |accept_type|
|
117
|
+
|
118
|
+
if request.accept? accept_type
|
119
|
+
|
120
|
+
content_type accept_type
|
121
|
+
|
122
|
+
case accept_type
|
123
|
+
when 'application/json'
|
124
|
+
r = make_JSON_routes SUPPORTED_ROUTES
|
125
|
+
when 'application/xml', 'text/xml'
|
126
|
+
r = make_XML_routes SUPPORTED_ROUTES
|
127
|
+
when 'text/csv'
|
128
|
+
r = make_CSV_routes SUPPORTED_ROUTES
|
129
|
+
when 'text/html'
|
130
|
+
r = make_HTML_routes SUPPORTED_ROUTES
|
131
|
+
when 'text/plain'
|
132
|
+
r = make_Plain_routes SUPPORTED_ROUTES
|
133
|
+
when 'text/tsv', 'text/tab-separated-values'
|
134
|
+
r = make_TSV_routes SUPPORTED_ROUTES
|
135
|
+
else
|
136
|
+
log :violation, "unrecognised accept type '#{accept_type}'"
|
137
|
+
halt(
|
138
|
+
500,
|
139
|
+
{},
|
140
|
+
'internal server failure'
|
141
|
+
)
|
142
|
+
end
|
143
|
+
|
144
|
+
return r
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
halt(
|
149
|
+
406,
|
150
|
+
{},
|
151
|
+
"supports only the Accept types #{HTTP_ACCEPTS.map do |t|
|
152
|
+
%Q<'#{t}'>
|
153
|
+
end.join(', ')}"
|
154
|
+
)
|
155
|
+
end
|
156
|
+
|
157
|
+
define_catch_all_handlers
|
158
|
+
|
159
|
+
|
160
|
+
# ##########################################################
|
161
|
+
# routes helpers
|
162
|
+
|
163
|
+
def make_CSV_routes routes
|
164
|
+
CSV.generate do |csv|
|
165
|
+
routes.each do |ar|
|
166
|
+
csv << ar
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def make_HTML_routes routes, **options
|
172
|
+
routes = routes.map do |ar|
|
173
|
+
<<END_OF_tr
|
174
|
+
<tr>
|
175
|
+
<td>#{ar[0]}</td>
|
176
|
+
<td>#{ar[1]}</td>
|
177
|
+
<td>#{ar[2]}</td>
|
178
|
+
</tr>
|
179
|
+
END_OF_tr
|
180
|
+
end
|
181
|
+
|
182
|
+
<<END_OF_html
|
183
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.we.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
184
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
185
|
+
<head>
|
186
|
+
<title>Razor Risk Web Service API - Internal Microservice - External Facilities</title>
|
187
|
+
<meta name="revisit-after" content="24 hours" />
|
188
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
189
|
+
</head>
|
190
|
+
<body>
|
191
|
+
<h1>Routes</h1>
|
192
|
+
<table>
|
193
|
+
<tr>
|
194
|
+
<th>Route</th>
|
195
|
+
<th>Verb</th>
|
196
|
+
<th>Description</th>
|
197
|
+
</tr>
|
198
|
+
#{routes.map { |r| r.chomp("\n") }.join("\n")}
|
199
|
+
</table>
|
200
|
+
</body>
|
201
|
+
</html>
|
202
|
+
END_OF_html
|
203
|
+
end
|
204
|
+
|
205
|
+
def make_JSON_routes routes, **options
|
206
|
+
r = {
|
207
|
+
'routes' => []
|
208
|
+
}
|
209
|
+
r['routes'] = SUPPORTED_ROUTES.map { |ar| { route: ar[0], verb: ar[1].to_s.upcase, description: ar[2] } }
|
210
|
+
r.to_json
|
211
|
+
end
|
212
|
+
|
213
|
+
def make_Plain_routes routes
|
214
|
+
make_TSV_routes routes
|
215
|
+
end
|
216
|
+
|
217
|
+
def make_TSV_routes routes
|
218
|
+
routes.map { |ar| "#{ar[0]}\t#{ar[1]}\t#{ar[2]}\n" }
|
219
|
+
end
|
220
|
+
|
221
|
+
def make_XML_routes routes
|
222
|
+
<<END_OF_xml
|
223
|
+
<?xml version="1.0">
|
224
|
+
<routes>#{routes.map { |ar| %Q{ <route route="#{ar[0]}" verb="#{ar[1].to_s.upcase}" description="#{ar[2]}"/>}}.join(%Q{\n})}
|
225
|
+
</routes>
|
226
|
+
END_OF_xml
|
227
|
+
end
|
228
|
+
|
229
|
+
end # class App
|
230
|
+
|
231
|
+
|
232
|
+
# ##########################################################################
|
233
|
+
# modules
|
234
|
+
|
235
|
+
end # module ExternalFacilities
|
236
|
+
end # module RESTful
|
237
|
+
end # module Microservices
|
238
|
+
end # module Applications
|
239
|
+
end # module Cassini
|
240
|
+
end # module RazorRisk
|
241
|
+
|
242
|
+
# ############################## end of file ############################# #
|
243
|
+
|
244
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# ######################################################################## #
|
4
|
+
#
|
5
|
+
# Version for RazorRisk.Cassini.Microservices.RESTful.ExternalFacilities 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 ExternalFacilities
|
18
|
+
|
19
|
+
# Current version of the
|
20
|
+
# RazorRisk.Cassini.Microservices.RESTful.ExternalFacilities library
|
21
|
+
VERSION = '0.0.1'
|
22
|
+
|
23
|
+
private
|
24
|
+
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i }
|
25
|
+
public
|
26
|
+
VERSION_MAJOR = VERSION_PARTS_[0]
|
27
|
+
VERSION_MINOR = VERSION_PARTS_[1]
|
28
|
+
VERSION_PATCH = VERSION_PARTS_[2]
|
29
|
+
VERSION_COMMIT = VERSION_PARTS_[3] || 0
|
30
|
+
|
31
|
+
# The description of the framework
|
32
|
+
DESCRIPTION = "Razor Risk's Cassini Web-framework's ExternalFacilities RESTful microservice"
|
33
|
+
end # module ExternalFacilities
|
34
|
+
|
35
|
+
end # module RESTful
|
36
|
+
end # module Microservices
|
37
|
+
end # module Applications
|
38
|
+
end # module Cassini
|
39
|
+
end # module RazorRisk
|
40
|
+
|
41
|
+
# ############################## end of file ############################# #
|
42
|
+
|
43
|
+
|
@@ -0,0 +1,17 @@
|
|
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/microservices/restful/externalfacilities/app'
|
13
|
+
require 'razor_risk/cassini/applications/microservices/restful/externalfacilities/version'
|
14
|
+
|
15
|
+
# ############################## end of file ############################# #
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# ######################################################################## #
|
4
|
+
#
|
5
|
+
# Adaptor for ExternalFacilities microservice's GET external facilities.
|
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 ExternalFacilities
|
28
|
+
|
29
|
+
|
30
|
+
# ##########################################################################
|
31
|
+
# ExternalFacilitiesSet
|
32
|
+
|
33
|
+
class ExternalFacilitiesGet < 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 ExternalFacilitiesGet
|
46
|
+
|
47
|
+
|
48
|
+
# ##########################################################################
|
49
|
+
# module
|
50
|
+
|
51
|
+
end # module ExternalFacilities
|
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,16 @@
|
|
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/externalfacilities/externalfacilities_get'
|
13
|
+
|
14
|
+
# ############################## end of file ############################# #
|
15
|
+
|
16
|
+
|
@@ -0,0 +1,381 @@
|
|
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
|
+
$:.unshift File.join(File.dirname(__FILE__), *(['..'] * 3), 'lib')
|
11
|
+
|
12
|
+
ENV['APP_ENV'] = 'test'
|
13
|
+
ENV['RZ_EXPOSE_MICROSERVICE_EXCEPTIONS'] = 'true'
|
14
|
+
|
15
|
+
# ##########################################################
|
16
|
+
# requires
|
17
|
+
|
18
|
+
require 'razor_risk/cassini/testing/suppress_pantheios_logging' unless $DEBUG
|
19
|
+
|
20
|
+
require 'razor_risk/cassini/applications/microservices/restful/externalfacilities/app'
|
21
|
+
require 'razor_risk/razor/connectivity/test_doubles/razor_requester/raises_on_send'
|
22
|
+
require 'razor_risk/razor/connectivity/test_doubles/razor_requester/returns_given_response'
|
23
|
+
require 'razor_risk/razor/connectivity/razor_3/response'
|
24
|
+
|
25
|
+
require 'rack/test'
|
26
|
+
require 'test/unit'
|
27
|
+
|
28
|
+
# ##########################################################
|
29
|
+
# Tests
|
30
|
+
|
31
|
+
class TestExternalFacilitiesApp < Test::Unit::TestCase
|
32
|
+
|
33
|
+
include ::Rack::Test::Methods
|
34
|
+
|
35
|
+
include ::RazorRisk::Cassini::Applications::Microservices::RESTful
|
36
|
+
include ::RazorRisk::Razor::Connectivity::TestDoubles::RazorRequester
|
37
|
+
include ::RazorRisk::Razor::Connectivity::Razor3
|
38
|
+
include ::RazorRisk::Razor::Connectivity::EntityConnectors::Exceptions
|
39
|
+
|
40
|
+
RazorEnv = 'env'
|
41
|
+
|
42
|
+
def app
|
43
|
+
ExternalFacilities::ExternalFacilitiesApp
|
44
|
+
end
|
45
|
+
|
46
|
+
def set_razor_response body, **options
|
47
|
+
|
48
|
+
doc = ::Nokogiri::XML::Builder.new do |xml|
|
49
|
+
xml.razorOutbound(
|
50
|
+
environment: RazorEnv,
|
51
|
+
request: 'select',
|
52
|
+
server: 'DataServer',
|
53
|
+
) do
|
54
|
+
xml.requestReceivedTime '2020-09-09 14:20:33.844'
|
55
|
+
xml.responseSentTime '2019-09-09 14:20:33.911'
|
56
|
+
xml.responseReceivedTime '2019-09-09 14:20:33.917'
|
57
|
+
xml.returnCode (options[:failed] ? 'nack' : 'ack')
|
58
|
+
xml.parent << ::Nokogiri.XML(body).root
|
59
|
+
end
|
60
|
+
end.doc
|
61
|
+
|
62
|
+
rsp = Response.new(doc)
|
63
|
+
rr = ReturnsGivenResponse.new('conf', RazorEnv, given_response: rsp)
|
64
|
+
|
65
|
+
app.on_init_service(
|
66
|
+
razor_requester: rr,
|
67
|
+
request_options: options[:request_options],
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def configure_app **opts
|
72
|
+
opts = {
|
73
|
+
host: 'localhost',
|
74
|
+
port: 5679,
|
75
|
+
authentication_scheme: 'none',
|
76
|
+
executable: 'abc',
|
77
|
+
razor_requester: nil,
|
78
|
+
}.merge(opts)
|
79
|
+
|
80
|
+
app.init_service(**opts)
|
81
|
+
end
|
82
|
+
|
83
|
+
def setup
|
84
|
+
configure_app
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class TestCommon < TestExternalFacilitiesApp
|
89
|
+
|
90
|
+
# TODO: HEAD does the full razor request as if it is a GET, but returns
|
91
|
+
# empty. This is not ok and it must be changed not do the razor request.
|
92
|
+
|
93
|
+
# TODO: Currently cannot mock raising UnexpectedServerResponseException
|
94
|
+
# as due to restrictuions in RaisesOnSend exception must be a class.
|
95
|
+
|
96
|
+
Routes = {
|
97
|
+
'externalfacilities' => [ '/externalfacilities' ],
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
class TestInvalidVerbs < TestCommon
|
102
|
+
|
103
|
+
InvalidVerbs = [ :post, :put, :delete, :options ]
|
104
|
+
|
105
|
+
InvalidVerbs.each do |verb|
|
106
|
+
Routes.each do |name, args|
|
107
|
+
define_method "test_#{verb}_#{name}" do
|
108
|
+
self.send(verb, *args)
|
109
|
+
assert_false last_response.ok?
|
110
|
+
assert_equal 404, last_response.status
|
111
|
+
assert_equal(
|
112
|
+
"'#{args.first}' [#{verb.to_s.upcase}] not found",
|
113
|
+
last_response.body
|
114
|
+
)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class TestHeaders < TestCommon
|
121
|
+
|
122
|
+
Routes.each do |name, args|
|
123
|
+
define_method "test_#{name}_invalid_accept_type" do
|
124
|
+
set_razor_response('<body/>')
|
125
|
+
|
126
|
+
header 'Accept', 'image/png'
|
127
|
+
get(*args)
|
128
|
+
|
129
|
+
assert_false last_response.ok?, last_response.body
|
130
|
+
assert_equal 406, last_response.status
|
131
|
+
assert_match(/invalid accept type/, last_response.body)
|
132
|
+
end
|
133
|
+
|
134
|
+
define_method "test_#{name}_invalid_accept_types" do
|
135
|
+
set_razor_response('<body/>')
|
136
|
+
|
137
|
+
header 'Accept', [ 'image/png', 'application/pdf' ]
|
138
|
+
get(*args)
|
139
|
+
|
140
|
+
assert_false last_response.ok?, last_response.body
|
141
|
+
assert_equal 406, last_response.status
|
142
|
+
assert_match(/invalid accept type/, last_response.body)
|
143
|
+
end
|
144
|
+
|
145
|
+
define_method "test_#{name}_valid_accept_type" do
|
146
|
+
|
147
|
+
set_razor_response(
|
148
|
+
'<body/>',
|
149
|
+
request_options: { validate: false }
|
150
|
+
)
|
151
|
+
|
152
|
+
header 'Accept', 'application/xml'
|
153
|
+
get(*args)
|
154
|
+
|
155
|
+
assert last_response.ok?, last_response.body
|
156
|
+
assert_equal 200, last_response.status
|
157
|
+
assert_match(
|
158
|
+
/application\/xml/,
|
159
|
+
last_response.headers['Content-Type']
|
160
|
+
)
|
161
|
+
end
|
162
|
+
|
163
|
+
define_method "test_#{name}_valid_accept_types" do
|
164
|
+
|
165
|
+
set_razor_response(
|
166
|
+
'<body/>',
|
167
|
+
request_options: { validate: false }
|
168
|
+
)
|
169
|
+
|
170
|
+
header 'Accept', [ 'application/json', 'application/xml' ]
|
171
|
+
get(*args)
|
172
|
+
|
173
|
+
assert last_response.ok?, last_response.body
|
174
|
+
assert_equal 200, last_response.status
|
175
|
+
assert_match(
|
176
|
+
/application\/xml/,
|
177
|
+
last_response.headers['Content-Type']
|
178
|
+
)
|
179
|
+
end
|
180
|
+
|
181
|
+
define_method "test_#{name}_mixed_accept_types" do
|
182
|
+
|
183
|
+
set_razor_response(
|
184
|
+
'<body/>',
|
185
|
+
request_options: { validate: false }
|
186
|
+
)
|
187
|
+
|
188
|
+
header 'Accept', [ 'application/pdf', 'application/xml' ]
|
189
|
+
get(*args)
|
190
|
+
|
191
|
+
assert last_response.ok?, last_response.body
|
192
|
+
assert_equal 200, last_response.status
|
193
|
+
assert_match(
|
194
|
+
/application\/xml/,
|
195
|
+
last_response.headers['Content-Type']
|
196
|
+
)
|
197
|
+
end
|
198
|
+
|
199
|
+
define_method "test_#{name}_application_xml_accept_types" do
|
200
|
+
|
201
|
+
set_razor_response(
|
202
|
+
'<body/>',
|
203
|
+
request_options: { validate: false }
|
204
|
+
)
|
205
|
+
|
206
|
+
header 'Accept', 'application/xml'
|
207
|
+
get(*args)
|
208
|
+
|
209
|
+
assert last_response.ok?, last_response.body
|
210
|
+
assert_equal 200, last_response.status
|
211
|
+
assert_match(
|
212
|
+
/application\/xml/,
|
213
|
+
last_response.headers['Content-Type']
|
214
|
+
)
|
215
|
+
assert_equal '<body/>', last_response.body
|
216
|
+
end
|
217
|
+
|
218
|
+
define_method "test_#{name}_text_xml_accept_types" do
|
219
|
+
|
220
|
+
set_razor_response(
|
221
|
+
'<body/>',
|
222
|
+
request_options: { validate: false }
|
223
|
+
)
|
224
|
+
|
225
|
+
header 'Accept', 'text/xml'
|
226
|
+
get(*args)
|
227
|
+
|
228
|
+
assert last_response.ok?, last_response.body
|
229
|
+
assert_equal 200, last_response.status
|
230
|
+
assert_match(
|
231
|
+
/text\/xml/,
|
232
|
+
last_response.headers['Content-Type']
|
233
|
+
)
|
234
|
+
assert_equal '<body/>', last_response.body
|
235
|
+
end
|
236
|
+
|
237
|
+
define_method "test_#{name}_application_json_accept_types" do
|
238
|
+
|
239
|
+
set_razor_response(
|
240
|
+
'<body/>',
|
241
|
+
request_options: { validate: false }
|
242
|
+
)
|
243
|
+
|
244
|
+
header 'Accept', 'application/json'
|
245
|
+
get(*args)
|
246
|
+
|
247
|
+
assert last_response.ok?, last_response.body
|
248
|
+
assert_equal 200, last_response.status
|
249
|
+
assert_match(
|
250
|
+
/application\/json/,
|
251
|
+
last_response.headers['Content-Type']
|
252
|
+
)
|
253
|
+
assert_equal '{"body":[]}', last_response.body
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
class TestJSONConversion < TestCommon
|
259
|
+
|
260
|
+
Routes.each do |name, args|
|
261
|
+
|
262
|
+
define_method "test_#{name}_json_uses_gdata_scheme" do
|
263
|
+
|
264
|
+
doc = ::Nokogiri::XML::Builder.new do |xml|
|
265
|
+
xml.body do
|
266
|
+
xml.group 'value', id: 'group 1'
|
267
|
+
xml.group id: 'group 2'
|
268
|
+
end
|
269
|
+
end.doc.root.to_xml
|
270
|
+
set_razor_response(doc, request_options: { validate: false })
|
271
|
+
|
272
|
+
exp_doc = {
|
273
|
+
'body' => {
|
274
|
+
'group' => [
|
275
|
+
{ '$t' => 'value', 'id' => 'group 1' },
|
276
|
+
{ 'id' => 'group 2' }
|
277
|
+
]
|
278
|
+
}
|
279
|
+
}.to_json
|
280
|
+
|
281
|
+
header 'Accept', 'application/json'
|
282
|
+
get(*args)
|
283
|
+
|
284
|
+
assert last_response.ok?, last_response.body
|
285
|
+
assert_equal 200, last_response.status
|
286
|
+
assert_match(
|
287
|
+
/application\/json/,
|
288
|
+
last_response.headers['Content-Type']
|
289
|
+
)
|
290
|
+
assert_equal(
|
291
|
+
exp_doc,
|
292
|
+
last_response.body
|
293
|
+
)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
class TestErrorHandling < TestCommon
|
299
|
+
|
300
|
+
Routes.each do |name, args|
|
301
|
+
|
302
|
+
define_method "test_#{name}_RZ0011_error" do
|
303
|
+
doc = ::Nokogiri::XML::Builder.new do |xml|
|
304
|
+
xml.errors do
|
305
|
+
xml.error do
|
306
|
+
xml.code 'RZ0011'
|
307
|
+
xml.message 'This failed'
|
308
|
+
xml.details 'This failed'
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end.doc.root.to_xml
|
312
|
+
set_razor_response doc, failed: true
|
313
|
+
|
314
|
+
get(*args)
|
315
|
+
|
316
|
+
assert_false last_response.ok?
|
317
|
+
assert_equal 404, last_response.status
|
318
|
+
assert_equal('This failed: This failed', last_response.body)
|
319
|
+
end
|
320
|
+
|
321
|
+
define_method "test_#{name}_razor_error" do
|
322
|
+
doc = ::Nokogiri::XML::Builder.new do |xml|
|
323
|
+
xml.body
|
324
|
+
end.doc.root.to_xml
|
325
|
+
set_razor_response doc, failed: true
|
326
|
+
|
327
|
+
get(*args)
|
328
|
+
|
329
|
+
assert_false last_response.ok?
|
330
|
+
assert_equal 500, last_response.status
|
331
|
+
assert_equal('Server Error', last_response.body)
|
332
|
+
end
|
333
|
+
|
334
|
+
define_method "test_#{name}_unknown_error" do
|
335
|
+
|
336
|
+
doc = '<body/>'
|
337
|
+
set_razor_response doc, failed: true
|
338
|
+
|
339
|
+
get(*args)
|
340
|
+
|
341
|
+
assert_false last_response.ok?
|
342
|
+
assert_equal 500, last_response.status
|
343
|
+
assert_equal('Server Error', last_response.body)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
class TestExternalFacilities < TestExternalFacilitiesApp
|
349
|
+
|
350
|
+
def test_validates_xml
|
351
|
+
|
352
|
+
doc = '<body/>'
|
353
|
+
set_razor_response(doc)
|
354
|
+
|
355
|
+
get '/externalfacilities'
|
356
|
+
|
357
|
+
assert_false last_response.ok?, last_response.body
|
358
|
+
assert_equal 404, last_response.status
|
359
|
+
assert_equal('External Facilities not found', last_response.body)
|
360
|
+
end
|
361
|
+
|
362
|
+
def test_get
|
363
|
+
|
364
|
+
doc = ::Nokogiri::XML::Builder.new do |xml|
|
365
|
+
xml.body do
|
366
|
+
xml.group id: 'group 1'
|
367
|
+
xml.group id: 'group 2'
|
368
|
+
end
|
369
|
+
end.doc.root.to_xml
|
370
|
+
set_razor_response(doc)
|
371
|
+
|
372
|
+
get '/externalfacilities'
|
373
|
+
assert last_response.ok?
|
374
|
+
assert_equal 200, last_response.status
|
375
|
+
assert_equal doc, last_response.body
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
# ############################## end of file ############################# #
|
380
|
+
|
381
|
+
|
metadata
ADDED
@@ -0,0 +1,243 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: restful-externalfacilities
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
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.26.16
|
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.16
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: razorrisk-core-diagnostics-extensions
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.2'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.2'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: razorrisk-razor-connectivity
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.11.2
|
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.11.2
|
64
|
+
- - "<"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.0'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: razorrisk-razor-connectivity-entityconnectors
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 0.26.7
|
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.26.7
|
84
|
+
- - "<"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '1.0'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: activesupport
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '4.0'
|
94
|
+
type: :runtime
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '4.0'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: clasp-ruby
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0.14'
|
108
|
+
type: :runtime
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0.14'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: json
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '1.8'
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 1.8.3
|
125
|
+
type: :runtime
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.8'
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 1.8.3
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: libclimate-ruby
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0.10'
|
142
|
+
type: :runtime
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0.10'
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: nokogiri
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - "~>"
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '1.6'
|
156
|
+
type: :runtime
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - "~>"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '1.6'
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: pantheios-ruby
|
165
|
+
requirement: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: 0.20.2
|
170
|
+
type: :runtime
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - "~>"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 0.20.2
|
177
|
+
- !ruby/object:Gem::Dependency
|
178
|
+
name: sinatra
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - "~>"
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '1.4'
|
184
|
+
type: :runtime
|
185
|
+
prerelease: false
|
186
|
+
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - "~>"
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '1.4'
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: xqsr3
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
194
|
+
requirements:
|
195
|
+
- - "~>"
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0.30'
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - "~>"
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '0.30'
|
205
|
+
description: Razor Risk's Cassini Web-framework's ExternalFacilities RESTful microservice
|
206
|
+
email: operations@razor-risk.com
|
207
|
+
executables:
|
208
|
+
- razorrisk-microservice-externalfacilities
|
209
|
+
extensions: []
|
210
|
+
extra_rdoc_files: []
|
211
|
+
files:
|
212
|
+
- Rakefile
|
213
|
+
- bin/razorrisk-microservice-externalfacilities
|
214
|
+
- lib/razor_risk/cassini/applications/microservices/restful/externalfacilities.rb
|
215
|
+
- lib/razor_risk/cassini/applications/microservices/restful/externalfacilities/app.rb
|
216
|
+
- lib/razor_risk/cassini/applications/microservices/restful/externalfacilities/version.rb
|
217
|
+
- lib/razor_risk/cassini/applications/route_verb_adaptors/externalfacilities.rb
|
218
|
+
- lib/razor_risk/cassini/applications/route_verb_adaptors/externalfacilities/externalfacilities_get.rb
|
219
|
+
- test/unit/microservice/tc_app.rb
|
220
|
+
homepage: https://razor-risk.com/
|
221
|
+
licenses:
|
222
|
+
- Nonstandard
|
223
|
+
metadata: {}
|
224
|
+
post_install_message:
|
225
|
+
rdoc_options: []
|
226
|
+
require_paths:
|
227
|
+
- lib
|
228
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
229
|
+
requirements:
|
230
|
+
- - "~>"
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: '2.0'
|
233
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ">="
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
requirements: []
|
239
|
+
rubygems_version: 3.2.3
|
240
|
+
signing_key:
|
241
|
+
specification_version: 4
|
242
|
+
summary: Razor Risk Cassini External Facilities RESTful microservice
|
243
|
+
test_files: []
|