Object

com.snowplowanalytics.iglu.schemaddl.jsonschema

SanityLinter

Related Doc: package jsonschema

Permalink

object SanityLinter

Contains Schema validation logic for JSON AST to find nonsense (impossible) JSON Schemas, ie. Schemas which cannot validate ANY value, yet syntactically correct. This doesn't have logic to validate accordance to JSON Schema specs such as non-empty required or numeric maximum. Separate validator should be used for that.

See also

https://github.com/snowplow/iglu/issues/164

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. SanityLinter
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type LintProperty = Validation[String, Unit]

    Permalink

    Check of single property

  2. type LintSchema = Validation[NonEmptyList[String], Unit]

    Permalink

    Aggregated property lints

  3. type Linter = (Schema) ⇒ LintProperty

    Permalink

    Function able to lint Schema AST

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. val allLinters: Map[String, Linter]

    Permalink
  5. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  6. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  7. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  8. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  9. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  11. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  12. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  13. def lint(schema: Schema, height: Int, linters: List[Linter]): LintSchema

    Permalink

    Main working function, traversing JSON Schema It lints all properties on current level, then tries to extract all subschemas from properties like items, additionalItems etc and recursively lint them as well

    Main working function, traversing JSON Schema It lints all properties on current level, then tries to extract all subschemas from properties like items, additionalItems etc and recursively lint them as well

    schema

    parsed JSON AST

    height

    depth of linting

    linters

    of linters to be used

    returns

    non-empty list of summed failures (all, including nested) or unit in case of success

  14. val lintArrayMinMaxItems: Linter

    Permalink

    Check that schema with array type has minItems property not greater than maxItems

  15. val lintArrayProperties: Linter

    Permalink

    Check that schema with non-array type doesn't contain array properties

  16. val lintDescription: Linter

    Permalink

    Check that property contains description

  17. val lintNumericMinMax: Linter

    Permalink

    Check that schema with numeric type contains both minimum and maximum properties

  18. val lintNumericMinimumMaximum: Linter

    Permalink

    Check that schema with numeric type has minimum property not greater than maximum

  19. val lintNumericProperties: Linter

    Permalink

    Check that schema with non-numeric type doesn't contain numeric properties

  20. val lintObjectProperties: Linter

    Permalink

    Check that schema with non-object type doesn't contain object properties

  21. val lintOptionalNull: Linter

    Permalink

    Check that non-required fields have null type

  22. val lintRequiredPropertiesExist: Linter

    Permalink

    Check that all required properties exist in properties

    Check that all required properties exist in properties

    To do

    take patternProperties in account

  23. val lintRootObject: Linter

    Permalink

    Placeholder linter to be understood through --skip-checks, SanityLinter.lint() contains its logic

    Placeholder linter to be understood through --skip-checks, SanityLinter.lint() contains its logic

    Check that root of schema has object type and contains properties

  24. val lintStringLength: Linter

    Permalink

    Check that schema with string type contains maxLength property or other ways to extract max length

  25. val lintStringMaxLengthRange: Linter

    Permalink

    Check that schema with string type has maxLength property not greater than Redshift VARCHAR(max) 65535 See http://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html

  26. val lintStringMinMaxLength: Linter

    Permalink

    Check that schema with string type has minLength property not greater than maxLength

  27. val lintStringProperties: Linter

    Permalink

    Check that schema with non-string type doesn't contain string properties

  28. val lintUnknownFormats: Linter

    Permalink

    Check that schema doesn't contain unknown formats

  29. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  30. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  31. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  32. val propertySuccess: Validation[String, Unit]

    Permalink

    Some property was processed successfully

  33. val schemaSuccess: ValidationNel[String, Unit]

    Permalink

    Whole subschema was processed successfully

  34. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  35. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  36. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  37. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  38. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped