carioca 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -4
- data/Gemfile +0 -1
- data/README.md +53 -0
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/carioca.gemspec +4 -4
- data/lib/carioca/configuration.rb +1 -1
- data/lib/carioca/constants.rb +9 -12
- data/lib/carioca/dependencies.rb +0 -4
- data/lib/carioca/mixin.rb +4 -4
- data/lib/carioca/registry.rb +8 -8
- data/lib/carioca/registry_file.rb +2 -2
- data/lib/carioca/services/debug.rb +3 -3
- data/lib/carioca/services/finisher.rb +108 -115
- data/lib/carioca/services/init.rb +1 -1
- data/lib/carioca/services/output.rb +6 -6
- data/lib/carioca/services/sanitycheck.rb +90 -106
- data/lib/carioca/services/securestore.rb +74 -75
- data/lib/carioca/services/setup.rb +55 -60
- data/lib/carioca/services/toolbox.rb +93 -94
- data/samples/Gemfile +4 -2
- data/samples/test.rb +38 -45
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4324ecafd951108c6d1dc26540f0e2012b6aa5a7fc4aa903caf9c90bb8bd73d
|
4
|
+
data.tar.gz: 33950a1b11ecab8b65ca060ab12d8c282379a3d01d737ad02bc877067f219895
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e7333857e60fee06cfd5f9a673e71c36378384aba26b67289e5ba2ab66a533abad6483245049d79b0ce5e9315e46413edf7b632444bab298254d6687f939428
|
7
|
+
data.tar.gz: 774b6946f8d905fe0e38015fde95cdfa1ba0936b9e1c1994806fe7c9335a2a06f47b3869b2027cd4bed5e7b976bab9c54c61f5cda4f4e542cb1318766ef13cf1
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -615,6 +615,59 @@ titi
|
|
615
615
|
|
616
616
|
### Service Finisher
|
617
617
|
|
618
|
+
|
619
|
+
#### List of available return code and associated symbols :
|
620
|
+
|
621
|
+
- code : must be a clI OR HTTP return code
|
622
|
+
- key : a I18n service key in locales files (Carioca internals locales) see https://github.com/Ultragreen/carioca/tree/master/config/locales
|
623
|
+
|
624
|
+
```ruby
|
625
|
+
# global
|
626
|
+
not_root: { code: 40, key: 'finisher.messages.not_root' },
|
627
|
+
options_incompatibility: { code: 410, key: 'finisher.messages.options_incompatibility'},
|
628
|
+
service_dependence_missing: { code: 430, key: 'finisher.messages.service_dependence_missing'},
|
629
|
+
config_required: { code: 420, key: 'finisher.messages.config_required'},
|
630
|
+
setup_error: { code: 520, key: 'finisher.messages.setup_error'},
|
631
|
+
setup_success: { code: 0, key: 'finisher.messages.setup_success'},
|
632
|
+
sanitycheck_error: { code: 510, key: 'finisher.messages.sanitycheck_error'},
|
633
|
+
sanitycheck_success: { code: 0, key: 'finisher.messages.sanitycheck_success'},
|
634
|
+
configuration_error: { code: 501, key: 'finisher.messages.configuration_error'},
|
635
|
+
success_exit: { code: 0, key: 'finisher.messages.success_exit' },
|
636
|
+
quiet_exit: { code: 0 },
|
637
|
+
error_exit: { code: 50, key: 'finisher.messages.error_exit' },
|
638
|
+
|
639
|
+
# events
|
640
|
+
interrupt: { code: 330, key: 'finisher.messages.interrupt' },
|
641
|
+
|
642
|
+
# request & API
|
643
|
+
not_found: { code: 404, key: 'finisher.messages.not_found' },
|
644
|
+
already_exist: { code: 408, key: 'finisher.messages.already_exist' },
|
645
|
+
|
646
|
+
# daemon & API
|
647
|
+
status_ok: { code: 200, key: 'finisher.messages.status_ok' },
|
648
|
+
created: { code: 201, key: 'finisher.messages.created' },
|
649
|
+
accepted: { code: 202, key: 'finisher.messages.accepted' },
|
650
|
+
bad_request: { code: 400, key: 'finisher.messages.bad_request' },
|
651
|
+
status_ko: { code: 500, key: 'finisher.messages.status_ko' },
|
652
|
+
no_content: { code: 204, key: 'finisher.messages.no_content' },
|
653
|
+
```
|
654
|
+
|
655
|
+
This returns must be override from Config File (using Builtin Configuration Service) inbluding a key exit_cases:
|
656
|
+
like :
|
657
|
+
|
658
|
+
```yaml
|
659
|
+
---
|
660
|
+
:my_root:
|
661
|
+
:default:
|
662
|
+
:exit_cases:
|
663
|
+
:mystatus:
|
664
|
+
:code: 8000
|
665
|
+
key: 'my.own.i18n.key'
|
666
|
+
|
667
|
+
```
|
668
|
+
|
669
|
+
|
670
|
+
|
618
671
|
### Service Setup
|
619
672
|
|
620
673
|
### Service SanityCheck
|
data/Rakefile
CHANGED
@@ -45,17 +45,17 @@ namespace :yardoc do
|
|
45
45
|
end
|
46
46
|
task clobber: 'yardoc:clobber'
|
47
47
|
|
48
|
-
desc
|
48
|
+
desc 'Run CVE security audit over bundle'
|
49
49
|
task :audit do
|
50
50
|
system('bundle audit')
|
51
51
|
end
|
52
52
|
|
53
|
-
desc
|
53
|
+
desc 'Run dead line of code detection'
|
54
54
|
task :debride do
|
55
55
|
system('debride -w .debride_withelist .')
|
56
56
|
end
|
57
57
|
|
58
|
-
desc
|
58
|
+
desc 'Run SBOM CycloneDX Xml format file'
|
59
59
|
task :sbom do
|
60
60
|
system('cyclonedx-ruby -p .')
|
61
|
-
end
|
61
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.5
|
data/carioca.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = 'https://github.com/Ultragreen/carioca'
|
15
15
|
spec.description = 'Carioca 2: is a complete rewrite who provide a full IoC/DI light Container and a services registry, build with logs, config and Internationalization facilities for designing your applications'
|
16
16
|
|
17
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
17
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 3.2.3')
|
18
18
|
|
19
19
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
20
20
|
|
@@ -35,15 +35,15 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_dependency 'locale', '~> 2.1'
|
36
36
|
spec.add_dependency 'pastel', '~>0.8.0'
|
37
37
|
spec.add_dependency 'tty-prompt', '~>0.23.1'
|
38
|
+
spec.add_development_dependency 'bundle-audit', '~> 0.1.0'
|
38
39
|
spec.add_development_dependency 'code_statistics', '~> 0.2.13'
|
39
40
|
spec.add_development_dependency 'rake', '~> 13.0'
|
40
41
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
41
42
|
spec.add_development_dependency 'rubocop', '~> 1.32'
|
42
43
|
spec.add_development_dependency 'yard', '~> 0.9.27'
|
43
44
|
spec.add_development_dependency 'yard-rspec', '~> 0.1'
|
44
|
-
spec.add_development_dependency "bundle-audit", "~> 0.1.0"
|
45
45
|
spec.metadata['rubygems_mfa_required'] = 'false'
|
46
46
|
spec.add_dependency 'version', '~> 1.1'
|
47
|
-
spec.add_runtime_dependency 'ps-ruby','~> 0.0.4'
|
48
|
-
spec.add_development_dependency
|
47
|
+
spec.add_runtime_dependency 'ps-ruby', '~> 0.0.4'
|
48
|
+
spec.add_development_dependency 'cyclonedx-ruby', '~> 1.1'
|
49
49
|
end
|
@@ -34,7 +34,7 @@ module Carioca
|
|
34
34
|
@secure_store_file = DEFAULT_SECURE_STORE_FILE.dup
|
35
35
|
path = search_file_in_gem('carioca', 'config/locales')
|
36
36
|
@locales_load_path = Dir["#{File.expand_path(path)}/*.yml"]
|
37
|
-
Dir["#{path}/*.yml"].
|
37
|
+
Dir["#{path}/*.yml"].each do |file|
|
38
38
|
@locales_availables.push File.basename(file, '.yml').to_sym
|
39
39
|
end
|
40
40
|
@debugger_tracer = DEFAULT_DEBUGGER_TRACER.dup
|
data/lib/carioca/constants.rb
CHANGED
@@ -8,16 +8,16 @@ module Carioca
|
|
8
8
|
DEFAULT_CONFIG_ROOT = :carioca
|
9
9
|
DEFAULT_LOCALE = :en
|
10
10
|
|
11
|
-
DEFAULT_OUTPUT_TARGET =
|
11
|
+
DEFAULT_OUTPUT_TARGET = $stdout
|
12
12
|
DEFAULT_OUTPUT_MODE = :mono
|
13
13
|
DEFAULT_EMOJI_STATUS = true
|
14
14
|
DEFAULT_COLORS_STATUS = true
|
15
15
|
DEFAULT_LOG_LEVEL = :info
|
16
16
|
|
17
|
-
DEFAULT_USER_CONFIG_PATH =
|
17
|
+
DEFAULT_USER_CONFIG_PATH = '~/.carioca'
|
18
18
|
|
19
|
-
DEFAULT_MASTER_KEY_FILE = "#{DEFAULT_USER_CONFIG_PATH}/master.key"
|
20
|
-
DEFAULT_SECURE_STORE_FILE = "#{DEFAULT_USER_CONFIG_PATH}/secure.Store"
|
19
|
+
DEFAULT_MASTER_KEY_FILE = "#{DEFAULT_USER_CONFIG_PATH}/master.key".freeze
|
20
|
+
DEFAULT_SECURE_STORE_FILE = "#{DEFAULT_USER_CONFIG_PATH}/secure.Store".freeze
|
21
21
|
|
22
22
|
DEFAULT_DEBUGGER_TRACER = :output
|
23
23
|
|
@@ -29,9 +29,6 @@ module Carioca
|
|
29
29
|
|
30
30
|
DEFAULT_ENVIRONMENTS_LIST = %i[production staging test development].freeze
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
32
|
BUILTINS = {
|
36
33
|
configuration: {
|
37
34
|
type: :internal,
|
@@ -71,30 +68,30 @@ module Carioca
|
|
71
68
|
type: :internal,
|
72
69
|
service: 'Carioca::Services::Finisher::new',
|
73
70
|
description: 'The Finisher service of Carioca',
|
74
|
-
depends: [
|
71
|
+
depends: %i[i18n logger configuration]
|
75
72
|
},
|
76
73
|
toolbox: {
|
77
74
|
type: :internal,
|
78
75
|
service: 'Carioca::Services::Toolbox',
|
79
|
-
description: 'The Misceleanous Toolbox service of Carioca'
|
76
|
+
description: 'The Misceleanous Toolbox service of Carioca'
|
80
77
|
},
|
81
78
|
setup: {
|
82
79
|
type: :internal,
|
83
80
|
service: 'Carioca::Services::Setup::new',
|
84
81
|
description: 'The Setup service of Carioca',
|
85
|
-
depends: [
|
82
|
+
depends: %i[i18n logger configuration]
|
86
83
|
},
|
87
84
|
sanitycheck: {
|
88
85
|
type: :internal,
|
89
86
|
service: 'Carioca::Services::Sanitycheck::new',
|
90
87
|
description: 'The Sanitycheck service of Carioca',
|
91
|
-
depends: [
|
88
|
+
depends: %i[i18n logger configuration]
|
92
89
|
},
|
93
90
|
securestore: {
|
94
91
|
type: :internal,
|
95
92
|
service: 'Carioca::Services::SecureStore::new',
|
96
93
|
description: 'The SecureStore service of Carioca',
|
97
|
-
depends: [
|
94
|
+
depends: %i[i18n logger configuration]
|
98
95
|
},
|
99
96
|
debugger: {
|
100
97
|
type: :internal,
|
data/lib/carioca/dependencies.rb
CHANGED
@@ -5,8 +5,6 @@ require 'forwardable'
|
|
5
5
|
require 'singleton'
|
6
6
|
|
7
7
|
require 'socket'
|
8
|
-
require 'yaml'
|
9
|
-
require 'thread'
|
10
8
|
require 'fileutils'
|
11
9
|
require 'etc'
|
12
10
|
require 'json'
|
@@ -14,8 +12,6 @@ require 'uri'
|
|
14
12
|
require 'openssl'
|
15
13
|
require 'base64'
|
16
14
|
|
17
|
-
|
18
|
-
|
19
15
|
require 'rubygems'
|
20
16
|
require 'i18n'
|
21
17
|
require 'locale'
|
data/lib/carioca/mixin.rb
CHANGED
@@ -7,7 +7,7 @@ module Carioca
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def add(service:, definition:)
|
10
|
-
Carioca::Registry.get.add service
|
10
|
+
Carioca::Registry.get.add service:, definition:
|
11
11
|
end
|
12
12
|
|
13
13
|
def services
|
@@ -18,9 +18,9 @@ module Carioca
|
|
18
18
|
Carioca::Registry.get.active_services
|
19
19
|
end
|
20
20
|
|
21
|
-
def create_methods(name, &
|
22
|
-
define_method
|
23
|
-
self.class.send(:define_method, name, &
|
21
|
+
def create_methods(name, &)
|
22
|
+
define_method(name, &)
|
23
|
+
self.class.send(:define_method, name, &)
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.extended(base)
|
data/lib/carioca/registry.rb
CHANGED
@@ -25,8 +25,8 @@ module Carioca
|
|
25
25
|
raise "Service not found: #{name}" unless @services.include? name
|
26
26
|
|
27
27
|
if @active_services.include? name
|
28
|
-
debug message: i18n.t('service.getting', name:
|
29
|
-
|
28
|
+
debug message: i18n.t('service.getting', name:) if @active_services.include?(:logger) && !%i[logger
|
29
|
+
i18n output].include?(name) && @@config.debug?
|
30
30
|
else
|
31
31
|
service = @services[name]
|
32
32
|
if service.include? :depends
|
@@ -36,9 +36,9 @@ module Carioca
|
|
36
36
|
get_service(name: dep) unless @active_services.include? dep
|
37
37
|
end
|
38
38
|
end
|
39
|
-
debug message: i18n.t('service.starting', name:
|
40
|
-
|
41
|
-
require
|
39
|
+
debug message: i18n.t('service.starting', name:) if @active_services.include?(:logger) && !%i[logger
|
40
|
+
i18n].include?(name) && @@config.debug?
|
41
|
+
require service[:resource] if %i[gem file stdlib].include? service[:type]
|
42
42
|
@active_services[name] ||= eval("lambda { #{service[:service]} }").call # lambda { Aservice::new }
|
43
43
|
end
|
44
44
|
@active_services[name]
|
@@ -55,7 +55,7 @@ module Carioca
|
|
55
55
|
debug message: i18n.t('service.adding',
|
56
56
|
name: service)
|
57
57
|
end
|
58
|
-
checker = Carioca::Services::Validator.new
|
58
|
+
checker = Carioca::Services::Validator.new(service:, definition:)
|
59
59
|
checker.validate! unless skip_validation
|
60
60
|
@services[service] = checker.definition
|
61
61
|
end
|
@@ -78,7 +78,7 @@ module Carioca
|
|
78
78
|
locale = @@config.default_locale
|
79
79
|
target = @@config.log_file? ? @@config.log_file : 'STDOUT'
|
80
80
|
debug message: i18n.t('notify.locale', loc: locale) if @@config.debug?
|
81
|
-
debug message: i18n.t('notify.logger', target:
|
81
|
+
debug message: i18n.t('notify.logger', target:) if @@config.debug?
|
82
82
|
debug message: i18n.t('init.carioca') if @@config.debug?
|
83
83
|
debug message: i18n.t('init.builtins') if @@config.debug?
|
84
84
|
@@config.builtins.each do |service, spec|
|
@@ -95,7 +95,7 @@ module Carioca
|
|
95
95
|
file_name: @@config.filename)
|
96
96
|
end
|
97
97
|
registry_file.validated.each do |service, spec|
|
98
|
-
add service
|
98
|
+
add service:, definition: spec
|
99
99
|
end
|
100
100
|
debug message: i18n.t('init.registry.success') if @@config.debug?
|
101
101
|
end
|
@@ -29,7 +29,7 @@ module Carioca
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def add(service:, definition:)
|
32
|
-
checker = Carioca::Services::Validator.new
|
32
|
+
checker = Carioca::Services::Validator.new(service:, definition:)
|
33
33
|
checker.validate!
|
34
34
|
@validated[service] = checker.definition
|
35
35
|
end
|
@@ -50,7 +50,7 @@ module Carioca
|
|
50
50
|
@candidates.delete_if { |key, _value| BUILTINS.keys.include? key }
|
51
51
|
@altered = save.keys - @candidates.keys
|
52
52
|
@candidates.each do |service, definition|
|
53
|
-
checker = Carioca::Services::Validator.new
|
53
|
+
checker = Carioca::Services::Validator.new(service:, definition:)
|
54
54
|
checker.validate!
|
55
55
|
@validated[service] = checker.definition
|
56
56
|
end
|
@@ -4,7 +4,7 @@ module Carioca
|
|
4
4
|
module Services
|
5
5
|
class Debugger
|
6
6
|
def self.get(service:, trace: Carioca::Registry.config.debugger_tracer)
|
7
|
-
ProxyDebug.new service
|
7
|
+
ProxyDebug.new service:, trace:
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -19,14 +19,14 @@ module Carioca
|
|
19
19
|
@tracer_type = trace
|
20
20
|
end
|
21
21
|
|
22
|
-
def method_missing(methodname, *args, **keywords, &
|
22
|
+
def method_missing(methodname, *args, **keywords, &)
|
23
23
|
trace message: "BEGIN CALL for service #{@service} "
|
24
24
|
trace message: "Method called: #{methodname} "
|
25
25
|
trace message: "args : #{args.join ' '}"
|
26
26
|
trace message: "keywords : #{keywords}"
|
27
27
|
if block_given?
|
28
28
|
trace message: 'block given'
|
29
|
-
a = @service.send(methodname, *args, **keywords, &
|
29
|
+
a = @service.send(methodname, *args, **keywords, &)
|
30
30
|
else
|
31
31
|
a = @service.send(methodname, *args, **keywords)
|
32
32
|
end
|
@@ -1,131 +1,124 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# base Carioca namespace
|
4
4
|
module Carioca
|
5
|
+
module Services
|
6
|
+
class SpecificError < StandardError
|
7
|
+
attr_reader :error_case
|
5
8
|
|
6
|
-
|
9
|
+
def initialize(*arg, error_case: :status_ko)
|
10
|
+
super(*arg)
|
11
|
+
@error_case = error_case
|
12
|
+
end
|
13
|
+
end
|
7
14
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
# Exiter namespace
|
16
|
+
class Finisher
|
17
|
+
DEFAULT_FINISHERS_SPECS = {
|
18
|
+
# global
|
19
|
+
not_root: { code: 40, key: 'finisher.messages.not_root' },
|
20
|
+
options_incompatibility: { code: 410, key: 'finisher.messages.options_incompatibility' },
|
21
|
+
service_dependence_missing: { code: 430, key: 'finisher.messages.service_dependence_missing' },
|
22
|
+
config_required: { code: 420, key: 'finisher.messages.config_required' },
|
23
|
+
setup_error: { code: 520, key: 'finisher.messages.setup_error' },
|
24
|
+
setup_success: { code: 0, key: 'finisher.messages.setup_success' },
|
25
|
+
sanitycheck_error: { code: 510, key: 'finisher.messages.sanitycheck_error' },
|
26
|
+
sanitycheck_success: { code: 0, key: 'finisher.messages.sanitycheck_success' },
|
27
|
+
configuration_error: { code: 501, key: 'finisher.messages.configuration_error' },
|
28
|
+
success_exit: { code: 0, key: 'finisher.messages.success_exit' },
|
29
|
+
quiet_exit: { code: 0 },
|
30
|
+
error_exit: { code: 50, key: 'finisher.messages.error_exit' },
|
31
|
+
# events
|
32
|
+
interrupt: { code: 330, key: 'finisher.messages.interrupt' },
|
33
|
+
# request & API
|
34
|
+
not_found: { code: 404, key: 'finisher.messages.not_found' },
|
35
|
+
already_exist: { code: 408, key: 'finisher.messages.already_exist' },
|
36
|
+
# daemon & API
|
37
|
+
status_ok: { code: 200, key: 'finisher.messages.status_ok' },
|
38
|
+
created: { code: 201, key: 'finisher.messages.created' },
|
39
|
+
accepted: { code: 202, key: 'finisher.messages.accepted' },
|
40
|
+
bad_request: { code: 400, key: 'finisher.messages.bad_request' },
|
41
|
+
status_ko: { code: 500, key: 'finisher.messages.status_ko' },
|
42
|
+
no_content: { code: 204, key: 'finisher.messages.no_content' }
|
43
|
+
}.freeze
|
15
44
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
config_required: { code: 420, key: 'finisher.messages.config_required'},
|
25
|
-
setup_error: { code: 520, key: 'finisher.messages.setup_error'},
|
26
|
-
setup_success: { code: 0, key: 'finisher.messages.setup_success'},
|
27
|
-
sanitycheck_error: { code: 510, key: 'finisher.messages.sanitycheck_error'},
|
28
|
-
sanitycheck_success: { code: 0, key: 'finisher.messages.sanitycheck_success'},
|
29
|
-
configuration_error: { code: 501, key: 'finisher.messages.configuration_error'},
|
30
|
-
success_exit: { code: 0, key: 'finisher.messages.success_exit' },
|
31
|
-
quiet_exit: { code: 0 },
|
32
|
-
error_exit: { code: 50, key: 'finisher.messages.error_exit' },
|
33
|
-
# events
|
34
|
-
interrupt: { code: 330, key: 'finisher.messages.interrupt' },
|
35
|
-
# request & API
|
36
|
-
not_found: { code: 404, key: 'finisher.messages.not_found' },
|
37
|
-
already_exist: { code: 408, key: 'finisher.messages.already_exist' },
|
38
|
-
# daemon & API
|
39
|
-
status_ok: { code: 200, key: 'finisher.messages.status_ok' },
|
40
|
-
created: { code: 201, key: 'finisher.messages.created' },
|
41
|
-
accepted: { code: 202, key: 'finisher.messages.accepted' },
|
42
|
-
bad_request: { code: 400, key: 'finisher.messages.bad_request' },
|
43
|
-
status_ko: { code: 500, key: 'finisher.messages.status_ko' },
|
44
|
-
no_content: { code: 204, key: 'finisher.messages.no_content' },
|
45
|
-
}
|
45
|
+
def initialize
|
46
|
+
registry = Carioca::Registry.get
|
47
|
+
@output = registry.get_service name: :output
|
48
|
+
@i18n = registry.get_service name: :i18n
|
49
|
+
@configuration = registry.get_service name: :configuration
|
50
|
+
@exit_map = {}.merge DEFAULT_FINISHERS_SPECS
|
51
|
+
@exit_map.merge! @configuration.settings.exit_cases if @configuration.settings.exit_cases
|
52
|
+
end
|
46
53
|
|
47
|
-
|
48
|
-
|
49
|
-
registry = Carioca::Registry.get
|
50
|
-
@output = registry.get_service name: :output
|
51
|
-
@i18n = registry.get_service name: :i18n
|
52
|
-
@configuration = registry.get_service name: :configuration
|
53
|
-
@exit_map = DEFAULT_FINISHERS_SPECS
|
54
|
-
@exit_map.merge! @configuration.settings.exit_cases if @configuration.settings.exit_cases
|
55
|
-
end
|
54
|
+
def terminate(return_case: nil, exit_case: nil, more: nil)
|
55
|
+
raise 'Case must be a return or an exit' if return_case && exit_case
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
do_return(return_case: return_case, more: more) if return_case
|
61
|
-
end
|
62
|
-
|
63
|
-
# exiter
|
64
|
-
# @option [Symbol] :case an exit case
|
65
|
-
# @option [String] :more a complementary string to display
|
66
|
-
def do_exit!(exit_case: :quiet_exit, more: nil )
|
67
|
-
mess = ""
|
68
|
-
mess = @i18n.t(@exit_map[exit_case][:key]) if @exit_map[exit_case].include? :key
|
69
|
-
mess << " : " unless mess.empty? or not more
|
70
|
-
mess << "#{more}" if more
|
71
|
-
if @exit_map[exit_case][:code] == 0 then
|
72
|
-
@output.success mess unless mess.empty?
|
73
|
-
exit 0
|
74
|
-
else
|
75
|
-
@output.fatal mess unless mess.empty?
|
76
|
-
exit @exit_map[exit_case][:code]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def do_return(return_case: :status_ok, more: nil )
|
81
|
-
data = @exit_map[return_case].clone
|
82
|
-
if data.include? :key then
|
83
|
-
data[:message] = @i18n.t(data[:key])
|
84
|
-
data.delete :key
|
85
|
-
end
|
86
|
-
data[:more] = more if more
|
87
|
-
return data
|
88
|
-
end
|
57
|
+
do_exit!(exit_case:, more:) if exit_case
|
58
|
+
do_return(return_case:, more:) if return_case
|
59
|
+
end
|
89
60
|
|
90
|
-
|
91
|
-
|
61
|
+
# exiter
|
62
|
+
# @option [Symbol] :case an exit case
|
63
|
+
# @option [String] :more a complementary string to display
|
64
|
+
def do_exit!(exit_case: :quiet_exit, more: nil)
|
65
|
+
mess = ''
|
66
|
+
mess = @i18n.t(@exit_map[exit_case][:key]) if @exit_map[exit_case].include? :key
|
67
|
+
mess << ' : ' unless mess.empty? || !more
|
68
|
+
mess << more.to_s if more
|
69
|
+
if (@exit_map[exit_case][:code]).zero?
|
70
|
+
@output.success mess unless mess.empty?
|
71
|
+
exit 0
|
72
|
+
else
|
73
|
+
@output.fatal mess unless mess.empty?
|
74
|
+
exit @exit_map[exit_case][:code]
|
92
75
|
end
|
76
|
+
end
|
93
77
|
|
78
|
+
def do_return(return_case: :status_ok, more: nil)
|
79
|
+
data = @exit_map[return_case].clone
|
80
|
+
if data.include? :key
|
81
|
+
data[:message] = @i18n.t(data[:key])
|
82
|
+
data.delete :key
|
83
|
+
end
|
84
|
+
data[:more] = more if more
|
85
|
+
data
|
86
|
+
end
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
data = yield if block_given?
|
99
|
-
result = (structured)? do_return(return_case: return_case).merge({data: data }) : data
|
100
|
-
rescue Exception => e
|
101
|
-
key = (e.respond_to? :error_case)? e.error_case : :status_ko
|
102
|
-
more = (e.respond_to? :error_case)? e.message : "#{e.class.to_s} : #{e.message}"
|
103
|
-
result = do_return return_case: key, more: more
|
104
|
-
end
|
105
|
-
if status and structured and json then
|
106
|
-
p result
|
107
|
-
return {status: result[:code], data: JSON.pretty_generate(JSON.parse(result.to_json))}
|
108
|
-
elsif json then
|
109
|
-
return JSON.pretty_generate(JSON.parse(result.to_json)) if json
|
110
|
-
else
|
111
|
-
return result
|
112
|
-
end
|
113
|
-
end
|
88
|
+
def secure_raise(message: 'unknown error', error_case: :status_ko)
|
89
|
+
raise SpecificError.new(message, error_case:)
|
90
|
+
end
|
114
91
|
|
92
|
+
def secure_api_return(data: nil, return_case: nil, structured: false, json: true, status: true)
|
93
|
+
result = {}
|
94
|
+
begin
|
95
|
+
data = yield if block_given?
|
96
|
+
result = structured ? do_return(return_case:).merge({ data: }) : data
|
97
|
+
rescue StandardError => e
|
98
|
+
key = e.respond_to?(:error_case) ? e.error_case : :status_ko
|
99
|
+
more = e.respond_to?(:error_case) ? e.message : "#{e.class} : #{e.message}"
|
100
|
+
result = do_return return_case: key, more:
|
101
|
+
end
|
102
|
+
if status && structured && json
|
103
|
+
p result
|
104
|
+
{ status: result[:code], data: JSON.pretty_generate(JSON.parse(result.to_json)) }
|
105
|
+
elsif json
|
106
|
+
JSON.pretty_generate(JSON.parse(result.to_json)) if json
|
107
|
+
else
|
108
|
+
result
|
109
|
+
end
|
110
|
+
end
|
115
111
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
end
|
126
|
-
do_exit! exit_case: exit_case, more: more
|
127
|
-
end
|
128
|
-
|
112
|
+
def secure_execute!(exit_case: :success_exit)
|
113
|
+
begin
|
114
|
+
more = yield
|
115
|
+
key = exit_case
|
116
|
+
rescue StandardError => e
|
117
|
+
key = e.respond_to?(:error_case) ? e.error_case : :error_exit
|
118
|
+
more = e.respond_to?(:error_case) ? e.message : "#{e.class} : #{e.message}"
|
119
|
+
end
|
120
|
+
do_exit! exit_case: key, more:
|
129
121
|
end
|
130
122
|
end
|
131
|
-
end
|
123
|
+
end
|
124
|
+
end
|
@@ -43,7 +43,7 @@ module Carioca
|
|
43
43
|
success: { value: "\u{1F4AA}", alt: '[+]', text: '(SUCCESS)' },
|
44
44
|
debug: { value: "\u{1F41B}", alt: '[D]', text: '(DEBUG)' },
|
45
45
|
flat: { value: '', alt: '' },
|
46
|
-
skipped: { value: "\u{23E9}", alt: '[I]', text: '(SKIPPED)'}
|
46
|
+
skipped: { value: "\u{23E9}", alt: '[I]', text: '(SKIPPED)' }
|
47
47
|
}.freeze
|
48
48
|
LEVELS = %i[debug info warn error fatal unknown].freeze
|
49
49
|
ALIAS = {
|
@@ -76,12 +76,12 @@ module Carioca
|
|
76
76
|
|
77
77
|
LEVELS.each do |method|
|
78
78
|
define_method(method) do |message, session = nil, source = 'Carioca->Output'|
|
79
|
-
display(level: method, message
|
79
|
+
display(level: method, message:, session:, source:)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
@@alias.each_key do |method|
|
83
83
|
define_method(method) do |message, session = nil, source = 'Carioca->Output'|
|
84
|
-
display(level: method, message
|
84
|
+
display(level: method, message:, session:, source:)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -104,12 +104,12 @@ module Carioca
|
|
104
104
|
raise "Bad Level : #{level}" unless LEVELS.include? level
|
105
105
|
|
106
106
|
self.class.define_method(newalias) do |message, session = nil|
|
107
|
-
display({ level: newalias, message
|
107
|
+
display({ level: newalias, message:, session: })
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
111
|
# constructor
|
112
|
-
def initialize(level: :debug, mode: :mono, emoji: true, colors: true, target:
|
112
|
+
def initialize(level: :debug, mode: :mono, emoji: true, colors: true, target: $stdout)
|
113
113
|
registry = Carioca::Registry.get
|
114
114
|
@logger = registry.get_service name: :logger
|
115
115
|
@i18n = registry.get_service name: :i18n
|
@@ -183,7 +183,7 @@ module Carioca
|
|
183
183
|
block = proc { save }
|
184
184
|
@logger.send target_level, source, &block
|
185
185
|
end
|
186
|
-
@target.puts message if @mode == :mono
|
186
|
+
@target.puts message if (@mode == :mono) || (@mode == :dual)
|
187
187
|
end
|
188
188
|
end
|
189
189
|
end
|