Module: ForestAdminDatasourceMongoid::Parser::Validation
- Includes:
- ForestAdminDatasourceToolkit::Components::Query::ConditionTree
- Included in:
- Collection, Utils::Schema::FieldsGenerator
- Defined in:
- lib/forest_admin_datasource_mongoid/parser/validation.rb
Instance Method Summary collapse
- #before_validation_callback?(model) ⇒ Boolean
- #get_validations(model, column) ⇒ Object
- #parse_column_validators(validators, column) ⇒ Object
- #parse_format_validator(validator, parsed_validations) ⇒ Object
- #parse_length_validator(validator, parsed_validations, column) ⇒ Object
- #parse_numericality_validator(validator, parsed_validations) ⇒ Object
Instance Method Details
#before_validation_callback?(model) ⇒ Boolean
14 15 16 17 18 19 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 14 def before_validation_callback?(model) default_callback_excluded = [:normalize_changed_in_place_attributes] model._validation_callbacks.any? do |callback| !default_callback_excluded.include?(callback.filter) && callback.kind == :before end end |
#get_validations(model, column) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 6 def get_validations(model, column) return [] if column.is_a?(Hash) return [] if before_validation_callback?(model) return [] unless model._validators? && model._validators[column.name.to_sym].size.positive? parse_column_validators(model._validators[column.name.to_sym], column) end |
#parse_column_validators(validators, column) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 21 def parse_column_validators(validators, column) validations = [] validators.each do |validator| next if validator.[:if] || validator.[:unless] || validator.[:on] case validator.class.to_s when Mongoid::Validatable::PresenceValidator.to_s validations << { operator: Operators::PRESENT } when ActiveModel::Validations::NumericalityValidator.to_s validations = parse_numericality_validator(validator, validations) when Mongoid::Validatable::LengthValidator.to_s validations = parse_length_validator(validator, validations, column) when Mongoid::Validatable::FormatValidator.to_s validations = parse_format_validator(validator, validations) end end validations end |
#parse_format_validator(validator, parsed_validations) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 71 def parse_format_validator(validator, parsed_validations) validator..each do |option, value| case option when :with = /\?([imx]){0,3}/.match(validator.[:with].to_s) = && [1] ? [1] : '' regex = value.source # NOTICE: Transform a Ruby regex into a JS one regex = regex.sub('\\A', '^').sub('\\Z', '$').sub('\\z', '$').gsub(/\n+|\s+/, '') parsed_validations << { operator: Operators::CONTAINS, value: "/#{regex}/#{options}" } end end parsed_validations end |
#parse_length_validator(validator, parsed_validations, column) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 53 def parse_length_validator(validator, parsed_validations, column) return unless get_column_type(column) == 'String' validator..each do |option, value| case option when :minimum parsed_validations << { operator: Operators::LONGER_THAN, value: value } when :maximum parsed_validations << { operator: Operators::SHORTER_THAN, value: value } when :is parsed_validations << { operator: Operators::LONGER_THAN, value: value } parsed_validations << { operator: Operators::SHORTER_THAN, value: value } end end parsed_validations end |
#parse_numericality_validator(validator, parsed_validations) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/forest_admin_datasource_mongoid/parser/validation.rb', line 40 def parse_numericality_validator(validator, parsed_validations) validator..each do |option, value| case option when :greater_than, :greater_than_or_equal_to parsed_validations << { operator: Operators::GREATER_THAN, value: value } when :less_than, :less_than_or_equal_to parsed_validations << { operator: Operators::LESS_THAN, value: value } end end parsed_validations end |