Class: Utf8mb3Validator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
app/validators/utf8mb3_validator.rb

Overview

While our database support utf8mb4, the same isn't true for the warehouse and there may be even tighter constraints downstream in NPG. This allows us to constrain affected fields until the downstream processes add support. This validator produces an error message listing the problem characters.

utf8mb3 is the subset of utf8 which can be represented in 3 bytes or fewer and is what is supported when the mysql character-set is set to utf8. Typically if covers the majority of language characters, but excludes emoji

A similar validator should be added for any tighter restrictions that may be applied for other fields.

Instance Method Summary collapse

Instance Method Details

#validate_each(record, attribute, value) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/validators/utf8mb3_validator.rb', line 15

 do
  # NOTE: The following attribute is not required for Microarray Genotyping.
  # I think this might be broken and suggests that there should be separate classes for project: one for
  # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping
  # that doesn't.
  include ProjectManager::Associations
  include BudgetDivision::Associations

  custom_attribute(:project_cost_code, required: true)
  custom_attribute(:funding_comments)
  custom_attribute(:collaborators)
  custom_attribute(:external_funding_source)
  custom_attribute(:sequencing_budget_cost_centre)
  custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS)
  custom_attribute(:gt_committee_tracking_id)

  before_validation do |record|
    record.project_cost_code = nil if record.project_cost_code.blank?
    record.project_funding_model = nil if record.project_funding_model.blank?
  end
end