razorrisk-cassini-common 0.26.24

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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +22 -0
  3. data/LICENSE +5 -0
  4. data/README.md +2 -0
  5. data/Rakefile +102 -0
  6. data/lib/razor_risk/cassini/applications/microservice.rb +318 -0
  7. data/lib/razor_risk/cassini/applications/rest_framework/route_verb_dispatcher.rb +120 -0
  8. data/lib/razor_risk/cassini/applications/rest_framework/verb_handler.rb +117 -0
  9. data/lib/razor_risk/cassini/applications/route_verb_adaptors/utilities/collection_get_helper.rb +86 -0
  10. data/lib/razor_risk/cassini/applications/securable_microservice.rb +164 -0
  11. data/lib/razor_risk/cassini/applications/secured_microservice.rb +63 -0
  12. data/lib/razor_risk/cassini/applications/unsecured_microservice.rb +77 -0
  13. data/lib/razor_risk/cassini/authorisation/header_helpers.rb +271 -0
  14. data/lib/razor_risk/cassini/authorisation/security_model_helpers.rb +93 -0
  15. data/lib/razor_risk/cassini/authorisation.rb +27 -0
  16. data/lib/razor_risk/cassini/cli.rb +19 -0
  17. data/lib/razor_risk/cassini/common/version.rb +44 -0
  18. data/lib/razor_risk/cassini/common.rb +32 -0
  19. data/lib/razor_risk/cassini/constants.rb +68 -0
  20. data/lib/razor_risk/cassini/diagnostics/util_functions.rb +248 -0
  21. data/lib/razor_risk/cassini/diagnostics/zeroth_include.rb +35 -0
  22. data/lib/razor_risk/cassini/extensions/libclimate/common_options.rb +267 -0
  23. data/lib/razor_risk/cassini/extensions/libclimate.rb +26 -0
  24. data/lib/razor_risk/cassini/header_functions.rb +59 -0
  25. data/lib/razor_risk/cassini/main.rb +238 -0
  26. data/lib/razor_risk/cassini/mixin/razor_response_validator.rb +176 -0
  27. data/lib/razor_risk/cassini/testing/suppress_pantheios_logging.rb +31 -0
  28. data/lib/razor_risk/cassini/util/conversion_util.rb +176 -0
  29. data/lib/razor_risk/cassini/util/program_execution_util.rb +379 -0
  30. data/lib/razor_risk/cassini/util/secrets_util.rb +229 -0
  31. data/lib/razor_risk/cassini/util/version_util.rb +88 -0
  32. data/lib/razor_risk/sinatra/helpers/check_auth_helper.rb +209 -0
  33. data/lib/razor_risk/sinatra/helpers/validate_accept_helper.rb +69 -0
  34. data/lib/razor_risk/sinatra/helpers/validate_content_type_helper.rb +74 -0
  35. data/lib/razor_risk/sinatra/helpers/validate_query_parameters_helper.rb +198 -0
  36. data/test/scratch/cassini/util/convert_XML.rb +54 -0
  37. data/test/unit/applications/route_verb_adaptors/utilities/tc_collection_get_helper.rb +236 -0
  38. data/test/unit/applications/tc_verb_handler.rb +130 -0
  39. data/test/unit/mixin/tc_razor_response_validator.rb +328 -0
  40. data/test/unit/sinatra/helpers/tc_validate_query_parameters_helper.rb +134 -0
  41. data/test/unit/tc_authorisation_util.rb +265 -0
  42. data/test/unit/tc_load_secrets.rb +95 -0
  43. data/test/unit/util/tc_conversion_util.rb +393 -0
  44. data/test/unit/util/tc_program_execution_util.rb +462 -0
  45. metadata +380 -0
@@ -0,0 +1,93 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/authorisation/security_model_helpers.rb
5
+ #
6
+ # Purpose: Definition of the
7
+ # RazorRisk::Cassini::Authorisation::SecurityModelHelpers
8
+ # module
9
+ #
10
+ # Created: 16th February 2018
11
+ # Updated: 16th February 2018
12
+ #
13
+ # Author: Matthew Wilson
14
+ #
15
+ # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
16
+ # All rights reserved.
17
+ #
18
+ # ######################################################################## #
19
+
20
+
21
+ =begin
22
+ =end
23
+
24
+ require 'pantheios'
25
+ require 'xqsr3/quality/parameter_checking'
26
+
27
+ require 'razor_risk/core/diagnostics/logger'
28
+
29
+ module RazorRisk
30
+ module Cassini
31
+ module Authorisation
32
+
33
+ module SecurityModelHelpers
34
+
35
+ include ::Pantheios
36
+ include ::Xqsr3::Quality::ParameterChecking
37
+ include ::RazorRisk::Core::Diagnostics::Logger
38
+
39
+ # Options a RazorRequester-compatible options hash containing
40
+ # credentials appropriate to the given +authentication_scheme+
41
+ def razor_requester_credentials_options authentication_scheme, credentials, **options
42
+
43
+ check_parameter authentication_scheme, 'authentication_scheme', type: ::Symbol, values: [ :none, :basic, :authorisation_only, :jwt ]
44
+ check_parameter(credentials, 'credentials', type: ::Array) { |value| value.empty? ? 'no credentials specified' : true }
45
+
46
+ r = {}
47
+
48
+ credentials = credentials.dup
49
+
50
+
51
+ case authentication_scheme
52
+ when :none
53
+
54
+ ;
55
+ when :basic
56
+
57
+ if options[:auth_test_mode]
58
+ log :warning, "YOU ARE IN AUTHORIZATION TEST MODE! NO AUTHENTICATION WILL BE PERFORMED! THIS MUST NOT BE USED IN PRODUCTION!"
59
+ r[:impersonatee] = credentials.shift unless credentials.empty?
60
+ else
61
+ r[:username] = credentials.shift unless credentials.empty?
62
+ r[:password] = credentials.shift unless credentials.empty?
63
+ r[:domain] = credentials.shift unless credentials.empty?
64
+ end
65
+ when :jwt
66
+
67
+ if options[:auth_test_mode]
68
+ log :warning, "YOU ARE IN AUTHORIZATION TEST MODE! NO AUTHENTICATION WILL BE PERFORMED! THIS MUST NOT BE USED IN PRODUCTION!"
69
+ end
70
+ r[:session_id] = credentials.shift unless credentials.empty?
71
+ r[:user_id] = credentials.shift unless credentials.empty?
72
+ r[:user_name] = credentials.shift unless credentials.empty?
73
+ when :authorisation_only
74
+
75
+ r[:impersonatee] = credentials.shift unless credentials.empty?
76
+ else
77
+
78
+ log :violation, "unexpected authentication_scheme '#{authentication_scheme}' (#{authentication_scheme.class})"
79
+ end
80
+
81
+ r
82
+ end
83
+
84
+ end # module SecurityModelHelpers
85
+
86
+ end # module Authorisation
87
+ end # module Cassini
88
+ end # module RazorRisk
89
+
90
+ # ############################## end of file ############################# #
91
+
92
+
93
+
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/authorisation.rb
5
+ #
6
+ # Purpose: Cassini Authorisation common file
7
+ #
8
+ # Created: 26th November 2017
9
+ # Updated: 4th March 2018
10
+ #
11
+ # Author: Matthew Wilson
12
+ #
13
+ # Copyright (c) 2017-2018, Razor Risk Technologies Pty Ltd
14
+ # All rights reserved.
15
+ #
16
+ # ######################################################################## #
17
+
18
+
19
+ # ##########################################################################
20
+ # requires
21
+
22
+ require 'razor_risk/cassini/authorisation/header_helpers'
23
+ require 'razor_risk/cassini/authorisation/security_model_helpers'
24
+
25
+ # ############################## end of file ############################# #
26
+
27
+
@@ -0,0 +1,19 @@
1
+
2
+ module RazorRisk
3
+ module Cassini
4
+
5
+ module CLI
6
+
7
+ def self.Copyright(year)
8
+
9
+ "Copyright Razor Risk Technologies Pty Ltd (c) #{year}"
10
+ end
11
+
12
+ end # module CLI
13
+
14
+ end # module Cassini
15
+ end # module RazorRisk
16
+
17
+ # ############################## end of file ############################# #
18
+
19
+
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Version for RazorRisk.Cassini.Common library
6
+
7
+ # Copyright (c) 2017 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+ module RazorRisk
12
+ module Cassini
13
+
14
+ module Common
15
+
16
+ # Current version of the RazorRisk.Cassini.Common library
17
+ VERSION = '0.26.24'
18
+
19
+ private
20
+ VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
21
+ public
22
+ # Major version of the RazorRisk.Cassini.Common library
23
+ VERSION_MAJOR = VERSION_PARTS_[0] # :nodoc:
24
+ # Minor version of the RazorRisk.Cassini.Common library
25
+ VERSION_MINOR = VERSION_PARTS_[1] # :nodoc:
26
+ # Patch version of the RazorRisk.Cassini.Common library
27
+ VERSION_Patch = VERSION_PARTS_[2] # :nodoc:
28
+ # Commit version of the RazorRisk.Cassini.Common library
29
+ VERSION_COMMIT = VERSION_PARTS_[3] || 0 # :nodoc:
30
+
31
+
32
+ # The description of the framework
33
+ DESCRIPTION = 'Cassini Web Service framework for Razor Risk Razor system'
34
+
35
+ # [DEPRECATED] Instead use +DESCRIPTION+
36
+ FRAMEWORK_DESCRIPTION = DESCRIPTION
37
+
38
+ end # module Common
39
+ end # module Cassini
40
+ end # module RazorRisk
41
+
42
+ # ############################## end of file ############################# #
43
+
44
+
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/common.rb
5
+ #
6
+ # Purpose: Cassini common file
7
+ #
8
+ # Created: 15th January 2018
9
+ # Updated: 4th March 2018
10
+ #
11
+ # Author: Matthew Wilson
12
+ #
13
+ # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
14
+ # All rights reserved.
15
+ #
16
+ # ######################################################################## #
17
+
18
+
19
+ # ##########################################################################
20
+ # requires
21
+
22
+ =begin
23
+ require 'razor_risk/cassini/authorisation'
24
+ require 'razor_risk/cassini/constants'
25
+ require 'razor_risk/cassini/header_functions'
26
+ require 'razor_risk/cassini/management_plane'
27
+ require 'razor_risk/cassini/util/secrets_util'
28
+ =end
29
+
30
+ # ############################## end of file ############################# #
31
+
32
+
@@ -0,0 +1,68 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/constants.rb
5
+ #
6
+ # Purpose: Cassini constants
7
+ #
8
+ # Created: 14th November 2017
9
+ # Updated: 4th March 2018
10
+ #
11
+ # Author: Matthew Wilson
12
+ #
13
+ # Copyright (c) 2017-2018, Razor Risk Technologies Pty Ltd
14
+ # All rights reserved.
15
+ #
16
+ # ######################################################################## #
17
+
18
+
19
+ # ##########################################################################
20
+ # requires
21
+
22
+ =begin
23
+ =end
24
+
25
+ module RazorRisk
26
+ module Cassini
27
+
28
+ module Constants
29
+
30
+ # The WWW-Authenticate header scheme for Razor's Authentication-only
31
+ # authentication scheme
32
+ SCHEME_AUTH_ONLY = 'RazorRisk.Cassini.AuthorisationOnly'
33
+
34
+ REFERRED_ENV_PREFIX = 'razorrisk.cassini.ims'
35
+
36
+ SUPPORTED_VERB_NAMES = %w{ COPY DELETE GET HEAD LINK LOCK OPTIONS PATCH PROPFIND POST PURGE PUT VIEW UNLINK UNLOCK }
37
+
38
+ SUPPORTED_VERBS = SUPPORTED_VERB_NAMES.map { |name| name.downcase.to_sym }
39
+
40
+ HTTP_AUTHORIZATION = 'HTTP_AUTHORIZATION'
41
+
42
+ SUPPORTED_AUTHENTICATION_SCHEMES = %w{ [a]uthorisation-only [b]asic [j]wt }
43
+
44
+ # See RFC-2616 Section 13.5.1 @ https://tools.ietf.org/html/rfc2616#section-13.5.1
45
+ # and its errata 4522 @ https://www.rfc-editor.org/errata/eid4522
46
+ HOP_BY_HOP_HEADERS = [
47
+ 'connection',
48
+ 'keep-alive',
49
+ 'proxy-authenticate',
50
+ 'proxy-authorization',
51
+ 'te',
52
+ 'trailer',
53
+ 'transfer-encoding',
54
+ 'upgrade',
55
+ ]
56
+
57
+ # Environment setting to allow exceptions to be propagated for
58
+ # development and testing purposes.
59
+ RZ_EXPOSE_MICROSERVICE_EXCEPTIONS = ENV['RZ_EXPOSE_MICROSERVICE_EXCEPTIONS']
60
+
61
+ end # module Constants
62
+
63
+ end # module Cassini
64
+ end # module RazorRisk
65
+
66
+ # ############################## end of file ############################# #
67
+
68
+
@@ -0,0 +1,248 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/diagnostics/util_functions.rb
5
+ #
6
+ # Purpose: Centralised diagnostics utility functions
7
+ #
8
+ # Created: 8th February 2018
9
+ # Updated: 26th February 2018
10
+ #
11
+ # Author: Matthew Wilson
12
+ #
13
+ # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
14
+ # All rights reserved.
15
+ #
16
+ # ######################################################################## #
17
+
18
+
19
+ require 'pantheios/application_layer/stock_severity_levels'
20
+ require 'pantheios/services/multiplexing_log_service'
21
+ require 'pantheios/services/null_log_service'
22
+ require 'pantheios/services/simple_console_log_service'
23
+ require 'pantheios/services/simple_file_log_service'
24
+
25
+ require 'xqsr3/quality/parameter_checking'
26
+
27
+ require 'fileutils'
28
+
29
+ require 'razor_risk/core/diagnostics/logger'
30
+
31
+ module RazorRisk
32
+ module Cassini
33
+
34
+ module Diagnostics
35
+ include ::RazorRisk::Core::Diagnostics::Logger
36
+
37
+ module SetupDiagnosticLogging_Constants
38
+
39
+ STOCK_SEVERITY_LEVEL_VALUES = Pantheios::ApplicationLayer::StockSeverityLevels::STOCK_SEVERITY_LEVEL_VALUES
40
+
41
+ DEFAULT_LOG_THRESHOLD_MAIN = :debug4
42
+ DEFAULT_LOG_THRESHOLD_CONSOLE = :informational
43
+
44
+ BENCHMARK_SEVERITY_VALUE = STOCK_SEVERITY_LEVEL_VALUES[:benchmark]
45
+
46
+ DEFAULT_LOG_SIZE_BENCHMARK = 1024 * 1024 * 10
47
+ DEFAULT_LOG_SIZE_MAIN = 1024 * 1024 * 100
48
+
49
+ DEFAULT_LOG_DEPTH = 20
50
+ end # module SetupDiagnosticLogging_Constants
51
+
52
+ # configure diagnostic logging:
53
+ #
54
+ # - set program name
55
+ # - set services:
56
+ # * benchmark logger : file, only responding to :benchmark, and only if
57
+ # --benchmark is specified
58
+ # * main file logger : file, stores all except :benchmark, according to
59
+ # :log_threshold
60
+ # * main cons logger : stdout/stderr, only :notice and above
61
+ #
62
+ # === Signature
63
+ #
64
+ # * *Parameters:*
65
+ # - +program_name+:: (::String) The program name. May not be +nil+
66
+ # - +log_directory+:: (::String) The directory in which log-files
67
+ # will be created. May not be +nil+, unless both +:no_benchmark_log+
68
+ # and +:no_main_log+ are truey
69
+ # - +log_threshold+:: (::String | ::Symbol |[ ::Symbol, ::Symbol ] )
70
+ # Specifies the log-threshold(s). The threshold(s) is specified as a
71
+ # string containing comma-separated values, or as a single symbol,
72
+ # or as an array of symbols, all of which are treated as a sequence
73
+ # of severity thresholds. The severity thresholds apply,
74
+ # respectively, to the modifiable-sequence of Console and Main.
75
+ #
76
+ # * *Options:*
77
+ # - +:no_benchmark_log+:: (boolean) Unless truey, a benchmark log will
78
+ # be created
79
+ # - +:no_console_log+:: (boolean) Unless truey, a console log will be
80
+ # created
81
+ # - +:no_main_log+:: (boolean) Unless truey, a main log will be
82
+ # created
83
+ #
84
+ # NOTE: If all of +:no_benchmark_log+, +:no_console_log+, and
85
+ # +:no_main_log+ are truey, a null logger will be created, and there will
86
+ # be no logging
87
+
88
+ def setup_diagnostic_logging program_name, log_directory, log_threshold, **options
89
+
90
+ ::Xqsr3::Quality::ParameterChecking.check_parameter program_name, 'program_name', type: ::String
91
+ ::Xqsr3::Quality::ParameterChecking.check_parameter log_directory, 'log_directory', type: ::String
92
+ ::Xqsr3::Quality::ParameterChecking.check_parameter log_threshold, 'log_threshold', types: [ ::Array, ::Integer, ::Symbol ]
93
+
94
+ case log_threshold
95
+ when ::Array
96
+
97
+ log_thresholds = log_threshold.dup
98
+ when ::Symbol
99
+
100
+ log_thresholds = [ log_threshold ]
101
+ else
102
+
103
+ log_thresholds = []
104
+ end
105
+
106
+ console_threshold = log_thresholds.shift || options[:console_threshold] || SetupDiagnosticLogging_Constants::DEFAULT_LOG_THRESHOLD_CONSOLE
107
+ main_threshold = log_thresholds.shift || options[:main_threshold] || SetupDiagnosticLogging_Constants::DEFAULT_LOG_THRESHOLD_MAIN
108
+
109
+ console_threshold_v = ::Integer === console_threshold ? console_threshold : SetupDiagnosticLogging_Constants::STOCK_SEVERITY_LEVEL_VALUES[console_threshold]
110
+ main_threshold_v = ::Integer === main_threshold ? main_threshold : SetupDiagnosticLogging_Constants::STOCK_SEVERITY_LEVEL_VALUES[main_threshold]
111
+
112
+ unless options[:no_benchmark_log] && options[:no_main_log]
113
+
114
+ unless File.directory?(log_directory)
115
+
116
+ climate.abort "log directory '#{log_directory}' exists and is not a directory" if File.exist?(log_directory)
117
+
118
+ begin
119
+
120
+ FileUtils.mkdir_p log_directory
121
+ rescue => x
122
+
123
+ log :alert, "exception(#{x.class}): #{x.message}"
124
+
125
+ climate.abort x.message
126
+ end
127
+ end
128
+ end
129
+
130
+ services = []
131
+
132
+ unless options[:no_benchmark_log]
133
+
134
+ bm_log_file_name = program_name + '-benchmark.log'
135
+
136
+ bm_log_file_path = File.join(log_directory, bm_log_file_name)
137
+
138
+ bm_logger = Pantheios::Services::SimpleFileLogService.new bm_log_file_path, roll_size: SetupDiagnosticLogging_Constants::DEFAULT_LOG_SIZE_BENCHMARK, roll_depth: SetupDiagnosticLogging_Constants::DEFAULT_LOG_DEPTH
139
+
140
+ def bm_logger.severity_logged? severity
141
+
142
+ case severity
143
+ when :benchmark, SetupDiagnosticLogging_Constants::BENCHMARK_SEVERITY_VALUE
144
+
145
+ true
146
+ else
147
+
148
+ false
149
+ end
150
+ end
151
+
152
+ services << bm_logger
153
+ end
154
+
155
+ unless options[:no_main_log]
156
+
157
+ mf_log_file_name = program_name + '-main.log'
158
+
159
+ mf_log_file_path = File.join(log_directory, mf_log_file_name)
160
+
161
+ mf_logger = Pantheios::Services::SimpleFileLogService.new mf_log_file_path, roll_size: SetupDiagnosticLogging_Constants::DEFAULT_LOG_SIZE_MAIN, roll_depth: SetupDiagnosticLogging_Constants::DEFAULT_LOG_DEPTH
162
+
163
+ mf_logger.instance_variable_set :@main_threshold_v_, main_threshold_v
164
+
165
+ def mf_logger.severity_logged? severity
166
+
167
+ return true unless @main_threshold_v_
168
+
169
+ severity = :debug4 if :debug == severity
170
+
171
+ severity_v = nil
172
+
173
+ case severity
174
+ when :benchmark, SetupDiagnosticLogging_Constants::BENCHMARK_SEVERITY_VALUE
175
+
176
+ return false
177
+ when ::Symbol
178
+
179
+ severity_v = SetupDiagnosticLogging_Constants::STOCK_SEVERITY_LEVEL_VALUES[severity]
180
+ when ::Integer
181
+
182
+ severity_v = severity
183
+ else
184
+
185
+ ;
186
+ end
187
+
188
+ return true unless severity_v
189
+
190
+ severity_v <= @main_threshold_v_
191
+ end
192
+
193
+ services << mf_logger
194
+ end
195
+
196
+ unless options[:no_console_log]
197
+
198
+ mc_logger = Pantheios::Services::SimpleConsoleLogService.new
199
+
200
+ mc_logger.instance_variable_set :@console_threshold_v_, console_threshold_v
201
+
202
+ def mc_logger.severity_logged? severity
203
+
204
+ return true unless @console_threshold_v_
205
+
206
+ severity = :debug4 if :debug == severity
207
+
208
+ severity_v = nil
209
+
210
+ case severity
211
+ when :benchmark, SetupDiagnosticLogging_Constants::BENCHMARK_SEVERITY_VALUE
212
+
213
+ return false
214
+ when ::Symbol
215
+
216
+ severity_v = SetupDiagnosticLogging_Constants::STOCK_SEVERITY_LEVEL_VALUES[severity]
217
+ when ::Integer
218
+
219
+ severity_v = severity
220
+ else
221
+
222
+ ;
223
+ end
224
+
225
+ return true unless severity_v
226
+
227
+ severity_v <= @console_threshold_v_
228
+ end
229
+
230
+ services << mc_logger
231
+ end
232
+
233
+ if services.empty?
234
+
235
+ mx_logger = Pantheios::Services::NullLogService.new
236
+ else
237
+
238
+ mx_logger = Pantheios::Services::MultiplexingLogService.new services, level_cache_mode: :thread_fixed
239
+ end
240
+
241
+ ::Pantheios::Core.set_service mx_logger
242
+ end
243
+
244
+ end # module Diagnostics
245
+
246
+ end # module RazorRisk
247
+ end # module Cassini
248
+
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ # File: razor_risk/cassini/diagnostics/zeroth_include.rb
5
+ #
6
+ # Purpose: When required as the very first file it sets up, for
7
+ # diagnostics, the main thread name and the process name
8
+ #
9
+ # Created: 5th February 2018
10
+ # Updated: 4th March 2018
11
+ #
12
+ # Author: Matthew Wilson
13
+ #
14
+ # Copyright (c) 2018, Razor Risk Technologies Pty Ltd
15
+ # All rights reserved.
16
+ #
17
+ # ######################################################################## #
18
+
19
+
20
+ # ##########################################################################
21
+ # requires
22
+
23
+ require 'pantheios/globals'
24
+
25
+ # set main thread name
26
+ Pantheios::Globals.MAIN_THREAD_NAME = [ Thread.current, 'main' ]
27
+
28
+ # set process name
29
+ #
30
+ # If the script name is ws.rb, then the directory name is used
31
+ Pantheios::Globals.PROCESS_NAME = $0 =~ /[\\\/]ws\.rb$/ ? :script_dirname : :script_stem
32
+
33
+ # ############################## end of file ############################# #
34
+
35
+