Class: Coradoc::Validation::Schema

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/validation.rb

Overview

Validation schema definition

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSchema

Returns a new instance of Schema.



363
364
365
366
# File 'lib/coradoc/validation.rb', line 363

def initialize
  @fields = {}
  @rules = []
end

Instance Attribute Details

#fieldsObject (readonly)

Returns the value of attribute fields.



351
352
353
# File 'lib/coradoc/validation.rb', line 351

def fields
  @fields
end

#rulesObject (readonly)

Returns the value of attribute rules.



351
352
353
# File 'lib/coradoc/validation.rb', line 351

def rules
  @rules
end

Class Method Details

.define { ... } ⇒ Schema

Define a new schema

Yields:

  • Block for schema definition

Returns:

  • (Schema)

    The defined schema



357
358
359
360
361
# File 'lib/coradoc/validation.rb', line 357

def self.define(&block)
  schema = new
  schema.instance_eval(&block) if block
  schema
end

Instance Method Details

#add_rule(rule) ⇒ void

This method returns an undefined value.

Add a pre-built rule

Parameters:

  • rule (Rule)

    The rule to add



401
402
403
# File 'lib/coradoc/validation.rb', line 401

def add_rule(rule)
  @rules << rule
end

#optional(name, type: nil, **options) ⇒ void

This method returns an undefined value.

Define an optional field

Parameters:

  • name (Symbol)

    Field name

  • type (Class, nil) (defaults to: nil)

    Expected type

  • options (Hash)

    Additional options



384
385
386
# File 'lib/coradoc/validation.rb', line 384

def optional(name, type: nil, **options)
  @fields[name] = { required: false, type: type, **options }
end

#required(name, type: nil, **options) ⇒ void

This method returns an undefined value.

Define a required field

Parameters:

  • name (Symbol)

    Field name

  • type (Class, nil) (defaults to: nil)

    Expected type

  • options (Hash)

    Additional options



374
375
376
# File 'lib/coradoc/validation.rb', line 374

def required(name, type: nil, **options)
  @fields[name] = { required: true, type: type, **options }
end

#rule(name) { ... } ⇒ void

This method returns an undefined value.

Add a custom validation rule

Parameters:

  • name (Symbol)

    Rule name

Yields:

  • Block for validation



393
394
395
# File 'lib/coradoc/validation.rb', line 393

def rule(name, &block)
  @rules << Rules::Custom.new(name, block: block)
end

#validate(document) ⇒ Result

Validate a document

Parameters:

  • document (Object)

    Document to validate

Returns:

  • (Result)

    Validation result



409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
# File 'lib/coradoc/validation.rb', line 409

def validate(document)
  result = Result.new

  # Validate fields
  @fields.each do |name, config|
    validate_field(document, name, config, result)
  end

  # Run custom rules
  @rules.each do |rule|
    errors = rule.validate(document, schema: self)
    errors.each { |e| result.add_error(e, code: rule.name) }
  end

  result
end