Class: JsonSchemaValidator
- Inherits:
-
ActiveModel::EachValidator
- Object
- ActiveModel::EachValidator
- JsonSchemaValidator
- Defined in:
- app/validators/json_schema_validator.rb
Overview
JsonSchemaValidator
Custom validator for json schema. Create a json schema within the json_schemas directory
class Project < ActiveRecord::Base
validates :data, json_schema: { filename: "file" }
end
Constant Summary collapse
- FILENAME_ALLOWED =
/\A[a-z0-9_-]*\Z/
- FilenameError =
Class.new(StandardError)
- BASE_DIRECTORY =
%w[app validators json_schemas].freeze
Instance Method Summary collapse
-
#initialize(options) ⇒ JsonSchemaValidator
constructor
A new instance of JsonSchemaValidator.
- #validate_each(record, attribute, value) ⇒ Object
Constructor Details
#initialize(options) ⇒ JsonSchemaValidator
Returns a new instance of JsonSchemaValidator.
17 18 19 20 21 22 23 24 |
# File 'app/validators/json_schema_validator.rb', line 17 def initialize() raise ArgumentError, "Expected 'filename' as an argument" unless [:filename] raise FilenameError, "Must be a valid 'filename'" unless [:filename].match?(FILENAME_ALLOWED) @base_directory = .delete(:base_directory) || BASE_DIRECTORY super() end |
Instance Method Details
#validate_each(record, attribute, value) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'app/validators/json_schema_validator.rb', line 26 def validate_each(record, attribute, value) value = value.to_h.stringify_keys if [:hash_conversion] == true value = Gitlab::Json.parse(value.to_s) if [:parse_json] == true && !value.nil? unless valid_schema?(value) record.errors.add(attribute, _("must be a valid json schema")) end end |