-
Notifications
You must be signed in to change notification settings - Fork 0
/
When.py
111 lines (83 loc) · 2.47 KB
/
When.py
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
class When(object):
state = None
used = False
callableObject = None
def __init__(self, obj):
self.obj = obj
def of(self, item):
self.state = self.obj == item
if not self.state:
try:
self.state = isinstance(self.obj, item)
except Exception:
pass
return self
def then(self, operationToDo, *args, **kwargs):
if self.state:
self.used = True
self.callableObject = (
operationToDo(self.obj, *args, **kwargs)
if callable(operationToDo)
else operationToDo
)
return self
def otherwise(self, operationToDo, *args, **kwargs):
if not self.state and not self.used:
return (
operationToDo(self.obj, *args, **kwargs)
if callable(operationToDo)
else operationToDo
)
else:
return self.callableObject
if __name__ == '__main__':
def firstTest():
testArgument = []
def itsStr(n):
return "its str"
def itsInt(n):
return "its int"
def pop(n):
return "just dance"
def tellMeAboutIt(*arg):
return "wrong!"
value = (
When(testArgument)
.of(str).then(itsStr)
.of(10).then(itsInt)
.of([]).then(pop)
.otherwise(tellMeAboutIt)
)
assert value == "just dance"
def secondTest():
myTestArugment = 100
value = (
When(myTestArugment)
.of(25 * 4).then("you got it right.")
.otherwise("I think you missed the point.")
)
assert value == "you got it right."
value2 = (
When(10)
.of(15).then("yep!")
.otherwise(None)
)
assert value2 == None
def thirdTest():
def mutliplyBy(_, value):
return _ * value
def echoToTheScreen(_):
return "To the Screen!" + _
def castToInt(_):
return int(_)
value = (
When(13.2)
.of(int).then(mutliplyBy, 10)
.of(str).then(echoToTheScreen)
.of(float).then(castToInt)
.otherwise(None)
)
assert value == 13
firstTest()
secondTest()
thirdTest()