Module: DBC

Defined in:
lib/dbc.rb

Overview

Note:

DBC = Design By Contract, approche proposee initialement par Bertrand Meyer, notamment dans le langage Eiffel.

Support pour l'approche DBC... tres informel et "light"!

Defined Under Namespace

Classes: Failure

Class Method Summary collapse

Class Method Details

.assert(condition, message = nil) ⇒ void

This method returns an undefined value.

Verifie une assertion generale.

Parameters:

  • condition (Bool)

    La condition a verifier

  • message (String) (defaults to: nil)

    Le message a afficher si la condition n’est pas verifiee

Raises:

  • DBC::Failure si la condition est fausse, aucun effet sinon



22
23
24
# File 'lib/dbc.rb', line 22

def assert( condition, message = nil )
  fail Failure, "Assertion failed: #{message}" unless condition
end

.check_keyword_arguments(args, expected_keywords, message = '*** ') ⇒ void

This method returns an undefined value.

Verifie si les arguments specifies par mot-cles contiennent uniquement certains mots-cles permis.

Parameters:

  • args (Hash<Symbol,Object>)

    Les differents arguments dont on veut verifier les mots-cles

  • expected_keywords (Array<Symbol>)

    Les mots-cles permis/attendus

  • message (String) (defaults to: '*** ')

    Le message a afficher si l’argument est un mot-cle non permis

Raises:

  • DBC::Failure si un mot-cle inapproprie est present, aucun effet sinon



96
97
98
99
100
# File 'lib/dbc.rb', line 96

def check_keyword_arguments( args, expected_keywords, message = '*** ' )
  invalid_kw = args.keys.select { |kw| !(expected_keywords.include? kw) }

  fail Failure, message + "A keyword argument (in #{invalid_kw}) is not appropriate (not in #{expected_keywords})" unless invalid_kw.empty?
end

.check_type(val, expected_type, message = '*** ') ⇒ void

This method returns an undefined value.

Verifie le type d'un argument d'une methode. Utile pour avoir des constructeurs flexibles.

Parameters:

  • val

    La valeur dont on veut verifier le type

  • expected_type (Class, Array<Class>)

    Les types permis/attendus

  • message (String) (defaults to: '*** ')

    Le message a afficher si l’argument n’est pas d’un type approprie

Raises:

  • DBC::Failure si la valeur n’est pas du ou des types indiques, aucun effet sinon



64
65
66
67
68
69
70
# File 'lib/dbc.rb', line 64

def check_type( val, expected_type, message = '*** ' )
  if expected_type.class == Array
    fail Failure, message + "The type of #{val} is not in #{expected_type.inspect}" unless expected_type.include? val.class
  else
    fail Failure, message + "The type of #{val} is not #{expected_type.inspect}" unless val.kind_of? expected_type
  end
end

.check_value(val, expected_value, message = '*** ') ⇒ void

This method returns an undefined value.

Verifie la valeur specifique d'un argument d'une methode. Utile pour avoir des constructeurs flexibles.

Parameters:

  • val

    La valeur dont on veut verifier si elle est aceptable

  • expected_value (#==, Array<#==>)

    Les valeurs permises/attendues

  • message (defaults to: '*** ')

    Le message a afficher si l’argument n’a pas une valeur appropriee

Raises:

  • DBC::Failure si la valeur n’est pas permise, aucun effet sinon



80
81
82
83
84
85
86
# File 'lib/dbc.rb', line 80

def check_value( val, expected_value, message = '*** ' )
  if expected_value.class == Array
    fail Failure, message + "Value #{val} is not in #{expected_value.inspect}" unless expected_value.include? val
  else
    fail Failure, message + "Value #{val} is not equal to #{expected_value.inspect}" unless val == expected_value
  end
end

.ensure(condition, message = nil) ⇒ void

This method returns an undefined value.

Verifie une postcondition (consequent).

Parameters:

  • condition (Bool)

    La condition a verifier

  • message (String) (defaults to: nil)

    Le message a afficher si la condition n'est pas verifiee

Raises:

  • DBC::Failure si la condition est fausse, aucun effet sinon



42
43
44
# File 'lib/dbc.rb', line 42

def ensure( condition, message = nil )
  fail Failure, "Postcondition failed: #{message}" unless condition
end

.invariant(condition, message = nil) ⇒ void

This method returns an undefined value.

Verifie un invariant.

Parameters:

  • condition (Bool)

    La condition a verifier

  • message (String) (defaults to: nil)

    Le message a afficher si la condition n'est pas verifiee

Raises:

  • DBC::Failure si la condition est fausse, aucun effet sinon



52
53
54
# File 'lib/dbc.rb', line 52

def invariant( condition, message = nil )
  fail Failure, "Invariant failed: #{message}" unless condition
end

.require(condition, message = nil) ⇒ void

This method returns an undefined value.

Verifie une precondition (antecedent).

Parameters:

  • condition (Bool)

    La condition a verifier

  • message (String) (defaults to: nil)

    Le message a afficher si la condition n'est pas verifiee

Raises:

  • DBC::Failure si la condition est fausse, aucun effet sinon



32
33
34
# File 'lib/dbc.rb', line 32

def require( condition, message = nil )
  fail Failure, "Precondition failed: #{message}" unless condition
end