hydra-validations
Custom validators for Hydra applications, based on ActiveModel::Validations.
Dependencies
- Ruby >= 1.9.3
- ActiveModel 4.x
Installation
Include in your Gemfile:
gem 'hydra-validations'
and
bundle install
Validators
See also the source code and spec tests.
FormatValidator
Extends the ActiveModel version to validate the format of each member of an enumerable attribute value.
See documentation for ActiveModel::Validations::FormatValidator for usage and options.
class FormatValidatable
include ActiveModel::Validations # required if not already included in class
include Hydra::Validations
attr_accessor :field
validates :field, format: { with: /\A[[:alpha:]]+\Z/ }
# ... or
# validates_format_of :field, with: /\A[[:alpha:]]+\Z/
end
> v = FormatValidatable.new
=> #<FormatValidatable:0x007ffc55175300>
> v.field = ["foo", "bar"]
=> ["foo", "bar"]
> v.valid?
=> true
> v.field = ["foo1", "bar2"]
=> ["foo1", "bar2"]
> v.valid?
=> false
> v.errors[:field]
=> ["value \"foo1\" is invalid", "value \"bar2\" is invalid"]
> v.errors.full_messages
=> ["Field value \"foo1\" is invalid", "Field value \"bar2\" is invalid"]
InclusionValidator
Extends the ActiveModel version to validate inclusion of each member of an enumerable attribute value.
See documentation for ActiveModel::Validations::InclusionValidator for usage and options.
class InclusionValidatable
include ActiveModel::Validations # required if not already included in class
include Hydra::Validations
attr_accessor :field
validates :field, inclusion: { in: ["foo", "bar", "baz"] }
end
> v = InclusionValidatable.new
=> #<InclusionValidatable:0x007ffc53079318>
> v.field = ["foo", "bar"]
=> ["foo", "bar"]
> v.valid?
=> true
> v.field = ["foo", "bar", "spam", "eggs"]
=> ["foo", "bar", "spam", "eggs"]
> v.valid?
=> false
> v.errors[:field]
=> ["value \"spam\" is not included in the list", "value \"eggs\" is not included in the list"]
> v.errors.full_messages
=> ["Field value \"spam\" is not included in the list", "Field value \"eggs\" is not included in the list"]
UniquenessValidator
Validates the uniqueness of an attribute based on a Solr index query.
Intended for ActiveFedora 7.x.
class UniquenessValidatable < ActiveFedora::Base
include Hydra::Validations
name: 'descMetadata', type: ActiveFedora::QualifiedDublinCoreDatastream
has_attributes :title, datastream: 'descMetadata', multiple: false
# Can use with multi-value attributes, but single cardinality is required.
# See SingleCardinalityValidator below.
has_attributes :source, datastream: 'descMetadata', multiple: true
validates :source, uniqueness: { solr_name: "source_ssim" }
# ... or using helper method
validates_uniqueness_of :title, solr_name: "title_ssi"
end
SingleCardinalityValidatory
Validates that the attribute value is a scaler or single-member enumerable.
class Validatable
include ActiveModel::Validations # required if not already included in class
include Hydra::Validations
attr_accessor :field
validates :field, single_cardinality: true
end
> Validatable.validators
=> [#<Hydra::Validations::SingleCardinalityValidator:0x007fb91d1e9460 @attributes=[:field], @options={}>]
> v = Validatable.new
=> #<Validatable:0x007fb91d1c9188>
> v.field = "foo"
=> "foo"
> v.valid?
=> true
> v.field = ["foo"]
=> ["foo"]
> v.valid?
=> true
> v.field = ["foo", "bar"]
=> ["foo", "bar"]
> v.valid?
=> false