carioca 2.0.2 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,175 +1,187 @@
1
+ # frozen_string_literal: false
2
+
1
3
  module Carioca
2
- module Services
3
- module Output
4
-
5
- module FormatsMapping
6
- COLORS = {
7
- :unknown => :red,
8
- :fatal => :red,
9
- :error => :red,
10
- :ko => :yellow,
11
- :warn => :yellow,
12
- :item => :white,
13
- :arrow => :white,
14
- :sending => :white,
15
- :calling => :white,
16
- :scheduling => :white,
17
- :trigger => :white,
18
- :receive => :white,
19
- :info => :cyan,
20
- :ok => :green,
21
- :success => :green,
22
- :debug => :magenta,
23
- :flat => :white
24
- }
25
-
26
- EMOJI = {
27
- :unknown => {:value => "\u{1F4A5}", :alt => '[!!]', :text => "(UNKNOWN)"},
28
- :fatal => {:value => "\u{26D4}", :alt => '[!!]', :text => "(FATAL)"},
29
- :error => {:value => "\u{1F6AB}", :alt => '[!]', :text => "(ERROR)"},
30
- :ko => {:value => "\u{1F44E}", :alt => '[-]', :text => "(KO)"},
31
- :warn => {:value => "\u{26A0}", :alt => '[/!\]', :text => "(WARNING)"},
32
- :info => {:value => "\u{2139}", :alt => '[i]', :text => "(INFO)"},
33
- :item => {:value => " \u{1F539}", :alt => '', :text => " *"},
34
- :arrow => {:value => " \u{27A1}", :alt => '', :text => " =>"},
35
- :calling => {:value => "\u{1F4DE}" , :alt => '[C]', :text => "(CALLING)"},
36
- :scheduling => {:value => "\u{23F2}" , :alt => '[S]', :text => "{SCHEDULING})"},
37
- :trigger => {:value => "\u{23F0}", :alt => '[T]', :text => "(TRIGGER)"},
38
- :sending => {:value => "\u{1F4E4}", :alt => '[>]', :text => "(SENDING)"},
39
- :receive => {:value => "\u{1F4E5}" , :alt => '[<]', :text => "(RECEIVE)"},
40
- :ok => {:value => "\u{1F44D}" , :alt => '[+]', :text => "(OK)"},
41
- :success => {:value => "\u{1F4AA}" , :alt => '[+]', :text => "(SUCCESS)"},
42
- :debug => {:value => "\u{1F41B}" , :alt => '[D]', :text => "(DEBUG)"},
43
- :flat => {:value => "", :alt => ""}
44
- }
45
- LEVELS = [:debug, :info, :warn, :error, :fatal, :unknown ]
46
- ALIAS = {
47
- :flat => :info,
48
- :item => :info,
49
- :ok => :info,
50
- :ko => :error,
51
- :trigger => :info,
52
- :scheduling => :info,
53
- :arrow => :info,
54
- :sending => :info,
55
- :calling => :info,
56
- :receive => :info,
57
- :success => :info
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
- class Provider
62
- include FormatsMapping
63
-
64
- attr_accessor :mode, :emoji, :color
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 = ''|
74
- self.display(level: method, message: message, session: session)
75
- end
76
- end
77
- @@alias.keys.each do |method|
78
- define_method(method) do |message, session = ''|
79
- self.display( level: method, message: message, session: session)
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
- self.level = level
108
- @mode = mode
109
- @emoji = emoji
110
- @color = colors
111
- if @mode == :dual then
112
- registry = Carioca::Registry.get
113
- @logger = registry.get_service name: :logger
114
- end
115
- raise "Unknown output mode : #{@mode}" unless MODE.include? @mode
116
- end
117
-
118
- # build a session number
119
- # @return [String] Session number
120
- def get_session
121
- return "#{Time.now.to_i.to_s}#{rand(999)}"
122
- end
123
-
124
- # getter for the current level
125
- # @return [Symbol] level
126
- def level
127
- return @active_levels.first
128
- end
129
-
130
- # virtual setter for level, set the current level
131
- # @raise a badLevel in case of bad level
132
- # @param [Symbol] level
133
- def level=(level)
134
- raise "Bad Level : #{level}" unless LEVELS.include? level
135
- @active_levels = LEVELS.dup
136
- @active_levels.shift(LEVELS.index(level))
137
- end
138
-
139
-
140
- # abstract method for log wrapper
141
- # @param [Hash] params
142
- # @option params [Symbol] :level, a valid level in LEVELS or ALIAS
143
- # @option params [String] :message text
144
- def display(level: , message: , session:)
145
- save = message.dup
146
- target_level = (@@alias.keys.include? level)? @@alias[level] : level
147
- if @active_levels.include? target_level then
148
- if @color then
149
- pastel = ::Pastel.new
150
- message = pastel.send @@colors[level], message
151
- end
152
- if @@emoji.include? level
153
- pattern = (@emoji)? @@emoji[level][:value] : @@emoji[level][:alt]
154
- pattern = "#{pattern} #{@@emoji[level][:text]}" if @@emoji[level].include? :text and !@emoji
155
- message = pattern + " " + message unless pattern.empty?
156
- end
157
- if @mode == :dual
158
-
159
- pattern = @@emoji[level][:alt]
160
- unless LEVELS.include? level
161
- save = "#{@@emoji[level][:text]} #{save}" if @@emoji[level].include? :text
162
- end
163
- @logger.send target_level, save
164
- end
165
- puts message
166
- end
167
- end
168
-
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?
169
175
  end
170
-
171
-
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
172
183
  end
184
+ end
173
185
  end
186
+ end
174
187
  end
175
-
@@ -1,49 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Carioca
2
- module Services
3
- class Validator
4
-
5
- attr_reader :definition
6
-
7
- include Carioca::Constants
8
-
9
- def initialize(definition: , service: )
10
- @definition = definition
11
- @service = service
12
- end
13
-
14
- def validate!
15
- validate_mandatories
16
- validate_full_and_type
17
- validate_not_builtins
18
- fill_content
19
- end
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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: false
2
+
3
+ require 'version'
4
+
5
+ # Carioca module
6
+ # @note namespace
7
+ module Carioca
8
+ # the version of Carioca
9
+ VERSION = Version.current
10
+ end
data/lib/carioca.rb CHANGED
@@ -1,7 +1,4 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- require_relative "carioca/dependencies"
4
-
5
- module Carioca
6
-
7
- end
3
+ require_relative 'carioca/version'
4
+ require_relative 'carioca/dependencies'
data/samples/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'carioca/rake/manage'
data/samples/test.rb CHANGED
@@ -1,98 +1,105 @@
1
+ # frozen_string_literal: false
2
+
1
3
  require 'rubygems'
2
4
  require 'carioca'
3
5
 
4
-
5
6
  Carioca::Registry.configure do |spec|
6
- spec.filename = './config/carioca.registry'
7
- spec.debug = false
8
- spec.init_from_file = true
9
- # spec.log_file = '/tmp/test.rge'
10
- spec.config_file = './config/settings.yml'
11
- spec.config_root = :monappli
12
- spec.environment = :development
13
- spec.default_locale = :fr
14
- spec.log_level = :debug
15
- spec.output_mode = :mono
16
-
17
- spec.locales_load_path << Dir[File.expand_path('./config/locales') + "/*.yml"]
7
+ spec.filename = './config/carioca.registry'
8
+ spec.debug = true
9
+ spec.init_from_file = true
10
+ # spec.log_file = '/tmp/test.rge'
11
+ spec.config_file = './config/settings.yml'
12
+ spec.config_root = :monappli
13
+ spec.environment = :development
14
+ spec.default_locale = :fr
15
+ spec.log_level = :debug
16
+ spec.output_mode = :mono
17
+ spec.output_emoji = true
18
+ spec.output_colors = true
19
+ spec.locales_load_path << Dir["#{File.expand_path('./config/locales')}/*.yml"]
20
+ spec.debugger_tracer = :output
18
21
  end
19
22
 
20
-
21
23
  class MyService
22
- extend Carioca::Injector
23
- inject service: :logger
24
-
25
- def initialize
26
- logger.warn(self.class.to_s) {'Init service'}
27
- end
28
-
29
- def hello
30
- logger.info(self.class.to_s) {'Hello World'}
31
- end
24
+ extend Carioca::Injector
25
+ inject service: :logger
26
+
27
+ def initialize
28
+ logger.warn(self.class.to_s) { 'Init service' }
29
+ end
30
+
31
+ def hello
32
+ logger.info(self.class.to_s) { 'Hello World' }
33
+ end
34
+
35
+ def method_test(_titi, tutu:)
36
+ @tutu = tutu
37
+ yield if block_given?
38
+ "result #{@tutu}"
39
+ end
32
40
  end
33
41
 
34
-
35
42
  spec = {
36
- service: 'MyService::new',
37
- type: :internal,
43
+ service: 'MyService::new',
44
+ type: :internal
38
45
  }
39
46
 
40
47
  Carioca::Registry.init.add service: :myservice, definition: spec
41
48
 
42
49
  logger = Carioca::Registry.get.get_service name: :logger
43
50
 
44
- logger.info(self.to_s) { "avaible services : #{Carioca::Registry.get.services.keys} "}
51
+ logger.info(to_s) { "avaible services : #{Carioca::Registry.get.services.keys} " }
45
52
  i18n = Carioca::Registry.get.get_service name: :i18n
46
53
  i18n.locale = :es
47
54
  p i18n.t(:test)
48
55
 
49
56
  config = Carioca::Registry.get.get_service name: :configuration
50
- config.settings.newkey = "value"
57
+ config.settings.newkey = 'value'
51
58
 
52
- logger.info(self.to_s) { config.settings }
59
+ logger.info(to_s) { config.settings }
53
60
 
54
61
  class MonAppli < Carioca::Container
55
- def test
56
- myservice.hello
57
- logger.warn(self.class.to_s) {uuid.generate}
62
+ def test
63
+ myservice.hello
64
+ logger.warn(self.class.to_s) { uuid.generate }
65
+ end
66
+
67
+ inject service: :uuid
68
+ inject service: :myservice
69
+ logger.info(to_s) { uuid.generate }
70
+
71
+ inject service: :output
72
+ inject service: :debugger
73
+
74
+ def test2
75
+ cycle = %i[unknown fatal error ko warn info item arrow scheduling trigger sending calling receive
76
+ ok success debug flat]
77
+ cycle.each do |verb|
78
+ output.send verb, verb.to_s
58
79
  end
59
-
60
- inject service: :uuid
61
- inject service: :myservice
62
- logger.info(self.to_s) { uuid.generate }
63
-
64
- inject service: :output
65
-
66
- def test2
67
- cycle = [:unknown,:fatal,:error,:ko,:warn,:info,:item,:arrow,:scheduling,:trigger,:sending, :calling,:receive,:ok,:success,:debug,:flat]
68
- cycle.each do |verb|
69
- output.send verb, verb.to_s
70
- end
71
- output.color = false
72
- cycle.each do |verb|
73
- output.send verb, verb.to_s
74
- end
75
- output.emoji = false
76
- cycle.each do |verb|
77
- output.send verb, verb.to_s
78
- end
79
- output.color = true
80
- cycle.each do |verb|
81
- output.send verb, verb.to_s
82
- end
83
-
80
+ output.color = false
81
+ cycle.each do |verb|
82
+ output.send verb, verb.to_s
83
+ end
84
+ output.emoji = false
85
+ cycle.each do |verb|
86
+ output.send verb, verb.to_s
84
87
  end
88
+ output.color = true
89
+ cycle.each do |verb|
90
+ output.send verb, verb.to_s
91
+ end
92
+ end
85
93
 
94
+ def test3
95
+ proxy = debugger.get service: :myservice
96
+ proxy.method_test 'param', tutu: 'keyword' do
97
+ puts 'titi'
98
+ end
99
+ end
86
100
  end
87
101
 
88
-
89
-
90
-
91
-
92
- appli = MonAppli::new
102
+ appli = MonAppli.new
93
103
  appli.test
94
- appli.test2
95
-
96
-
97
-
98
-
104
+ # appli.test2
105
+ appli.test3