lib/eco/api/organization/presets_factory.rb in eco-helpers-2.0.16 vs lib/eco/api/organization/presets_factory.rb in eco-helpers-2.0.17

- old
+ new

@@ -1,10 +1,12 @@ module Eco module API module Organization class PresetsFactory + ABILITIES = File.join(__dir__, 'presets_values.json') + INTEGRITY = File.join(__dir__, 'presets_integrity.json') class << self def all_abilities(hash = {}) Hash[abilities.each_with_object(nil).to_a].merge(hash) @@ -22,48 +24,40 @@ @abilities ||= abilities_model.keys end end - ABILITIES = File.join(__dir__, 'presets_values.json') - INTEGRITY = File.join(__dir__, 'presets_integrity.json') - DEFAULT_CUSTOM = 'presets_custom.json' - DEFAULT_MAP = 'presets_map.json' - - def initialize(presets_custom: DEFAULT_CUSTOM, presets_map: DEFAULT_MAP, enviro: nil, policy_groups: nil) + def initialize(enviro: nil, policy_groups: nil) fatal("Expecting Environment object. Given: #{enviro}") if enviro && !enviro.is_a?(Eco::API::Common::Session::Environment) @enviro = enviro + @policy_groups = policy_groups + end - @policy_groups = policy_groups - @presets_custom_file = presets_custom || DEFAULT_CUSTOM - @presets_map_file = presets_map || DEFAULT_MAP + # @return [Array<String>] all the abilities + def keys + self.class.abilities end - def new(*policy_group_ids_or_names) + def valid?(preset) + validate(perset).length == 0 + end - names = policy_group_ids_or_names.map do |id_name| - policy_groups.to_name(id_name)&.downcase - end.compact - - if presets_map - preset_names = names.map { |name| presets_map.fetch(name, nil) } - else # option to do not use preset mapping (so just the policy group name) - preset_names = names + def validate(preset) + [].tap do |errors| + if err = preset_errors(preset) + errors << "{ '#{key}' preset -> #{err}}" + end + if err = preset_integrity(preset) + errors << "{ '#{key}' preset -> #{err}}" + end end - compile(*preset_names) end - # @return [Array<String>] all the abilities - def keys - abilities_model.keys - end - private - def compile(*preset_names) - fatal("You need to specify an existing file for the custom presets.") if !@presets_custom - @presets_custom.values_at(*preset_names).compact.reduce({}) do |p1, p2| + def compile(*presets) + presets.compact.reduce({}) do |p1, p2| merge(p1, p2) end end def merge(preset1, preset2) @@ -77,15 +71,10 @@ ].compact.max result[key] = idx && values[idx] end end - # unsused: only play with the given abilities - def empty_model - JSON.parse(abilities_model.to_json).transform_values {|v| nil } - end - def preset_errors(preset) return "No preset given" if !preset errors = preset.map do |k, v| value_exists?(k, v) ? nil : "#{k}:#{v}" end.compact @@ -144,11 +133,11 @@ out[key] = values.each_with_object({}) {|v, h| h[v] = true } end end def ability_value_idx(ability, value) - abilities_model[ability].index(value) + abilities_model[ability].index(value) || -1 end def abilities_model self.class.abilities_model end @@ -159,59 +148,9 @@ unless @policy_groups.is_a?(Eco::API::Organization::PolicyGroups) @policy_groups = Eco::API::Organization::PolicyGroups.new(@policy_groups) end @policy_groups - end - - def presets_custom - return @presets_custom if instance_variable_defined?(:@presets_custom) - @presets_custom = nil - if @presets_custom_file - if (file = File.expand_path(@presets_custom_file)) && File.exists?(file) - @presets_custom = JSON.load(File.open(file)).tap do |custom_presets| - errors = custom_presets.each_with_object([]) do |(key, preset), errors| - if err = preset_errors(preset) - errors << "{ '#{key}' preset -> #{err}}" - end - if err = preset_integrity(preset) - errors << "{ '#{key}' preset -> #{err}}" - end - end - - fatal("File '#{file}' contains invalid presets:\n #{errors.join("\n ")}") if errors.length > 0 - end - end - end - end - - def presets_map - return @presets_map if instance_variable_defined?(:@presets_map) - @presets_map = nil - if @presets_map_file - if (file = File.expand_path(@presets_map_file)) && File.exists?(file) - fatal("Maps file specified without 'presets_custom.json' file. Aborting!") if !presets_custom - @presets_map = JSON.load(File.open(file)).tap do |map_presets| - - errors = [] - if policy_groups.length > 0 - errors = policy_groups.map do |pg| - exists = map_presets[pg.name.downcase] || presets_custom[pg.name.downcase] - exists ? nil : "'#{pg.name}'" - end.compact - - warn("No maps or no preset for policy group(s): #{errors.join(", ")}") if errors.length > 0 - end - - errors = map_presets.map do |source, dest| - presets_custom[dest] ? nil : "'#{dest}'" - end.compact - - warn("Unexisting mapped preset(s): #{errors.uniq.join(", ")}") if errors.length > 0 - - end - end - end end def fatal(msg) raise msg if !@enviro @enviro.logger.fatal(msg)