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
data/lib/carioca/helpers.rb
CHANGED
@@ -1,48 +1,46 @@
|
|
1
|
-
|
2
|
-
module Helpers
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Carioca
|
4
|
+
module Helpers
|
5
|
+
def log
|
6
|
+
get_service name: :logger
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def i18n
|
10
|
+
get_service name: :i18n
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def debug(message:)
|
14
|
+
log.debug(config.name) { message.to_s }
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
else
|
29
|
-
spec = Gem.searcher.find(_gem)
|
30
|
-
end
|
31
|
-
if spec then
|
32
|
-
if Gem::Specification.respond_to?(:find_by_name)
|
33
|
-
res = spec.lib_dirs_glob.split('/')
|
34
|
-
else
|
35
|
-
res = Gem.searcher.lib_dirs_for(spec).split('/')
|
36
|
-
end
|
37
|
-
res.pop
|
38
|
-
services_path = res.join('/').concat("/#{_file}")
|
39
|
-
return services_path if File::exist?(services_path)
|
40
|
-
return false
|
41
|
-
else
|
42
|
-
return false
|
43
|
-
end
|
17
|
+
# facility to find a file in gem path
|
18
|
+
# @param [String] gem a Gem name
|
19
|
+
# @param [String] file a file relative path in the gem
|
20
|
+
# @return [String] the path of the file, if found.
|
21
|
+
# @return [False] if not found
|
22
|
+
def search_file_in_gem(gem, file)
|
23
|
+
if Gem::Specification.respond_to?(:find_by_name)
|
24
|
+
begin
|
25
|
+
spec = Gem::Specification.find_by_name(gem)
|
26
|
+
rescue LoadError
|
27
|
+
spec = nil
|
44
28
|
end
|
29
|
+
else
|
30
|
+
spec = Gem.searcher.find(gem)
|
31
|
+
end
|
32
|
+
if spec
|
33
|
+
res = if Gem::Specification.respond_to?(:find_by_name)
|
34
|
+
spec.lib_dirs_glob.split('/')
|
35
|
+
else
|
36
|
+
Gem.searcher.lib_dirs_for(spec).split('/')
|
37
|
+
end
|
38
|
+
res.pop
|
39
|
+
services_path = res.join('/').concat("/#{file}")
|
40
|
+
return services_path if File.exist?(services_path)
|
45
41
|
|
46
|
-
|
42
|
+
end
|
43
|
+
false
|
47
44
|
end
|
48
|
-
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/carioca/mixin.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Carioca
|
2
4
|
module Injector
|
3
|
-
def inject(service:
|
4
|
-
|
5
|
+
def inject(service:)
|
6
|
+
create_methods(service) { return Carioca::Registry.get.get_service name: service }
|
5
7
|
end
|
6
8
|
|
7
|
-
def register(service
|
8
|
-
Carioca::Registry.get.add service: service, definition: definition
|
9
|
+
def register(service:, definition:)
|
10
|
+
Carioca::Registry.get.add service: service, definition: definition
|
9
11
|
end
|
10
12
|
|
11
13
|
def services
|
@@ -14,19 +16,15 @@ module Carioca
|
|
14
16
|
|
15
17
|
def active_services
|
16
18
|
Carioca::Registry.get.active_services
|
17
|
-
|
19
|
+
end
|
18
20
|
|
19
21
|
def create_methods(name, &block)
|
20
|
-
|
22
|
+
define_method name, &block
|
21
23
|
self.class.send(:define_method, name, &block)
|
22
24
|
end
|
23
25
|
|
24
26
|
def self.extended(base)
|
25
27
|
base.include self
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
end
|
30
29
|
end
|
31
|
-
|
32
|
-
end
|
30
|
+
end
|
data/lib/carioca/rake/manage.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'rake'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'carioca'
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
6
|
+
require 'tty-prompt'
|
7
|
+
require 'pastel'
|
8
8
|
|
9
9
|
$VERBOSE = nil
|
10
10
|
if Gem::Specification.respond_to?(:find_by_name)
|
@@ -12,7 +12,7 @@ if Gem::Specification.respond_to?(:find_by_name)
|
|
12
12
|
spec = Gem::Specification.find_by_name('carioca')
|
13
13
|
res = spec.lib_dirs_glob.split('/')
|
14
14
|
rescue LoadError
|
15
|
-
|
15
|
+
res = []
|
16
16
|
end
|
17
17
|
else
|
18
18
|
spec = Gem.searcher.find('carioca')
|
data/lib/carioca/registry.rb
CHANGED
@@ -1,94 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Carioca
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def Registry.config
|
8
|
-
return @@config
|
9
|
-
end
|
10
|
-
|
11
|
-
def Registry.configure(&block)
|
12
|
-
yield(@@config)
|
13
|
-
end
|
14
|
-
|
15
|
-
class << self
|
16
|
-
alias_method :get, :instance
|
17
|
-
alias_method :init, :instance
|
4
|
+
class Registry
|
5
|
+
include Carioca::Helpers
|
6
|
+
include Singleton
|
7
|
+
@@config = Configuration.new
|
18
8
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
attr_accessor :active_services
|
23
|
-
|
24
|
-
def get_service(name: )
|
9
|
+
def self.config
|
10
|
+
@@config
|
11
|
+
end
|
25
12
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
30
|
-
service = @services[name]
|
31
|
-
service[:depends].each do|dep|
|
32
|
-
debug message: i18n.t('service.depends', name: dep) if @active_services.include? :logger and ![:logger, :i18n].include? dep and @@config.debug?
|
33
|
-
get_service(name: dep) unless @active_services.include? dep
|
34
|
-
end if service.include? :depends
|
35
|
-
debug message: i18n.t('service.starting', name: name) if @active_services.include? :logger and ![:logger, :i18n].include? name and @@config.debug?
|
36
|
-
require service[:resource] if [:gem, :file, :stdlib].include? service[:type]
|
37
|
-
@active_services[name] ||= eval("lambda { #{service[:service]} }").call
|
38
|
-
end
|
39
|
-
return @active_services[name]
|
40
|
-
end
|
41
|
-
|
42
|
-
def config
|
43
|
-
return @@config
|
44
|
-
end
|
13
|
+
def self.configure
|
14
|
+
yield(@@config)
|
15
|
+
end
|
45
16
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
private
|
56
|
-
def prepare_logger
|
57
|
-
conf_i18n = @@config.builtins[:i18n]
|
58
|
-
add service: :i18n, definition: @@config.builtins[:i18n], skip_validation: true
|
59
|
-
conf_logger = @@config.builtins[:logger]
|
60
|
-
conf_logger[:service] = @@config.log_target
|
61
|
-
add service: :logger, definition: @@config.builtins[:logger], skip_validation: true
|
62
|
-
log = get_service name: :logger
|
63
|
-
log.level = @@config.log_level
|
64
|
-
end
|
17
|
+
class << self
|
18
|
+
alias get instance
|
19
|
+
alias init instance
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_accessor :services, :active_services
|
23
|
+
|
24
|
+
def get_service(name:)
|
25
|
+
raise "Service not found: #{name}" unless @services.include? name
|
65
26
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
@@config.builtins.each do |service, spec|
|
77
|
-
add service: service, definition: spec, skip_validation: true unless service == :logger
|
27
|
+
if @active_services.include? name
|
28
|
+
debug message: i18n.t('service.getting', name: name) if @active_services.include?(:logger) && !%i[logger
|
29
|
+
i18n output].include?(name) && @@config.debug?
|
30
|
+
else
|
31
|
+
service = @services[name]
|
32
|
+
if service.include? :depends
|
33
|
+
service[:depends].each do |dep|
|
34
|
+
debug message: i18n.t('service.depends', name: dep) if @active_services.include?(:logger) && !%i[logger
|
35
|
+
i18n].include?(dep) && @@config.debug?
|
36
|
+
get_service(name: dep) unless @active_services.include? dep
|
78
37
|
end
|
79
|
-
open_registry_file if File::exist? @@config.filename and @@config.init_from_file?
|
80
38
|
end
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
39
|
+
debug message: i18n.t('service.starting', name: 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
|
+
@active_services[name] ||= eval("lambda { #{service[:service]} }").call # lambda { Aservice::new }
|
43
|
+
end
|
44
|
+
@active_services[name]
|
45
|
+
end
|
46
|
+
|
47
|
+
def config
|
48
|
+
@@config
|
49
|
+
end
|
50
|
+
|
51
|
+
def add(service:, definition:, skip_validation: false)
|
52
|
+
raise "Service #{service} already exist." if @services.include?(service) && (skip_validation == false)
|
53
|
+
|
54
|
+
if @active_services.include?(:logger) && @@config.debug?
|
55
|
+
debug message: i18n.t('service.adding',
|
56
|
+
name: service)
|
57
|
+
end
|
58
|
+
checker = Carioca::Services::Validator.new service: service, definition: definition
|
59
|
+
checker.validate! unless skip_validation
|
60
|
+
@services[service] = checker.definition
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def prepare_logger
|
66
|
+
add service: :i18n, definition: @@config.builtins[:i18n], skip_validation: true
|
67
|
+
conf_logger = @@config.builtins[:logger]
|
68
|
+
conf_logger[:service] = @@config.log_target
|
69
|
+
add service: :logger, definition: @@config.builtins[:logger], skip_validation: true
|
70
|
+
log = get_service name: :logger
|
71
|
+
log.level = @@config.log_level
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize
|
75
|
+
@services = {}
|
76
|
+
@active_services = {}
|
77
|
+
prepare_logger
|
78
|
+
locale = @@config.default_locale
|
79
|
+
target = @@config.log_file? ? @@config.log_file : 'STDOUT'
|
80
|
+
debug message: i18n.t('notify.locale', loc: locale) if @@config.debug?
|
81
|
+
debug message: i18n.t('notify.logger', target: target) if @@config.debug?
|
82
|
+
debug message: i18n.t('init.carioca') if @@config.debug?
|
83
|
+
debug message: i18n.t('init.builtins') if @@config.debug?
|
84
|
+
@@config.builtins.each do |service, spec|
|
85
|
+
add service: service, definition: spec, skip_validation: true unless service == :logger
|
86
|
+
end
|
87
|
+
open_registry_file if File.exist?(@@config.filename) && @@config.init_from_file?
|
88
|
+
end
|
89
|
+
|
90
|
+
def open_registry_file
|
91
|
+
debug message: i18n.t('init.registry.processing', filename: @@config.filename) if @@config.debug?
|
92
|
+
registry_file = Carioca::RegistryFile.new filename: @@config.filename
|
93
|
+
if registry_file.altered? && @@config.debug?
|
94
|
+
debug message: i18n.t('notify.useless_entry', altered: registry_file.altered.to_s,
|
95
|
+
file_name: @@config.filename)
|
96
|
+
end
|
97
|
+
registry_file.validated.each do |service, spec|
|
98
|
+
add service: service, definition: spec
|
99
|
+
end
|
100
|
+
debug message: i18n.t('init.registry.success') if @@config.debug?
|
93
101
|
end
|
94
|
-
end
|
102
|
+
end
|
103
|
+
end
|
@@ -1,62 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Carioca
|
4
|
+
class RegistryFile
|
5
|
+
attr_accessor :validated, :altered
|
6
|
+
|
7
|
+
include Carioca::Constants
|
8
|
+
|
9
|
+
def initialize(filename:)
|
10
|
+
@filename = filename
|
11
|
+
@candidates = {}
|
12
|
+
@validated = {}
|
13
|
+
@altered = []
|
14
|
+
open
|
15
|
+
end
|
16
|
+
|
17
|
+
def altered?
|
18
|
+
!@altered.empty?
|
19
|
+
end
|
2
20
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@filename = filename
|
13
|
-
@candidates = Hash::new
|
14
|
-
@validated = Hash::new
|
15
|
-
@altered = []
|
16
|
-
open
|
17
|
-
end
|
18
|
-
|
19
|
-
def altered?
|
20
|
-
return !@altered.empty?
|
21
|
-
end
|
22
|
-
|
23
|
-
def create!(force: false)
|
24
|
-
write_ok = true
|
25
|
-
write_ok = force if File::exist? @filename
|
26
|
-
File.open(@filename, 'w') { |file| file.write(@validated.to_yaml) } if write_ok
|
27
|
-
end
|
28
|
-
|
29
|
-
def save!
|
30
|
-
create! force: true
|
31
|
-
end
|
32
|
-
|
33
|
-
def add(service:, definition: )
|
34
|
-
checker = Carioca::Services::Validator::new service: service , definition: definition
|
35
|
-
checker.validate!
|
36
|
-
@validated[service] = checker.definition
|
37
|
-
end
|
38
|
-
|
39
|
-
def open
|
40
|
-
if File::exist?(@filename) then
|
41
|
-
@candidates = YAML.load_file(@filename)
|
42
|
-
else
|
43
|
-
create!
|
44
|
-
end
|
45
|
-
prepare!
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
def prepare!
|
50
|
-
save = @candidates.dup
|
51
|
-
@candidates.delete_if {|key, value| BUILTINS.keys.include? key }
|
52
|
-
@altered = save.keys - @candidates.keys
|
53
|
-
@candidates.each do |service, definition|
|
54
|
-
checker = Carioca::Services::Validator::new service: service , definition: definition
|
55
|
-
checker.validate!
|
56
|
-
@validated[service] = checker.definition
|
57
|
-
end
|
58
|
-
end
|
21
|
+
def create!(force: false)
|
22
|
+
write_ok = true
|
23
|
+
write_ok = force if File.exist? @filename
|
24
|
+
File.write(@filename, @validated.to_yaml) if write_ok
|
25
|
+
end
|
26
|
+
|
27
|
+
def save!
|
28
|
+
create! force: true
|
29
|
+
end
|
59
30
|
|
31
|
+
def add(service:, definition:)
|
32
|
+
checker = Carioca::Services::Validator.new service: service, definition: definition
|
33
|
+
checker.validate!
|
34
|
+
@validated[service] = checker.definition
|
35
|
+
end
|
36
|
+
|
37
|
+
def open
|
38
|
+
if File.exist?(@filename)
|
39
|
+
@candidates = YAML.load_file(@filename)
|
40
|
+
else
|
41
|
+
create!
|
42
|
+
end
|
43
|
+
prepare!
|
44
|
+
end
|
60
45
|
|
46
|
+
private
|
47
|
+
|
48
|
+
def prepare!
|
49
|
+
save = @candidates.dup
|
50
|
+
@candidates.delete_if { |key, _value| BUILTINS.keys.include? key }
|
51
|
+
@altered = save.keys - @candidates.keys
|
52
|
+
@candidates.each do |service, definition|
|
53
|
+
checker = Carioca::Services::Validator.new service: service, definition: definition
|
54
|
+
checker.validate!
|
55
|
+
@validated[service] = checker.definition
|
56
|
+
end
|
61
57
|
end
|
62
|
-
end
|
58
|
+
end
|
59
|
+
end
|