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
EnumerableBehavior Mixin
Validators
See also the source code and spec tests.
FormatValidator
Extends the ActiveModel::Validations::FormatValidator, adding EnumerableBehavior.
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 ActiveModel::Validations::InclusionValidator, adding EnumerableBehavior.
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"] }
# or using helper method ...
# validates_inclusion_of :field, 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.
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
CardinalityValidator
Validates the cardinality of the attribute value.
CardinalityValidator is a subclass of ActiveModel::Validations::LengthValidator which
"tokenizes" values with Array.wrap(value)
. The "cardinality" of the value
is the length the array. Hence,
nil
and empty enumerables have cardinality 0- scalar values (including empty string) have cardinality 1.
CardinalityValidator customizes the :wrong_length
, :too_short
and :too_long
messages
of LengthValidator to use language appropriate to cardinality. You can also override these
options.
class CardinalityValidatable
include ActiveModel::Validations # required if not already included in class
include Hydra::Validations
attr_accessor :field
validates :field, cardinality: { is: 1 }
# or with helper method ...
# validates_cardinality_of :field, is: 1
# or, for single cardinality (same as above) ...
# validates_single_cardinality_of :field
end
> CardinalityValidatable.validators
=> [#<Hydra::Validations::CardinalityValidator:0x007fb91d1e9460 @attributes=[:field], @options={:is=>1}>]
> 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