Class: Legion::Settings::Schema
- Inherits:
-
Object
- Object
- Legion::Settings::Schema
- Defined in:
- lib/legion/settings/schema.rb
Constant Summary collapse
- TYPE_NAMES =
{ string: 'String', integer: 'Integer', float: 'Float', boolean: 'Boolean', array: 'Array', hash: 'Hash' }.freeze
Instance Method Summary collapse
- #constraint(mod_name, key_path) ⇒ Object
- #define_override(mod_name, overrides) ⇒ Object
- #detect_unknown_keys(settings, known_defaults: []) ⇒ Object
-
#initialize ⇒ Schema
constructor
A new instance of Schema.
- #register(mod_name, defaults) ⇒ Object
- #registered_modules ⇒ Object
- #schema_for(mod_name) ⇒ Object
- #validate_module(mod_name, values) ⇒ Object
Constructor Details
#initialize ⇒ Schema
Returns a new instance of Schema.
6 7 8 9 |
# File 'lib/legion/settings/schema.rb', line 6 def initialize @schemas = {} @registered = [] end |
Instance Method Details
#constraint(mod_name, key_path) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/legion/settings/schema.rb', line 24 def constraint(mod_name, key_path) node = @schemas[mod_name.to_sym] key_path.each do |key| return nil unless node.is_a?(Hash) && node.key?(key) node = node[key] end node end |
#define_override(mod_name, overrides) ⇒ Object
18 19 20 21 22 |
# File 'lib/legion/settings/schema.rb', line 18 def define_override(mod_name, overrides) mod_name = mod_name.to_sym @schemas[mod_name] ||= {} apply_overrides(overrides, @schemas[mod_name]) end |
#detect_unknown_keys(settings, known_defaults: []) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/legion/settings/schema.rb', line 55 def detect_unknown_keys(settings, known_defaults: []) warnings = [] all_known = @registered + known_defaults settings.each_key do |key| next if all_known.include?(key) suggestion = find_similar(key, all_known) msg = "top-level key :#{key} is not registered by any module" msg += " (did you mean :#{suggestion}?)" if suggestion warnings << { module: :unknown_key, path: key.to_s, message: msg } end check_first_level_keys(settings, warnings) warnings end |
#register(mod_name, defaults) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/legion/settings/schema.rb', line 11 def register(mod_name, defaults) mod_name = mod_name.to_sym @registered << mod_name unless @registered.include?(mod_name) @schemas[mod_name] ||= {} infer_types(defaults, @schemas[mod_name]) end |
#registered_modules ⇒ Object
34 35 36 |
# File 'lib/legion/settings/schema.rb', line 34 def registered_modules @registered.dup end |
#schema_for(mod_name) ⇒ Object
38 39 40 |
# File 'lib/legion/settings/schema.rb', line 38 def schema_for(mod_name) @schemas[mod_name.to_sym] end |
#validate_module(mod_name, values) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/legion/settings/schema.rb', line 42 def validate_module(mod_name, values) mod_name = mod_name.to_sym mod_schema = @schemas[mod_name] return [] if mod_schema.nil? errors = [] validate_node(mod_schema, values, mod_name, '', errors) errors end |