carioca 2.0.4 → 2.0.6
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.
- 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 +183 -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,141 +1,136 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# monkey patching of Hash
|
1
4
|
class Hash
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
memo[key.to_sym] = value
|
8
|
-
memo
|
9
|
-
end
|
5
|
+
def deep_symbolize
|
6
|
+
target = dup
|
7
|
+
target.each_with_object({}) do |(key, value), memo|
|
8
|
+
value = value.deep_symbolize if value.is_a?(Hash)
|
9
|
+
memo[key.to_sym] = value
|
10
10
|
end
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(name, *args)
|
14
|
+
if name.to_s =~ /(.+)=$/
|
15
|
+
self[Regexp.last_match(1).to_sym] = args.first
|
16
|
+
else
|
17
|
+
self[name.to_sym]
|
18
18
|
end
|
19
|
-
|
20
19
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
module Carioca
|
25
|
-
module Services
|
26
|
-
module Config
|
27
|
-
|
28
|
-
class ConfigFile
|
29
|
-
include Carioca::Constants
|
30
|
-
attr_accessor :filename, :data
|
31
|
-
attr_reader :error
|
32
|
-
|
33
|
-
def initialize(filename:)
|
34
|
-
@filename = filename
|
35
|
-
@data = {}
|
36
|
-
@error = ""
|
37
|
-
open
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def error?
|
42
|
-
return !@error.empty?
|
43
|
-
end
|
44
|
-
|
45
|
-
def create!(force: false)
|
46
|
-
write_ok = true
|
47
|
-
write_ok = force if File::exist? @filename
|
48
|
-
File.open(@filename, 'w') { |file| file.write(@data.to_yaml) } if write_ok
|
49
|
-
end
|
50
|
-
|
51
|
-
def open
|
52
|
-
if File::exist?(@filename) then
|
53
|
-
begin
|
54
|
-
@data = YAML.load_file(@filename)
|
55
|
-
rescue Exception => e
|
56
|
-
@error = e.message
|
57
|
-
@data = {}
|
58
|
-
end
|
59
|
-
end
|
60
|
-
prepare!
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def prepare!
|
65
|
-
config = Carioca::Registry.config
|
66
|
-
@data = {} unless @data.class == Hash
|
67
|
-
@data.delete_if {|key,value| config.config_root != key }
|
68
|
-
@data[config.config_root] = {} unless @data.include? config.config_root
|
69
|
-
config.supported_environment.each do |evt|
|
70
|
-
@data[config.config_root][evt] = {} unless @data[config.config_root].include? evt
|
71
|
-
end
|
72
|
-
@data[config.config_root][:default] = {} unless @data[config.config_root].include? :default
|
73
|
-
create!
|
74
|
-
end
|
20
|
+
end
|
75
21
|
|
22
|
+
# the carioca Namespace
|
23
|
+
module Carioca
|
24
|
+
# the service Namespace
|
25
|
+
module Services
|
26
|
+
# the Config Namespade
|
27
|
+
module Config
|
28
|
+
# config file manager
|
29
|
+
class ConfigFile
|
30
|
+
include Carioca::Constants
|
31
|
+
attr_accessor :filename, :data
|
32
|
+
attr_reader :error
|
33
|
+
|
34
|
+
def initialize(filename:)
|
35
|
+
@filename = filename
|
36
|
+
@data = {}
|
37
|
+
@error = ''
|
38
|
+
open
|
39
|
+
end
|
40
|
+
|
41
|
+
def error?
|
42
|
+
!@error.empty?
|
43
|
+
end
|
44
|
+
|
45
|
+
def create!(force: false)
|
46
|
+
write_ok = true
|
47
|
+
write_ok = force if File.exist? @filename
|
48
|
+
File.write(@filename, @data.to_yaml) if write_ok
|
49
|
+
end
|
50
|
+
|
51
|
+
def open
|
52
|
+
if File.exist?(@filename)
|
53
|
+
begin
|
54
|
+
@data = YAML.load_file(@filename)
|
55
|
+
rescue StandardError => e
|
56
|
+
@error = e.message
|
57
|
+
@data = {}
|
76
58
|
end
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
attr_accessor :stage
|
81
|
-
|
82
|
-
include Carioca::Helpers
|
83
|
-
|
84
|
-
def initialize(config_filename: , stage:, root:)
|
85
|
-
registry = Carioca::Registry.get
|
86
|
-
@logger = registry.get_service name: :logger
|
87
|
-
@i18n = registry.get_service name: :i18n
|
88
|
-
@debug = Carioca::Registry.config.debug?
|
89
|
-
@stage = stage
|
90
|
-
@root = root
|
91
|
-
@config_file = Carioca::Services::Config::ConfigFile::new filename: config_filename
|
92
|
-
initconf
|
93
|
-
end
|
94
|
-
|
95
|
-
def refresh
|
96
|
-
initconf
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
private
|
102
|
-
def initconf
|
103
|
-
newsets = {}
|
104
|
-
@logger.debug("Carioca->Config") { @i18n.t('config.load.error', message: @config_file.error) } if @config_file.error? and @debug
|
105
|
-
@content = @config_file.data
|
106
|
-
|
107
|
-
unless @stage then
|
108
|
-
newsets = @content
|
109
|
-
else
|
110
|
-
self.merge! @content[@root][:default]
|
111
|
-
data = @content[@root][@stage]
|
112
|
-
self.deep_merge! data
|
113
|
-
|
114
|
-
end
|
115
|
-
@logger.debug("Carioca->Config") { @i18n.t('config.load.success', from: @config_file.filename) } if @debug
|
116
|
-
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
|
121
|
-
end
|
59
|
+
end
|
60
|
+
prepare!
|
61
|
+
end
|
122
62
|
|
63
|
+
private
|
64
|
+
|
65
|
+
def prepare!
|
66
|
+
config = Carioca::Registry.config
|
67
|
+
@data = {} unless @data.instance_of?(Hash)
|
68
|
+
@data.delete_if { |key, _value| config.config_root != key }
|
69
|
+
@data[config.config_root] = {} unless @data.include? config.config_root
|
70
|
+
config.supported_environment.each do |evt|
|
71
|
+
@data[config.config_root][evt] = {} unless @data[config.config_root].include? evt
|
72
|
+
end
|
73
|
+
@data[config.config_root][:default] = {} unless @data[config.config_root].include? :default
|
74
|
+
create!
|
75
|
+
end
|
76
|
+
end
|
123
77
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
78
|
+
# A setting object
|
79
|
+
class Settings < Hash
|
80
|
+
attr_accessor :config_file, :stage
|
81
|
+
|
82
|
+
include Carioca::Helpers
|
83
|
+
|
84
|
+
def initialize(config_filename:, stage:, root:)
|
85
|
+
super
|
86
|
+
registry = Carioca::Registry.get
|
87
|
+
@logger = registry.get_service name: :logger
|
88
|
+
@i18n = registry.get_service name: :i18n
|
89
|
+
@debug = Carioca::Registry.config.debug?
|
90
|
+
@stage = stage
|
91
|
+
@root = root
|
92
|
+
@config_file = Carioca::Services::Config::ConfigFile.new filename: config_filename
|
93
|
+
initconf
|
94
|
+
end
|
130
95
|
|
96
|
+
def refresh
|
97
|
+
initconf
|
98
|
+
end
|
131
99
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
100
|
+
private
|
101
|
+
|
102
|
+
def initconf
|
103
|
+
if @config_file.error? && @debug
|
104
|
+
@logger.debug('Carioca->Config') do
|
105
|
+
@i18n.t('config.load.error', message: @config_file.error)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
@content = @config_file.data
|
109
|
+
|
110
|
+
if @stage
|
111
|
+
merge! @content[@root][:default]
|
112
|
+
deep_merge! @content[@root][@stage]
|
113
|
+
end
|
114
|
+
if @debug
|
115
|
+
@logger.debug('Carioca->Config') do
|
116
|
+
@i18n.t('config.load.success', from: @config_file.filename)
|
136
117
|
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# the settings object factory
|
123
|
+
class Factory
|
124
|
+
extend Forwardable
|
125
|
+
|
126
|
+
attr_accessor :settings
|
127
|
+
|
128
|
+
def_delegators :@settings, :refresh
|
129
|
+
|
130
|
+
def initialize(**keywords)
|
131
|
+
@settings = Carioca::Services::Config::Settings.new(**keywords)
|
137
132
|
end
|
138
|
-
|
133
|
+
end
|
139
134
|
end
|
135
|
+
end
|
140
136
|
end
|
141
|
-
|
@@ -1,58 +1,51 @@
|
|
1
|
-
|
2
|
-
module Services
|
3
|
-
class Debugger
|
4
|
-
|
5
|
-
def Debugger.get(service:, trace: Carioca::Registry.config.debugger_tracer)
|
6
|
-
return ProxyDebug::new service: service, trace: trace
|
7
|
-
end
|
1
|
+
# frozen_string_literal: false
|
8
2
|
|
3
|
+
module Carioca
|
4
|
+
module Services
|
5
|
+
class Debugger
|
6
|
+
def self.get(service:, trace: Carioca::Registry.config.debugger_tracer)
|
7
|
+
ProxyDebug.new service: service, trace: trace
|
8
|
+
end
|
9
|
+
end
|
9
10
|
|
11
|
+
class ProxyDebug
|
12
|
+
def initialize(service:, trace:)
|
13
|
+
registry = Carioca::Registry.get
|
14
|
+
@service = registry.get_service name: service
|
15
|
+
@tracers = %i[output logger]
|
16
|
+
raise "Debugger :trace is not valid : #{trace}, must be in : #{@tracers}" unless @tracers.include? trace
|
17
|
+
|
18
|
+
@tracer = registry.get_service name: trace
|
19
|
+
@tracer_type = trace
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(methodname, *args, **keywords, &block)
|
23
|
+
trace message: "BEGIN CALL for service #{@service} "
|
24
|
+
trace message: "Method called: #{methodname} "
|
25
|
+
trace message: "args : #{args.join ' '}"
|
26
|
+
trace message: "keywords : #{keywords}"
|
27
|
+
if block_given?
|
28
|
+
trace message: 'block given'
|
29
|
+
a = @service.send(methodname, *args, **keywords, &block)
|
30
|
+
else
|
31
|
+
a = @service.send(methodname, *args, **keywords)
|
10
32
|
end
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
trace message: "Method called: #{methodname} "
|
26
|
-
trace message: "args : #{args.join " "}"
|
27
|
-
trace message: "keywords : #{keywords.to_s}"
|
28
|
-
if block_given? then
|
29
|
-
trace message: "block given"
|
30
|
-
a = @service.send(methodname, *args, **keywords,&block)
|
31
|
-
else
|
32
|
-
a = @service.send(methodname, *args, **keywords)
|
33
|
-
end
|
34
|
-
trace message: "=> method returned: #{a} "
|
35
|
-
trace message: 'END CALL'
|
36
|
-
|
37
|
-
return a
|
38
|
-
end
|
39
|
-
|
40
|
-
def trace(message: )
|
41
|
-
if @tracer_type == :output then
|
42
|
-
save = @tracer.mode
|
43
|
-
@tracer.mode = :mono
|
44
|
-
@tracer.debug message
|
45
|
-
@tracer.mode = save
|
46
|
-
else
|
47
|
-
@tracer.debug("Carioca->ProxyDebug") { message }
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
33
|
+
trace message: "=> method returned: #{a} "
|
34
|
+
trace message: 'END CALL'
|
35
|
+
|
36
|
+
a
|
37
|
+
end
|
38
|
+
|
39
|
+
def trace(message:)
|
40
|
+
if @tracer_type == :output
|
41
|
+
save = @tracer.mode
|
42
|
+
@tracer.mode = :mono
|
43
|
+
@tracer.debug message
|
44
|
+
@tracer.mode = save
|
45
|
+
else
|
46
|
+
@tracer.debug('Carioca->ProxyDebug') { message }
|
55
47
|
end
|
56
|
-
|
48
|
+
end
|
57
49
|
end
|
50
|
+
end
|
58
51
|
end
|
@@ -1,20 +1,19 @@
|
|
1
|
-
|
2
|
-
module Services
|
3
|
-
class I18n
|
4
|
-
|
5
|
-
def I18n.get(default_locale: , load_path:, locales_availables: )
|
6
|
-
::I18n::Backend::Simple.include(::I18n::Backend::Fallbacks)
|
7
|
-
::I18n.load_path << load_path
|
8
|
-
::I18n.default_locale = default_locale
|
9
|
-
::I18n.fallbacks = locales_availables
|
10
|
-
return ::I18n
|
11
|
-
end
|
12
|
-
|
13
|
-
def I18n.get_system_locale
|
14
|
-
return ::Locale.candidates.to_s.split('_').first.to_sym
|
15
|
-
end
|
1
|
+
# frozen_string_literal: true
|
16
2
|
|
3
|
+
module Carioca
|
4
|
+
module Services
|
5
|
+
class I18n
|
6
|
+
def self.get(default_locale:, load_path:, locales_availables:)
|
7
|
+
::I18n::Backend::Simple.include(::I18n::Backend::Fallbacks)
|
8
|
+
::I18n.load_path << load_path
|
9
|
+
::I18n.default_locale = default_locale
|
10
|
+
::I18n.fallbacks = locales_availables
|
11
|
+
::I18n
|
12
|
+
end
|
17
13
|
|
18
|
-
|
14
|
+
def self.system_locale
|
15
|
+
::Locale.candidates.to_s.split('_').first.to_sym
|
16
|
+
end
|
19
17
|
end
|
18
|
+
end
|
20
19
|
end
|
@@ -1,2 +1,3 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Dir["#{File.dirname(__FILE__)}/*.rb"].sort.each { |file| require file unless File.basename(file) == 'init.rb' }
|