carioca 1.4 → 2.0.1
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/.github/workflows/main.yml +18 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/Gemfile +6 -1
- data/Gemfile.lock +49 -0
- data/README.md +12 -220
- data/Rakefile +5 -66
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/carioca.gemspec +32 -23
- data/config/locales/en.yml +15 -0
- data/config/locales/fr.yml +19 -0
- data/lib/carioca/configuration.rb +47 -0
- data/lib/carioca/constants.rb +45 -0
- data/lib/carioca/container.rb +16 -0
- data/lib/carioca/dependencies.rb +19 -0
- data/lib/carioca/helpers.rb +44 -31
- data/lib/carioca/mixin.rb +32 -0
- data/lib/carioca/{tasks/rake.rb → rake/manage.rb} +2 -4
- data/lib/carioca/rake/tasks/registry.tasks +57 -0
- data/lib/carioca/registry.rb +93 -0
- data/lib/carioca/registry_file.rb +62 -0
- data/lib/carioca/services/config.rb +140 -0
- data/lib/carioca/services/i18n.rb +20 -0
- data/lib/carioca/services/init.rb +2 -0
- data/lib/carioca/validator.rb +49 -0
- data/lib/carioca.rb +2 -319
- data/samples/Rakefile +2 -0
- data/samples/config/carioca.registry +22 -0
- data/samples/config/locales/en.yml +2 -0
- data/samples/config/locales/es.yml +2 -0
- data/samples/config/locales/fr.yml +2 -0
- data/samples/config/settings.yml +24 -0
- data/samples/test.rb +71 -0
- metadata +46 -187
- data/AUTHORS +0 -8
- data/COPYRIGHT +0 -24
- data/ChangeLog +0 -10
- data/INSTALL +0 -7
- data/doc/manual.rdoc +0 -225
- data/lib/carioca/exceptions.rb +0 -9
- data/lib/carioca/private.rb +0 -168
- data/lib/carioca/services/configuration.rb +0 -203
- data/lib/carioca/services/debug.rb +0 -71
- data/lib/carioca/services/logger.rb +0 -58
- data/lib/carioca/services.rb +0 -143
- data/lib/carioca/tasks/registry_init.rake +0 -12
- data/spec/carioca_spec.rb +0 -468
- data/spec/config/.config +0 -14
- data/spec/config/services.registry +0 -55
- data/spec/init_spec.rb +0 -2
- data/spec/samples/dummy.rb +0 -11
- data/spec/samples/otherdummy.rb +0 -11
- data/spec/samples/requireddummy.rb +0 -11
- data/spec/spec_helper.rb +0 -18
- data/ultragreen_roodi_coding_convention.yml +0 -25
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'i18n'
|
7
|
+
require 'locale'
|
8
|
+
require 'deep_merge'
|
9
|
+
|
10
|
+
require_relative 'constants'
|
11
|
+
require_relative 'validator'
|
12
|
+
require_relative 'mixin'
|
13
|
+
require_relative 'container'
|
14
|
+
require_relative 'helpers'
|
15
|
+
require_relative 'configuration'
|
16
|
+
|
17
|
+
require_relative 'registry_file'
|
18
|
+
require_relative 'registry'
|
19
|
+
require_relative 'services/init'
|
data/lib/carioca/helpers.rb
CHANGED
@@ -1,35 +1,48 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Author : Romain GEORGES
|
4
|
-
# type : gem component library
|
5
|
-
# obj : Carioca Helpers definition Module
|
6
|
-
#---
|
1
|
+
module Carioca
|
2
|
+
module Helpers
|
7
3
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def preload_service(_options = {})
|
12
|
-
Carioca::Services::Registry.init.start_service _options
|
13
|
-
end
|
4
|
+
def log
|
5
|
+
return self.get_service name: :logger
|
6
|
+
end
|
14
7
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
options.specify_default_value_for :with_file => 'services/registry.yml'
|
19
|
-
options.merge
|
20
|
-
options.validate!
|
21
|
-
Carioca::Services::Registry.init.start_service :name => 'configuration', :params => { :config_file => options[:with_file]}
|
22
|
-
end
|
23
|
-
end
|
8
|
+
def i18n
|
9
|
+
return self.get_service name: :i18n
|
10
|
+
end
|
24
11
|
|
12
|
+
def debug(message: )
|
13
|
+
log.debug(self.config.name) { "#{message}" }
|
14
|
+
end
|
25
15
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
16
|
+
# facility to find a file in gem path
|
17
|
+
# @param [String] _gem a Gem name
|
18
|
+
# @param [String] _file a file relative path in the gem
|
19
|
+
# @return [String] the path of the file, if found.
|
20
|
+
# @return [False] if not found
|
21
|
+
def search_file_in_gem(_gem,_file)
|
22
|
+
if Gem::Specification.respond_to?(:find_by_name)
|
23
|
+
begin
|
24
|
+
spec = Gem::Specification.find_by_name(_gem)
|
25
|
+
rescue LoadError
|
26
|
+
spec = nil
|
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
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Carioca
|
2
|
+
module Injector
|
3
|
+
def inject(service: )
|
4
|
+
self.create_methods(service){return Carioca::Registry.get.get_service name: service }
|
5
|
+
end
|
6
|
+
|
7
|
+
def register(service: , definition:)
|
8
|
+
Carioca::Registry.get.add service: service, definition: definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def services
|
12
|
+
Carioca::Registry.get.services
|
13
|
+
end
|
14
|
+
|
15
|
+
def active_services
|
16
|
+
Carioca::Registry.get.active_services
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_methods(name, &block)
|
20
|
+
self.define_method name, &block
|
21
|
+
self.class.send(:define_method, name, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.extended(base)
|
25
|
+
base.include self
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -17,7 +17,5 @@ else
|
|
17
17
|
end
|
18
18
|
|
19
19
|
res.pop
|
20
|
-
tasks_path = res.join('/').concat('/lib/carioca/tasks/')
|
21
|
-
|
22
|
-
|
23
|
-
Dir["#{tasks_path}/*.rake"].each { |ext| load ext }
|
20
|
+
tasks_path = res.join('/').concat('/lib/carioca/rake/tasks/')
|
21
|
+
Dir["#{tasks_path}/*.task*"].each { |ext| load ext }
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "tty-prompt"
|
2
|
+
require "pastel"
|
3
|
+
|
4
|
+
namespace :carioca do
|
5
|
+
namespace :registry do
|
6
|
+
desc "Adding service to Carioca Registry file"
|
7
|
+
task :add_service do
|
8
|
+
begin
|
9
|
+
puts "Carioca : registering service :"
|
10
|
+
config = Carioca::Configuration::new
|
11
|
+
prompt = TTY::Prompt.new
|
12
|
+
pastel = Pastel.new
|
13
|
+
filename = prompt.ask("Registry File path ?", default: config.filename)
|
14
|
+
registry_file = Carioca::RegistryFile::new filename: filename
|
15
|
+
name = prompt.ask("Service name ?") { |q| q.required true }.to_sym
|
16
|
+
if config.builtins.include? name or registry_file.validated.include? name then
|
17
|
+
puts 'Carioca : service already defined or Builtins'
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
definition = {
|
21
|
+
:type => prompt.select("Choose the service type ?", [:gem, :stdlib, :file, :internal]),
|
22
|
+
:description => prompt.ask("Description ?", default: "The #{name} service"),
|
23
|
+
:service => prompt.ask("Service [#{name}] inline Proc Ruby code ?", default: name.to_s.capitalize)
|
24
|
+
}
|
25
|
+
map = {:gem => "Rubygem name", :stdlib => "StdLib name", :file => "absolut path of the Ruby file"}
|
26
|
+
definition[:resource] = prompt.ask("Give the #{map[definition[:type]]} ? ", default: name.to_s ) if map.keys.include? definition[:type]
|
27
|
+
have_depends = prompt.yes?("Did this service have dependencies ? ")
|
28
|
+
if have_depends then
|
29
|
+
potentials = config.builtins.merge(registry_file.validated).keys
|
30
|
+
definition[:depends] = prompt.multi_select("Choose your depends ?", potentials, min: 1)
|
31
|
+
end
|
32
|
+
puts "\n => Service : #{name}"
|
33
|
+
puts "Definition "
|
34
|
+
definition.each do |key,value|
|
35
|
+
puts " * #{key}: #{value}"
|
36
|
+
end
|
37
|
+
is_correct = prompt.yes?("Is it correct ? ")
|
38
|
+
rescue TTY::Reader::InputInterrupt
|
39
|
+
puts 'Carioca : interrupted'
|
40
|
+
exit 5
|
41
|
+
end
|
42
|
+
if is_correct then
|
43
|
+
begin
|
44
|
+
registry_file.add service: name, definition: definition
|
45
|
+
registry_file.save!
|
46
|
+
rescue => e
|
47
|
+
puts "Carioca: Can't save : #{e}"
|
48
|
+
exit 10
|
49
|
+
end
|
50
|
+
|
51
|
+
puts "Carioca : Registry saved"
|
52
|
+
else
|
53
|
+
puts 'Carioca : Nothing saved'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Carioca
|
2
|
+
class Registry
|
3
|
+
include Carioca::Helpers
|
4
|
+
include Singleton
|
5
|
+
@@config = Configuration::new
|
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
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_accessor :services
|
22
|
+
attr_accessor :active_services
|
23
|
+
|
24
|
+
def get_service(name: )
|
25
|
+
|
26
|
+
raise "Service not found: #{name}" unless @services.include? name
|
27
|
+
if @active_services.include? name then
|
28
|
+
debug message: i18n.t('service.getting', name: name) if @active_services.include? :logger and ![:logger, :i18n].include? name and @@config.debug?
|
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
|
45
|
+
|
46
|
+
def add(service: , definition:, skip_validation: false )
|
47
|
+
mess =
|
48
|
+
raise "Service #{service} already exist." if @services.include? service and skip_validation == false
|
49
|
+
debug message: i18n.t('service.adding', name: service) if @active_services.include? :logger and @@config.debug?
|
50
|
+
checker = Carioca::Services::Validator::new service: service , definition: definition
|
51
|
+
checker.validate! unless skip_validation
|
52
|
+
@services[service] = checker.definition
|
53
|
+
end
|
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
|
+
get_service name: :logger
|
63
|
+
end
|
64
|
+
|
65
|
+
def initialize
|
66
|
+
@services = Hash::new
|
67
|
+
@active_services = Hash::new
|
68
|
+
prepare_logger
|
69
|
+
locale = @@config.default_locale
|
70
|
+
target = (@@config.log_file?)? @@config.log_file : "STDOUT"
|
71
|
+
debug message: i18n.t('notify.locale', loc: locale) if @@config.debug?
|
72
|
+
debug message: i18n.t('notify.logger', target: target) if @@config.debug?
|
73
|
+
debug message: i18n.t('init.carioca') if @@config.debug?
|
74
|
+
debug message: i18n.t('init.builtins') if @@config.debug?
|
75
|
+
@@config.builtins.each do |service, spec|
|
76
|
+
add service: service, definition: spec, skip_validation: true unless service == :logger
|
77
|
+
end
|
78
|
+
open_registry_file if File::exist? @@config.filename and @@config.init_from_file?
|
79
|
+
end
|
80
|
+
|
81
|
+
def open_registry_file
|
82
|
+
debug message: i18n.t('init.registry.processing', filename: @@config.filename) if @@config.debug?
|
83
|
+
registry_file = Carioca::RegistryFile::new filename: @@config.filename
|
84
|
+
debug message: i18n.t('notify.useless_entry', altered: registry_file.altered.to_s, filename: @@config.filename ) if registry_file.altered? and @@config.debug?
|
85
|
+
registry_file.validated.each do |service,spec|
|
86
|
+
add service: service, definition: spec
|
87
|
+
end
|
88
|
+
debug message: i18n.t('init.registry.processing') if @@config.debug?
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Carioca
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
class RegistryFile
|
7
|
+
|
8
|
+
attr_accessor :validated, :altered
|
9
|
+
include Carioca::Constants
|
10
|
+
|
11
|
+
def initialize(filename:)
|
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
|
59
|
+
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
class Hash
|
2
|
+
# monkey patching
|
3
|
+
def deep_symbolize
|
4
|
+
target = dup
|
5
|
+
target.inject({}) do |memo, (key, value)|
|
6
|
+
value = value.deep_symbolize if value.is_a?(Hash)
|
7
|
+
memo[key.to_sym] = value
|
8
|
+
memo
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(name, *args, &block)
|
13
|
+
if name.to_s =~ /(.+)=$/
|
14
|
+
self[$1.to_sym] = args.first
|
15
|
+
else
|
16
|
+
self[name.to_sym]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
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
|
75
|
+
|
76
|
+
end
|
77
|
+
class Settings < Hash
|
78
|
+
|
79
|
+
attr_accessor :config_file
|
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
|
+
|
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?
|
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
|
+
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
class Factory
|
125
|
+
extend Forwardable
|
126
|
+
|
127
|
+
attr_accessor :settings
|
128
|
+
def_delegators :@settings, :refresh
|
129
|
+
|
130
|
+
|
131
|
+
def initialize(**keywords)
|
132
|
+
@settings = Carioca::Services::Config::Settings.new(**keywords)
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Carioca
|
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
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
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
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|