restful-snapshots 0.0.2

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: a1d369a3e3bbc7054b2685a4eb770328fd34d1c6
4
+ data.tar.gz: 48d459c9a751e23489b04a870e7444f8a5bee735
5
+ SHA512:
6
+ metadata.gz: 95bb4d1afe8e74aa0890e5d88c4ea346aa60fe6293348721735cdab0fa19243c4bbfeafa0a4b326cf6a6d2050f756fed06380778e4dba31c4c5bc55582fd0a69
7
+ data.tar.gz: 6fbf754141dcd05f91fc2602c2365f5587870c21b71280ab95c7a2b3d2ba8cee63d782288f3e31a200df982c858da3c0451e888370e93662f550acb2dd3c52eb
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Main module/entry file for the Snapshots Microservice
7
+ #
8
+ # Copyright (c) 2020 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/snapshots'
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 = Snapshots::VERSION
35
+
36
+
37
+ # ##########################################################################
38
+ # main section
39
+
40
+ TheApp = Snapshots::SnapshotsApp
41
+
42
+
43
+ # ############################## end of file ############################# #
44
+
45
+
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Copyright (c) 2020 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/snapshots'
16
+ require 'razor_risk/cassini/applications/secured_microservice'
17
+
18
+ require 'razor_risk/cassini/mixin/razor_response_validator'
19
+
20
+ require 'pantheios'
21
+
22
+
23
+ # ##########################################################################
24
+ # modules
25
+
26
+ module RazorRisk
27
+ module Cassini
28
+ module Applications
29
+ module Microservices
30
+ module RESTful
31
+ module Snapshots
32
+
33
+
34
+ # ##########################################################################
35
+ # application
36
+
37
+ # Sinatra Application for the Snapshot Microservice.
38
+ class SnapshotsApp < SecuredMicroservice
39
+
40
+ # ##########################################################
41
+ # includes
42
+
43
+ include Cassini::Applications::RouteVerbAdaptors::Snapshots
44
+ include Cassini::Applications::RESTFramework::RouteVerbDispatch
45
+ include Cassini::Mixin::RazorResponseValidator
46
+
47
+ include ::Pantheios
48
+
49
+
50
+ # ##########################################################
51
+ # Constants
52
+
53
+ FULL_DESIGNATION = 'Snapshots'
54
+ SHORT_DESIGNATION = 'snapshots'
55
+ SERVICE_TYPE = :microservice
56
+ PROGRAM_FEATURES = {
57
+ has_web_server: true,
58
+ has_host_and_port: true,
59
+ has_razor_connectivity: true,
60
+ authentication: true,
61
+ copyright_year: 2020,
62
+ }
63
+ SUPPORTED_ROUTES = [
64
+ [ '/progress', :get, 'Get the details of all in progress snapshots' ],
65
+ [ '/progress/:id', :get, 'Get the details of a specific snapshot if it is in progress' ],
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
+
79
+ # ##########################################################
80
+ # methods
81
+
82
+ def self.on_init_service options
83
+
84
+ trace ParamNames[ :options ], options
85
+
86
+ raise ArgumentError.new('missing keyword: razor_requester') unless options.has_key? :razor_requester
87
+
88
+ request_options = options[:request_options]
89
+
90
+ set :razor_requester, options[:razor_requester]
91
+ set :request_options, request_options
92
+ end
93
+
94
+
95
+ # ##########################################################
96
+ # routes
97
+
98
+ get '/progress/:id/?' do
99
+
100
+ trace ParamNames[ :request, :params ], request, params
101
+
102
+ dispatch Progress::ItemGet
103
+ end
104
+
105
+ get '/progress/?' do
106
+
107
+ trace ParamNames[ :request, :params ], request, params
108
+
109
+ dispatch Progress::CollectionGet
110
+ end
111
+
112
+ # ##########################################################
113
+ # catch-all hook
114
+
115
+ define_catch_all_handlers
116
+
117
+ end # class App
118
+
119
+
120
+ # ##########################################################################
121
+ # modules
122
+
123
+ end # module Snapshots
124
+ end # module RESTful
125
+ end # module Microservices
126
+ end # module Applications
127
+ end # module Cassini
128
+ end # module RazorRisk
129
+
130
+ # ############################## end of file ############################# #
131
+
132
+
@@ -0,0 +1,47 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Version for RazorRisk.Cassini.Microservices.RESTful.Snapshots 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 Snapshots
18
+
19
+ # Current version of the RazorRisk.Cassini.Microservices.RESTful.Snapshots library
20
+ VERSION = '0.0.2'
21
+
22
+ private
23
+ VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i }
24
+ public
25
+ # Major version of the RazorRisk.Cassini.Microservices.RESTful.Snapshots library
26
+ VERSION_MAJOR = VERSION_PARTS_[0]
27
+ # Minor version of the RazorRisk.Cassini.Microservices.RESTful.Snapshots library
28
+ VERSION_MINOR = VERSION_PARTS_[1]
29
+ # Patch version of the RazorRisk.Cassini.Microservices.RESTful.Snapshots library
30
+ VERSION_PATCH = VERSION_PARTS_[2]
31
+ # Commit version of the RazorRisk.Cassini.Microservices.RESTful.Snapshots library
32
+ VERSION_COMMIT = VERSION_PARTS_[3] || 0
33
+
34
+
35
+ # The description of the framework
36
+ DESCRIPTION = "Razor Risk's Cassini Web-framework's Snapshots RESTful microservice"
37
+ end # module Snapshots
38
+
39
+ end # module RESTful
40
+ end # module Microservices
41
+ end # module Applications
42
+ end # module Cassini
43
+ end # module RazorRisk
44
+
45
+ # ############################## end of file ############################# #
46
+
47
+
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2020 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ##########################################################################
8
+
9
+
10
+ # ##########################################################
11
+ # requires
12
+
13
+ require 'razor_risk/cassini/applications/microservices/restful/snapshots/app'
14
+ require 'razor_risk/cassini/applications/microservices/restful/snapshots/version'
15
+
16
+
17
+ # ############################## end of file ############################# #
18
+
19
+
@@ -0,0 +1,125 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Snapshots microservice's collection GET verb
6
+ #
7
+ # Copyright (c) 2020 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/entity_connectors/snapshots_connector'
20
+ require 'razor_risk/core/diagnostics/logger'
21
+
22
+ # ##########################################################################
23
+ # module
24
+
25
+ module RazorRisk
26
+ module Cassini
27
+ module Applications
28
+ module RouteVerbAdaptors
29
+ module Snapshots
30
+ module Progress
31
+
32
+
33
+ # ##########################################################################
34
+ # classes
35
+
36
+ class CollectionGet < RESTFramework::VerbHandler
37
+
38
+ # ##########################################################
39
+ # includes
40
+
41
+ include Cassini::Mixin::RazorResponseValidator
42
+ include Cassini::Util::ConversionUtil
43
+
44
+ include Razor::Connectivity::Razor3::EntityConnectors
45
+ include ::RazorRisk::Core::Diagnostics::Logger
46
+
47
+ # ##########################################################
48
+ # Constants
49
+
50
+ public
51
+ HTTP_VERB = :get
52
+ HTTP_ACCEPTS = [
53
+ 'application/xml',
54
+ 'application/json',
55
+ 'text/xml',
56
+ ]
57
+ QUERY_PARAMETERS = []
58
+ ROUTE_VARIABLES = []
59
+
60
+
61
+ # ##########################################################
62
+ # methods
63
+
64
+ def initialize *args, **options
65
+
66
+ @connector_class = options[:connector_class] || SnapshotsConnector
67
+ super
68
+ end
69
+
70
+ def handle env, params, request, response
71
+
72
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
73
+
74
+ ec = @connector_class.new settings.razor_requester, credentials: get_required_credentials
75
+ qr = ec.get_progress indicate_result_by: :qualified_result
76
+ log :debug1, "qr(#{qr.class})='#{qr}'"
77
+
78
+ # Check the request succeeded
79
+ validate_qualified_razor_response qr
80
+ if qr.result.nil?
81
+ error HTTP_STATUS_NAMES::NOT_FOUND, 'No snapshots in progress'
82
+ elsif qr.failed?
83
+ log :warning, 'Failed to retrieve snapshot progress information for an unkown reason'
84
+ error HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR, 'Oops! Something went wrong'
85
+ end
86
+
87
+ unless qr.result.xpath('snapshotProgress').any?
88
+ error HTTP_STATUS_NAMES::NOT_FOUND, 'No snapshots in progress'
89
+ end
90
+
91
+ status HTTP_STATUS_NAMES::OK
92
+
93
+ if request.accept?('application/xml')
94
+ log :debug1, 'application/xml'
95
+ content_type 'application/xml'
96
+ qr.result.to_s
97
+ elsif request.accept?('text/xml')
98
+ log :debug1, 'text/xml'
99
+ content_type 'text/xml'
100
+ qr.result.to_s
101
+ elsif request.accept?('application/json')
102
+ log :debug1, 'application/json'
103
+ content_type 'application/json'
104
+ convert_XML_to_JSON qr.result, { scheme: :gdata }
105
+ else
106
+ log :violation, "unexpected failure to match given 'Accept' header '#{request.accept}'"
107
+ error HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR, 'Oops! Something went wrong'
108
+ end
109
+ end
110
+ end # class CollectionGet
111
+
112
+
113
+ # ##########################################################################
114
+ # module
115
+
116
+ end # module Progress
117
+ end # module Snapshots
118
+ end # module RouteVerbAdaptors
119
+ end # module Applications
120
+ end # module Cassini
121
+ end # module RazorRisk
122
+
123
+ # ############################## end of file ############################# #
124
+
125
+
@@ -0,0 +1,134 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Snapshots microservice's collection GET verb
6
+ #
7
+ # Copyright (c) 2020 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/entity_connectors/snapshots_connector'
20
+ require 'razor_risk/core/diagnostics/logger'
21
+
22
+ require 'xqsr3/conversion/integer_parser'
23
+
24
+
25
+ # ##########################################################################
26
+ # module
27
+
28
+ module RazorRisk
29
+ module Cassini
30
+ module Applications
31
+ module RouteVerbAdaptors
32
+ module Snapshots
33
+ module Progress
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::Razor3::EntityConnectors
48
+ include ::RazorRisk::Core::Diagnostics::Logger
49
+
50
+ # ##########################################################
51
+ # Constants
52
+
53
+ public
54
+ HTTP_VERB = :get
55
+ HTTP_ACCEPTS = [
56
+ 'application/xml',
57
+ 'application/json',
58
+ 'text/xml',
59
+ ]
60
+ QUERY_PARAMETERS = []
61
+ ROUTE_VARIABLES = [ 'id' ]
62
+
63
+
64
+ # ##########################################################
65
+ # methods
66
+
67
+ def initialize *args, **options
68
+
69
+ @connector_class = options[:connector_class] || SnapshotsConnector
70
+ super
71
+ end
72
+
73
+ def handle env, params, request, response
74
+
75
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
76
+
77
+ id = ::Xqsr3::Conversion::IntegerParser.to_integer(params['id'], nil: true)
78
+ error HTTP_STATUS_NAMES::UNPROCESSABLE_ENTITY, 'ID must be an integer' unless id
79
+
80
+ ec = @connector_class.new settings.razor_requester, credentials: get_required_credentials
81
+
82
+ qr = ec.get_progress indicate_result_by: :qualified_result
83
+ log :debug1, "qr(#{qr.class})='#{qr}'"
84
+
85
+ # Check the request succeeded
86
+ validate_qualified_razor_response qr
87
+ if qr.result.nil?
88
+ error HTTP_STATUS_NAMES::NOT_FOUND, "Snapshot #{id} is not in progress"
89
+ elsif qr.failed?
90
+ log :warning, "Failed to retrieve snapshot progress information for #{id} for an unkown reason"
91
+ error HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR, 'Oops! Something went wrong'
92
+ end
93
+
94
+ # Get the specified snapshot
95
+ unless snapshot = qr.result.at_xpath("snapshotProgress[@sysId='#{id}']")
96
+ error HTTP_STATUS_NAMES::NOT_FOUND, "Snapshot #{id} is not in progress"
97
+ end
98
+
99
+ # Set response
100
+ status HTTP_STATUS_NAMES::OK
101
+
102
+ if request.accept?('application/xml')
103
+ log :debug1, 'application/xml'
104
+ content_type 'application/xml'
105
+ snapshot.to_s
106
+ elsif request.accept?('text/xml')
107
+ log :debug1, 'text/xml'
108
+ content_type 'text/xml'
109
+ snapshot.to_s
110
+ elsif request.accept?('application/json')
111
+ log :debug1, 'application/json'
112
+ content_type 'application/json'
113
+ convert_XML_to_JSON snapshot, { scheme: :gdata }
114
+ else
115
+ log :violation, "unexpected failure to match given 'Accept' header '#{request.accept}'"
116
+ error HTTP_STATUS_NAMES::INTERNAL_SERVER_ERROR, 'Oops! Something went wrong'
117
+ end
118
+ end
119
+ end # class ItemGet
120
+
121
+
122
+ # ##########################################################################
123
+ # module
124
+
125
+ end # module Progress
126
+ end # module Snapshots
127
+ end # module RouteVerbAdaptors
128
+ end # module Applications
129
+ end # module Cassini
130
+ end # module RazorRisk
131
+
132
+ # ############################## end of file ############################# #
133
+
134
+
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2020 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/snapshots/progress/collection_get'
14
+ require 'razor_risk/cassini/applications/route_verb_adaptors/snapshots/progress/item_get'
15
+
16
+
17
+ # ############################## end of file ############################# #
18
+
19
+
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2020 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/snapshots/progress'
14
+
15
+
16
+ # ############################## end of file ############################# #
17
+
18
+
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: restful-snapshots
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Razor Risk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-26 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.14.10
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.14.10
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.23
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.23
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '1.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: nokogiri
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.6'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '1.6'
87
+ - !ruby/object:Gem::Dependency
88
+ name: pantheios-ruby
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 0.20.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.20.2
101
+ - !ruby/object:Gem::Dependency
102
+ name: xqsr3
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '0.30'
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '0.30'
115
+ description: Razor Risk's Cassini Web-framework's Snapshots RESTful microservice
116
+ email: operations@razor-risk.com
117
+ executables:
118
+ - razorrisk-microservice-snapshots
119
+ extensions: []
120
+ extra_rdoc_files: []
121
+ files:
122
+ - bin/razorrisk-microservice-snapshots
123
+ - lib/razor_risk/cassini/applications/microservices/restful/snapshots.rb
124
+ - lib/razor_risk/cassini/applications/microservices/restful/snapshots/app.rb
125
+ - lib/razor_risk/cassini/applications/microservices/restful/snapshots/version.rb
126
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/snapshots.rb
127
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/snapshots/progress.rb
128
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/snapshots/progress/collection_get.rb
129
+ - lib/razor_risk/cassini/applications/route_verb_adaptors/snapshots/progress/item_get.rb
130
+ homepage: https://razor-risk.com/
131
+ licenses:
132
+ - Nonstandard
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '2.0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.6.14
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Razor Risk Cassini Snapshot RESTful microservice
154
+ test_files: []