carioca 2.0.4 → 2.0.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 +54 -0
- data/Gemfile +3 -4
- data/Gemfile.lock +36 -2
- data/Rakefile +40 -2
- data/VERSION +1 -0
- data/bin/console +3 -3
- data/carioca.gemspec +29 -29
- data/lib/carioca/configuration.rb +60 -57
- data/lib/carioca/constants.rb +52 -53
- data/lib/carioca/container.rb +8 -10
- data/lib/carioca/dependencies.rb +2 -0
- data/lib/carioca/helpers.rb +39 -41
- data/lib/carioca/mixin.rb +10 -12
- data/lib/carioca/rake/manage.rb +5 -5
- data/lib/carioca/registry.rb +95 -86
- data/lib/carioca/registry_file.rb +54 -57
- data/lib/carioca/services/config.rb +122 -127
- data/lib/carioca/services/debug.rb +45 -52
- data/lib/carioca/services/i18n.rb +15 -16
- data/lib/carioca/services/init.rb +3 -2
- data/lib/carioca/services/output.rb +181 -183
- data/lib/carioca/validator.rb +44 -45
- data/lib/carioca/version.rb +10 -0
- data/lib/carioca.rb +2 -5
- data/samples/Rakefile +2 -0
- data/samples/test.rb +73 -86
- metadata +96 -22
@@ -1,189 +1,187 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
1
3
|
module Carioca
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
4
|
+
module Services
|
5
|
+
module Output
|
6
|
+
module FormatsMapping
|
7
|
+
COLORS = {
|
8
|
+
unknown: :red,
|
9
|
+
fatal: :red,
|
10
|
+
error: :red,
|
11
|
+
ko: :yellow,
|
12
|
+
warn: :yellow,
|
13
|
+
item: :white,
|
14
|
+
arrow: :white,
|
15
|
+
sending: :white,
|
16
|
+
calling: :white,
|
17
|
+
scheduling: :white,
|
18
|
+
trigger: :white,
|
19
|
+
receive: :white,
|
20
|
+
info: :cyan,
|
21
|
+
ok: :green,
|
22
|
+
success: :green,
|
23
|
+
debug: :magenta,
|
24
|
+
flat: :white
|
25
|
+
}.freeze
|
26
|
+
|
27
|
+
EMOJI = {
|
28
|
+
unknown: { value: "\u{1F4A5}", alt: '[!!]', text: '(UNKNOWN)' },
|
29
|
+
fatal: { value: "\u{26D4}", alt: '[!!]', text: '(FATAL)' },
|
30
|
+
error: { value: "\u{1F6AB}", alt: '[!]', text: '(ERROR)' },
|
31
|
+
ko: { value: "\u{1F44E}", alt: '[-]', text: '(KO)' },
|
32
|
+
warn: { value: "\u{26A0}", alt: '[/!\]', text: '(WARNING)' },
|
33
|
+
info: { value: "\u{2139}", alt: '[i]', text: '(INFO)' },
|
34
|
+
item: { value: " \u{1F539}", alt: '', text: ' *' },
|
35
|
+
arrow: { value: " \u{27A1}", alt: '', text: ' =>' },
|
36
|
+
calling: { value: "\u{1F4DE}", alt: '[C]', text: '(CALLING)' },
|
37
|
+
scheduling: { value: "\u{23F2}", alt: '[S]', text: '{SCHEDULING})' },
|
38
|
+
trigger: { value: "\u{23F0}", alt: '[T]', text: '(TRIGGER)' },
|
39
|
+
sending: { value: "\u{1F4E4}", alt: '[>]', text: '(SENDING)' },
|
40
|
+
receive: { value: "\u{1F4E5}", alt: '[<]', text: '(RECEIVE)' },
|
41
|
+
ok: { value: "\u{1F44D}", alt: '[+]', text: '(OK)' },
|
42
|
+
success: { value: "\u{1F4AA}", alt: '[+]', text: '(SUCCESS)' },
|
43
|
+
debug: { value: "\u{1F41B}", alt: '[D]', text: '(DEBUG)' },
|
44
|
+
flat: { value: '', alt: '' }
|
45
|
+
}.freeze
|
46
|
+
LEVELS = %i[debug info warn error fatal unknown].freeze
|
47
|
+
ALIAS = {
|
48
|
+
flat: :info,
|
49
|
+
item: :info,
|
50
|
+
ok: :info,
|
51
|
+
ko: :error,
|
52
|
+
trigger: :info,
|
53
|
+
scheduling: :info,
|
54
|
+
arrow: :info,
|
55
|
+
sending: :info,
|
56
|
+
calling: :info,
|
57
|
+
receive: :info,
|
58
|
+
success: :info
|
59
|
+
|
60
|
+
}.freeze
|
61
|
+
end
|
62
|
+
|
63
|
+
class Provider
|
64
|
+
include FormatsMapping
|
65
|
+
|
66
|
+
attr_accessor :mode, :emoji, :color
|
67
|
+
|
68
|
+
@@alias = ALIAS.dup
|
69
|
+
@@colors = COLORS.dup
|
70
|
+
@@emoji = EMOJI.dup
|
71
|
+
|
72
|
+
MODE = %i[mono dual].freeze
|
73
|
+
|
74
|
+
LEVELS.each do |method|
|
75
|
+
define_method(method) do |message, session = '', source = 'Carioca->Output'|
|
76
|
+
display(level: method, message: message, session: session, source: source)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
@@alias.each_key do |method|
|
80
|
+
define_method(method) do |message, session = '', source = 'Carioca->Output'|
|
81
|
+
display(level: method, message: message, session: session, source: source)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def map_color(color:, analias:)
|
86
|
+
raise 'Color must be a Symbol' unless color.instance_of?(Symbol)
|
87
|
+
raise "Missing alias : #{analias}" unless LEVELS.include? analias
|
88
|
+
|
89
|
+
@@alias[analias] = color
|
90
|
+
end
|
91
|
+
|
92
|
+
def map_emoji(emoji:, analias:)
|
93
|
+
raise 'Emoji must be a String' unless color.instance_of?(String)
|
94
|
+
raise "Missing alias : #{analias}" unless LEVELS.include? analias
|
95
|
+
|
96
|
+
@@alias[analias] = emoji
|
97
|
+
end
|
98
|
+
|
99
|
+
def add_alias(newalias:, level:)
|
100
|
+
raise 'Alias must be a Symbol' unless newalias.instance_of?(Symbol)
|
101
|
+
raise "Bad Level : #{level}" unless LEVELS.include? level
|
102
|
+
|
103
|
+
self.class.define_method(newalias) do |message, session = ''|
|
104
|
+
display({ level: newalias, message: message, session: session })
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# constructor
|
109
|
+
def initialize(level: :debug, mode: :mono, emoji: true, colors: true)
|
110
|
+
registry = Carioca::Registry.get
|
111
|
+
@logger = registry.get_service name: :logger
|
112
|
+
@i18n = registry.get_service name: :i18n
|
113
|
+
@debug = Carioca::Registry.config.debug?
|
114
|
+
self.level = level
|
115
|
+
@mode = mode
|
116
|
+
@emoji = check_unicode_term ? emoji : false
|
117
|
+
@color = colors
|
118
|
+
set = []
|
119
|
+
set.push mode
|
120
|
+
set.push :emoji if @emoji
|
121
|
+
set.push :colors if @color
|
122
|
+
@logger.debug('Carioca->Output') { @i18n.t('output.load.context', confset: set.to_s) } if @debug
|
123
|
+
raise "Unknown output mode : #{@mode}" unless MODE.include? @mode
|
124
|
+
end
|
125
|
+
|
126
|
+
# build a session number
|
127
|
+
# @return [String] Session number
|
128
|
+
def generate_session
|
129
|
+
"#{Time.now.to_i}#{rand(999)}"
|
130
|
+
end
|
131
|
+
|
132
|
+
# getter for the current level
|
133
|
+
# @return [Symbol] level
|
134
|
+
def level
|
135
|
+
@active_levels.first
|
136
|
+
end
|
137
|
+
|
138
|
+
# virtual setter for level, set the current level
|
139
|
+
# @raise a badLevel in case of bad level
|
140
|
+
# @param [Symbol] level
|
141
|
+
def level=(level)
|
142
|
+
raise "Bad Level : #{level}" unless LEVELS.include? level
|
143
|
+
|
144
|
+
@active_levels = LEVELS.dup
|
145
|
+
@active_levels.shift(LEVELS.index(level))
|
146
|
+
end
|
147
|
+
|
148
|
+
# check if unicode must be used with term ENV
|
149
|
+
# @return [Boolean]
|
150
|
+
def check_unicode_term
|
151
|
+
return false unless ENV.include? 'TERM'
|
152
|
+
|
153
|
+
ENV.values_at('LC_ALL', 'LC_CTYPE',
|
154
|
+
'LANG').compact.first.include?('UTF-8') && ENV.values_at('TERM').first.include?('xterm')
|
155
|
+
end
|
156
|
+
|
157
|
+
# abstract method for log wrapper
|
158
|
+
# @param [Hash] params
|
159
|
+
# @option params [Symbol] :level, a valid level in LEVELS or ALIAS
|
160
|
+
# @option params [String] :message text
|
161
|
+
# @option params [String] :session an id/timestamp of session
|
162
|
+
def display(level:, message:, session:, source:)
|
163
|
+
message << "(#{session})" if session
|
164
|
+
save = message.dup
|
165
|
+
target_level = @@alias.keys.include?(level) ? @@alias[level] : level
|
166
|
+
if @active_levels.include? target_level
|
167
|
+
if @color
|
168
|
+
pastel = ::Pastel.new
|
169
|
+
message = pastel.send @@colors[level], message
|
60
170
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@@alias = ALIAS.dup
|
67
|
-
@@colors = COLORS.dup
|
68
|
-
@@emoji = EMOJI.dup
|
69
|
-
|
70
|
-
MODE = [:mono, :dual]
|
71
|
-
|
72
|
-
LEVELS.each do |method|
|
73
|
-
define_method(method) do |message, session = '', source = 'Carioca->Output'|
|
74
|
-
self.display(level: method, message: message, session: session, source: source)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
@@alias.keys.each do |method|
|
78
|
-
define_method(method) do |message, session = '',source = 'Carioca->Output'|
|
79
|
-
self.display( level: method, message: message, session: session, source: source)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def map_color(color: , analias: )
|
84
|
-
raise "Color must be a Symbol" unless color.class == Symbol
|
85
|
-
raise "Missing alias : #{analias}" unless LEVELS.include? analias
|
86
|
-
@@alias[analias] = color
|
87
|
-
end
|
88
|
-
|
89
|
-
def map_emoji(emoji: , analias: )
|
90
|
-
raise "Emoji must be a String" unless color.class == String
|
91
|
-
raise "Missing alias : #{analias}" unless LEVELS.include? analias
|
92
|
-
@@alias[analias] = emoji
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
def add_alias(newalias:, level:)
|
97
|
-
raise "Alias must be a Symbol" unless newalias.class == Symbol
|
98
|
-
raise "Bad Level : #{level}" unless LEVELS.include? level
|
99
|
-
self.class.define_method(newalias) do |message, session = ''|
|
100
|
-
self.display({ level: newalias, message: message, session: session})
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
|
105
|
-
# constructor
|
106
|
-
def initialize(level: :debug, mode: :mono , emoji: true, colors: true)
|
107
|
-
registry = Carioca::Registry.get
|
108
|
-
@logger = registry.get_service name: :logger
|
109
|
-
@i18n = registry.get_service name: :i18n
|
110
|
-
@debug = Carioca::Registry.config.debug?
|
111
|
-
self.level = level
|
112
|
-
@mode = mode
|
113
|
-
@emoji = (check_unicode_term)? emoji : false
|
114
|
-
@color = colors
|
115
|
-
set = []; set.push mode; set.push :emoji if @emoji ; set.push :colors if @color
|
116
|
-
@logger.debug("Carioca->Output") { @i18n.t('output.load.context', confset: set.to_s ) } if @debug
|
117
|
-
raise "Unknown output mode : #{@mode}" unless MODE.include? @mode
|
118
|
-
end
|
119
|
-
|
120
|
-
# build a session number
|
121
|
-
# @return [String] Session number
|
122
|
-
def get_session
|
123
|
-
return "#{Time.now.to_i.to_s}#{rand(999)}"
|
124
|
-
end
|
125
|
-
|
126
|
-
# getter for the current level
|
127
|
-
# @return [Symbol] level
|
128
|
-
def level
|
129
|
-
return @active_levels.first
|
130
|
-
end
|
131
|
-
|
132
|
-
# virtual setter for level, set the current level
|
133
|
-
# @raise a badLevel in case of bad level
|
134
|
-
# @param [Symbol] level
|
135
|
-
def level=(level)
|
136
|
-
raise "Bad Level : #{level}" unless LEVELS.include? level
|
137
|
-
@active_levels = LEVELS.dup
|
138
|
-
@active_levels.shift(LEVELS.index(level))
|
139
|
-
end
|
140
|
-
|
141
|
-
# check if unicode must be used with term ENV
|
142
|
-
# @return [Boolean]
|
143
|
-
def check_unicode_term
|
144
|
-
return false unless ENV.include? "TERM"
|
145
|
-
if ENV.values_at("LC_ALL","LC_CTYPE","LANG").compact.first.include?("UTF-8") and ENV.values_at('TERM').first.include? "xterm" then
|
146
|
-
return true
|
147
|
-
else
|
148
|
-
return false
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
|
-
# abstract method for log wrapper
|
154
|
-
# @param [Hash] params
|
155
|
-
# @option params [Symbol] :level, a valid level in LEVELS or ALIAS
|
156
|
-
# @option params [String] :message text
|
157
|
-
def display(level: , message: , session:, source:)
|
158
|
-
save = message.dup
|
159
|
-
target_level = (@@alias.keys.include? level)? @@alias[level] : level
|
160
|
-
if @active_levels.include? target_level then
|
161
|
-
if @color then
|
162
|
-
pastel = ::Pastel.new
|
163
|
-
message = pastel.send @@colors[level], message
|
164
|
-
end
|
165
|
-
if @@emoji.include? level
|
166
|
-
pattern = (@emoji)? @@emoji[level][:value] : @@emoji[level][:alt]
|
167
|
-
pattern = "#{pattern} #{@@emoji[level][:text]}" if @@emoji[level].include? :text and !@emoji
|
168
|
-
message = pattern + " " + message unless pattern.empty?
|
169
|
-
end
|
170
|
-
if @mode == :dual
|
171
|
-
|
172
|
-
pattern = @@emoji[level][:alt]
|
173
|
-
unless LEVELS.include? level
|
174
|
-
save = "#{@@emoji[level][:text]} #{save}" if @@emoji[level].include? :text
|
175
|
-
end
|
176
|
-
block = Proc::new {save}
|
177
|
-
@logger.send target_level, source, &block
|
178
|
-
end
|
179
|
-
puts message
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
171
|
+
if @@emoji.include? level
|
172
|
+
pattern = @emoji ? @@emoji[level][:value] : @@emoji[level][:alt]
|
173
|
+
pattern = "#{pattern} #{@@emoji[level][:text]}" if @@emoji[level].include?(:text) && !@emoji
|
174
|
+
message = "#{pattern} #{message}" unless pattern.empty?
|
183
175
|
end
|
184
|
-
|
185
|
-
|
176
|
+
if @mode == :dual
|
177
|
+
save = "#{@@emoji[level][:text]} #{save}" if !LEVELS.include?(level) && (@@emoji[level].include? :text)
|
178
|
+
block = proc { save }
|
179
|
+
@logger.send target_level, source, &block
|
180
|
+
end
|
181
|
+
puts message
|
182
|
+
end
|
186
183
|
end
|
184
|
+
end
|
187
185
|
end
|
186
|
+
end
|
188
187
|
end
|
189
|
-
|
data/lib/carioca/validator.rb
CHANGED
@@ -1,49 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Carioca
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
private
|
22
|
-
def validate_not_builtins
|
23
|
-
|
24
|
-
raise "Builtins reserved name #{@service.to_s}" if BUILTINS.keys.include? @service
|
25
|
-
end
|
26
|
-
|
27
|
-
def validate_mandatories
|
28
|
-
SERVICES_MANDATORY_SPECS.keys.each do |spec|
|
29
|
-
raise "Key : :#{spec} is mandatory in a service definition" unless @definition.include? spec
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def validate_full_and_type
|
34
|
-
@definition.each do |spec,value|
|
35
|
-
raise "Key : :#{spec} is not allowed in a service definition" unless SERVICES_FULL_LIST_SPECS.include? spec
|
36
|
-
raise "key : #{spec} must be a : #{SERVICES_FULL_LIST_SPECS[spec].to_s}" unless value.class == SERVICES_FULL_LIST_SPECS[spec]
|
37
|
-
if SERVICES_SPECS_DETAIL.include? spec then
|
38
|
-
raise "key : #{spec} must be in : #{SERVICES_SPECS_DETAIL[spec].to_s}" unless SERVICES_SPECS_DETAIL[spec].include? value
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def fill_content
|
44
|
-
@definition[:description] = @service.to_s unless @definition.include? :description
|
45
|
-
end
|
4
|
+
module Services
|
5
|
+
class Validator
|
6
|
+
attr_reader :definition
|
7
|
+
|
8
|
+
include Carioca::Constants
|
9
|
+
|
10
|
+
def initialize(definition:, service:)
|
11
|
+
@definition = definition
|
12
|
+
@service = service
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate!
|
16
|
+
validate_mandatories
|
17
|
+
validate_full_and_type
|
18
|
+
validate_not_builtins
|
19
|
+
fill_content
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
46
23
|
|
24
|
+
def validate_not_builtins
|
25
|
+
raise "Builtins reserved name #{@service}" if BUILTINS.keys.include? @service
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate_mandatories
|
29
|
+
SERVICES_MANDATORY_SPECS.each_key do |spec|
|
30
|
+
raise "Key : :#{spec} is mandatory in a service definition" unless @definition.include? spec
|
47
31
|
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_full_and_type
|
35
|
+
@definition.each do |spec, value|
|
36
|
+
raise "Key : :#{spec} is not allowed in a service definition" unless SERVICES_FULL_LIST_SPECS.include? spec
|
37
|
+
raise "key : #{spec} must be a : #{SERVICES_FULL_LIST_SPECS[spec]}" unless value.instance_of?(SERVICES_FULL_LIST_SPECS[spec])
|
38
|
+
|
39
|
+
raise "key : #{spec} must be in : #{SERVICES_SPECS_DETAIL[spec]}" if SERVICES_SPECS_DETAIL.include?(spec) && !(SERVICES_SPECS_DETAIL[spec].include? value)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def fill_content
|
44
|
+
@definition[:description] = @service.to_s unless @definition.include? :description
|
45
|
+
end
|
48
46
|
end
|
49
|
-
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/carioca.rb
CHANGED
data/samples/Rakefile
CHANGED