-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvalidaciones_spec.rb
67 lines (53 loc) · 1.14 KB
/
validaciones_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
require 'rspec'
class ValidacionException < Exception
end
class Module
def validaciones(sym, &block)
metodo_original_sym = "#{sym}_ant".to_sym
alias_method metodo_original_sym, sym
define_method sym do |*args|
unless instance_exec *args, &block
raise ValidacionException.new
end
self.send metodo_original_sym, *args
end
end
end
class A
attr_accessor :valor_esperado, :valor_actual
def initialize(valor_esperado)
self.valor_esperado = valor_esperado
end
def m
42
end
def m_conparam(a)
a
end
validaciones :m do
self.valor_esperado == self.valor_actual
end
validaciones :m_conparam do |a|
self.valor_esperado == a
end
end
describe 'Agregamos validaciones' do
it '' do
a = A.new(3)
a.valor_actual = 3
expect(a.m).to eq(42)
end
it 'falla' do
a = A.new(3)
a.valor_actual = 2
expect { a.m }.to raise_error(ValidacionException)
end
it 'falla test conparam' do
a = A.new(1)
expect {a.m_conparam(3)}.to raise_error(ValidacionException)
end
it 'no falla test conparam' do
a = A.new(1)
expect(a.m_conparam(1)).to eq(1)
end
end