Class: Clir::DataManager::Manager::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/clir/data_manager/Validator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#managerObject (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

Returns:

  • (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.

Returns:

  • (Boolean)

    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 à

Returns:

  • (Boolean)

    true si la donnée people est une donnée de personne



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.message
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.

Returns:

  • (NilClass|String)

    Return nil si aucune erreur n’est



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

Returns:

  • (Boolean)


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.message
# 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.

Returns:

  • (Boolean)


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