carioca 2.0.4 → 2.0.6
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 +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' }
|