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.



314
315
316
317
# File 'lib/coradoc/validation.rb', line 314

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

Instance Attribute Details

#fieldsObject (readonly)

Returns the value of attribute fields.



302
303
304
# File 'lib/coradoc/validation.rb', line 302

def fields
  @fields
end

#rulesObject (readonly)

Returns the value of attribute rules.



302
303
304
# File 'lib/coradoc/validation.rb', line 302

def rules
  @rules
end

Class Method Details

.define { ... } ⇒ Schema

Define a new schema

Yields:

  • Block for schema definition

Returns:

  • (Schema)

    The defined schema



308
309
310
311
312
# File 'lib/coradoc/validation.rb', line 308

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



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

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



335
336
337
# File 'lib/coradoc/validation.rb', line 335

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



325
326
327
# File 'lib/coradoc/validation.rb', line 325

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



344
345
346
# File 'lib/coradoc/validation.rb', line 344

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



360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/coradoc/validation.rb', line 360

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