Class: Clir::DataManager::Manager::Validator
- Inherits:
-
Object
- Object
- Clir::DataManager::Manager::Validator
- Defined in:
- lib/clir/data_manager/Validator.rb
Instance Attribute Summary collapse
-
#manager ⇒ Object
readonly
Returns the value of attribute manager.
Instance Method Summary collapse
- #date_valid?(date) ⇒ Boolean
-
#initialize(manager) ⇒ Validator
constructor
A new instance of Validator.
-
#mail_valid?(mail) ⇒ Boolean
True si le mail
mail
est valide. -
#people_invalid?(people) ⇒ Boolean
valide.
-
#proceed_validation_propre(property, new_value, instance) ⇒ NilClass|String
Quand les attributs de la propriété définissent :valid_if qui permet de procéder à une validation de la donnée
new_value
. -
#url_invalid?(url) ⇒ Boolean
Noter que cette méthode fonctionne à l’inverse des autres : elle retourne un message d’erreur en cas d’invalidité et elle ne retourne rien si tout est OK.
-
#valid?(property, new_value, instance) ⇒ Boolean
-
main method -.
-
Constructor Details
#initialize(manager) ⇒ Validator
Returns a new instance of Validator.
14 15 16 |
# File 'lib/clir/data_manager/Validator.rb', line 14 def initialize(manager) @manager = manager end |
Instance Attribute Details
#manager ⇒ Object (readonly)
Returns the value of attribute manager.
12 13 14 |
# File 'lib/clir/data_manager/Validator.rb', line 12 def manager @manager end |
Instance Method Details
#date_valid?(date) ⇒ Boolean
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/clir/data_manager/Validator.rb', line 122 def date_valid?(date) date.match?(MSG[:reg_date_format]) || return begin m, d, y = date.split('/').map {|n| n.to_i } if LANG == 'fr' Time.new(y, d, m) else Time.new(y, m, d) end rescue return false end return true end |
#mail_valid?(mail) ⇒ Boolean
Returns true si le mail mail
est valide.
118 119 120 |
# File 'lib/clir/data_manager/Validator.rb', line 118 def mail_valid?(mail) mail.match?(/^(.{6,40})@([a-z\-_\.0-9]+)\.([a-z]{2,6})$/i) end |
#people_invalid?(people) ⇒ Boolean
valide. Une donnée de personne valide correspond à
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/clir/data_manager/Validator.rb', line 106 def people_invalid?(people) people.split(',').each do |patro| dpatro = patro.split(' ') dpatro.count < 6 || raise(ERRORS[:too_long_name] % patro) patro.match?(/[0-9?!_,;.…\/\\"]/) && raise(ERRORS[:bad_chars_in_name] % patro) end return nil # ok rescue Exception => e return e. end |
#proceed_validation_propre(property, new_value, instance) ⇒ NilClass|String
Quand les attributs de la propriété définissent :valid_if qui permet de procéder à une validation de la donnée new_value
trouvée, sinon, retourne l’erreur rencontrée.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/clir/data_manager/Validator.rb', line 86 def proceed_validation_propre(property, new_value, instance) meth = property.valid_if case meth when Symbol if new_value.respond_to?(meth) new_value.send(meth) elsif instance.respond_to?(meth) instance.send(meth, new_value) elsif instance.class.respond_to?(meth) instance.class.send(meth, new_value, instance) end when Proc property.valid_if.call(new_value, instance) else raise ERRORS[:unknow_validate_method] % meth.inspect end end |
#url_invalid?(url) ⇒ Boolean
Noter que cette méthode fonctionne à l’inverse des autres : elle retourne un message d’erreur en cas d’invalidité et elle ne retourne rien si tout est OK
141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/clir/data_manager/Validator.rb', line 141 def url_invalid?(url) require 'net/http' uri = URI(url) Net::HTTP.get(uri) return nil # ok rescue Exception => e return e. # ensure # puts "request: #{request.inspect}" # sleep 10 # exit end |
#valid?(property, new_value, instance) ⇒ Boolean
-
main method -
Quand l’éditeur (Manager::Editor) reçoit une nouvelle valeur pour la propriété property
(Property) il la checke ici pour savoir si elle est valide pour l’instance instance
Noter que l’instance permet aussi de récupérer la classe de cette instance pour obtenir certaines valeurs. La classe doit par ex. répondre à la méthode ::get pour obtenir une autre instance.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/clir/data_manager/Validator.rb', line 28 def valid?(property, new_value, instance) # # Une propriété requise doit exister # if property.required?(instance) && (!new_value || new_value.to_s.empty?) return ERRORS[:required_property] % property.name end if new_value case property.type when :email # # Un email # if not(mail_valid?(new_value)) return ERRORS[:invalid_mail] % new_value end when :date # # Une date # if not(date_valid?(new_value)) return ERRORS[:invalid_date] % new_value end when :url # # Une URL # if (err = url_invalid?(new_value)) return ERRORS[:invalid_url] % [new_value, err] end when :people # # Un ou des people # if (err = people_invalid?(new_value)) return ERRORS[:invalid_people] % [property.name, err] end end # suivant property.type if property.valid_if if (err = proceed_validation_propre(property, new_value, instance)) return ERRORS[:invalid_property] % [property.name, err] end end end #/si la nouvelle valeur est défini return nil # OK end |