Sha256: b507a72fc0afeee139c54f6cae908fda902ad66b069c74bf0da1efe8e71af6a7
Contents?: true
Size: 1.9 KB
Versions: 3
Compression:
Stored size: 1.9 KB
Contents
# frozen_string_literal: true module Sequel::Plugins::TyperoAttributes module ClassMethods def typero Typero.new self end end module InstanceMethods # calling typero! on any object will validate all fields def typero! field_name=nil return unless Typero.defined?(self.class) typero = self.class.typero typero.validate(self) do |name, err| errors.add(name, err) unless (errors.on(name) || []).include?(err) end # this are rules unique to database, so we check them here typero.rules.each do |field, rule| self[field] ||= {} if rule[:type] == 'hash' # check uniqe fields if rule[:unique] id = self[:id] || 0 value = self[field] # we only check if field is changed if value.present? && column_changed?(field) && self.class.xwhere('LOWER(%s)=LOWER(?) and id<>?' % field, value, id).first error = rule[:unique].class == TrueClass ? %[Value '"#{value}"' for #{field} allready exists] : rule[:unique] errors.add(field, error) unless (errors.on(field) || []).include?(error) end end # check protected fields if rule[:protected] && self[:id] if column_changed?(field) error = rule[:protected].class == TrueClass ? "value once defined can't be overwritten." : rule[:protected] errors.add(field, error) unless (errors.on(field) || []).include?(error) end end end # check single field if single field given if field_name raise ArgumentError.new 'Field :%s not found in %s' % [field_name, self] unless self[field_name] return unless errors.on(field_name) errors.on(field_name).join(', ') end true end def validate typero! super end end module DatasetMethods end end Sequel::Model.plugin :typero_attributes
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
typero-0.9.0 | ./lib/adapters/sequel.rb |
typero-0.8.1 | ./lib/adapters/sequel.rb |
typero-0.8.0 | ./lib/adapters/sequel.rb |