Class: Opencdd::Validator::Rule

Inherits:
Object
  • Object
show all
Defined in:
lib/opencdd/validator/rule.rb

Overview

Deep base class for all validator rules. Owns shared guards that were previously copy-pasted across 12 rule subclasses:

- blank-value guard (skip empty cells unless +skip_blank?+
is overridden to false)
- code-column predicate
- reference-kind predicate

Subclasses implement value_passes? (the narrow check) and optionally override applies? and message.

Constant Summary collapse

REFERENCE_VALUE_KINDS =
%i[identifier_ref set_of_refs class_ref].freeze

Instance Method Summary collapse

Instance Method Details

#applies?(context) ⇒ Boolean

Default: applies to every entity. Override to narrow.

Returns:

  • (Boolean)


23
24
25
# File 'lib/opencdd/validator/rule.rb', line 23

def applies?(context)
  true
end

#blank?(value) ⇒ Boolean

── Shared predicates ───────────────────────────────────────

Returns:

  • (Boolean)


50
51
52
# File 'lib/opencdd/validator/rule.rb', line 50

def blank?(value)
  value.nil? || value.to_s.strip.empty?
end

#call(value, context) ⇒ Object

Template method: skip blank values (unless the subclass overrides skip_blank?), then delegate to value_passes?.



29
30
31
32
# File 'lib/opencdd/validator/rule.rb', line 29

def call(value, context)
  return true if skip_blank? && blank?(value)
  value_passes?(value, context)
end

#code_column?(context) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
# File 'lib/opencdd/validator/rule.rb', line 54

def code_column?(context)
  return false unless context.entity && context.entity.meta_class_irdi
  code_pid = Opencdd::MetaClasses.code_property_id_for(context.entity.meta_class_irdi.code)
  context.column_iri == code_pid
end

#idObject

Raises:

  • (NotImplementedError)


18
19
20
# File 'lib/opencdd/validator/rule.rb', line 18

def id
  raise NotImplementedError
end

#message(value, _context) ⇒ Object



34
35
36
# File 'lib/opencdd/validator/rule.rb', line 34

def message(value, _context)
  "#{id}: value #{value.inspect} is invalid"
end

#reference_kind?(context) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/opencdd/validator/rule.rb', line 60

def reference_kind?(context)
  REFERENCE_VALUE_KINDS.include?(context.value_kind)
end

#skip_blank?Boolean

Most rules skip empty values — MandatoryRule overrides to false so it can flag missing mandatory cells.

Returns:

  • (Boolean)


45
46
47
# File 'lib/opencdd/validator/rule.rb', line 45

def skip_blank?
  true
end

#value_passes?(value, context) ⇒ Boolean

── Hooks for subclasses ────────────────────────────────────

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


39
40
41
# File 'lib/opencdd/validator/rule.rb', line 39

def value_passes?(value, context)
  raise NotImplementedError
end