Conditionator 0.2 → 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/conditionator/hooks.rb +22 -12
- data/lib/conditionator.rb +2 -2
- metadata +3 -3
data/lib/conditionator/hooks.rb
CHANGED
@@ -31,6 +31,10 @@ module ConditionatorHooks
|
|
31
31
|
conditions :post
|
32
32
|
end
|
33
33
|
|
34
|
+
def failsafe_for method
|
35
|
+
self.class.data[self.class.name][method][:pre][:failsafe]
|
36
|
+
end
|
37
|
+
|
34
38
|
#Creates all methods needed for the hooks to take place.
|
35
39
|
def load_conditions
|
36
40
|
|
@@ -44,27 +48,30 @@ module ConditionatorHooks
|
|
44
48
|
|
45
49
|
if !self.respond_to? "#{method}_with_#{_when}_cond".to_sym
|
46
50
|
self.class.send :define_method, "#{method}_with_#{_when}_cond".to_sym do |*p|
|
51
|
+
execute_method = true
|
47
52
|
if(_when == :pre)
|
48
53
|
returns = arr_methods.collect do |m|
|
49
54
|
self.send(m, *p) ? true : false
|
50
55
|
end
|
51
56
|
returns.uniq!
|
52
57
|
|
58
|
+
#if one of the preconditions returned false, we act accordingly
|
53
59
|
if returns.include? false
|
54
|
-
|
60
|
+
execute_method = false
|
61
|
+
if !data[:failsafe].nil? #if we had setup a failsafe method, we use that
|
62
|
+
ret_value = self.send(data[:failsafe], *p) #if we execute the failsafe, that method will give us the returning value
|
63
|
+
else #otherwise, we raise the exception if the dev didn't mute it
|
64
|
+
raise PreconditionsNotMet if !data[:mute]
|
65
|
+
end
|
55
66
|
end
|
56
|
-
#if returns.length == 1 and returns.include? true
|
57
|
-
#data[:block].call(self) if !data[:block].nil?
|
58
|
-
#else
|
59
|
-
#raise PreconditionsNotMet
|
60
|
-
#end
|
61
67
|
end
|
62
|
-
|
68
|
+
if execute_method
|
69
|
+
ret_value = self.send "#{method}_without_#{_when}_cond".to_sym, *p
|
70
|
+
end
|
63
71
|
if(_when == :post)
|
64
72
|
arr_methods.each do |m|
|
65
73
|
self.send m, *p, ret_value
|
66
74
|
end
|
67
|
-
#data[:block].call(self) if !data[:block].nil?
|
68
75
|
end
|
69
76
|
return ret_value
|
70
77
|
end
|
@@ -79,7 +86,7 @@ module ConditionatorHooks
|
|
79
86
|
private
|
80
87
|
|
81
88
|
#Adds a pre or post condition to the list of conditions to be used
|
82
|
-
def add_condition_for type, for_method, conditions
|
89
|
+
def add_condition_for type, for_method, conditions, options = {}
|
83
90
|
key = self.name.to_s
|
84
91
|
if conditions.is_a? Array
|
85
92
|
condition_list = conditions
|
@@ -93,6 +100,9 @@ module ConditionatorHooks
|
|
93
100
|
|
94
101
|
_data[key][for_method][type] = Hash.new if _data[key][for_method][type].nil?
|
95
102
|
_data[key][for_method][type][:methods] = condition_list
|
103
|
+
_data[key][for_method][type][:failsafe] = options[:failsafe]
|
104
|
+
_data[key][for_method][type][:mute] = options[:mute]
|
105
|
+
|
96
106
|
end
|
97
107
|
|
98
108
|
|
@@ -108,13 +118,13 @@ module ConditionatorHooks
|
|
108
118
|
#Adds a precondition for the method 'method_name'
|
109
119
|
#method_name can be an array of methods, in which case, we add the same
|
110
120
|
#preconditions for all methos inside it.
|
111
|
-
def precondition_for method_name, preconditions
|
121
|
+
def precondition_for method_name, preconditions, options = {}
|
112
122
|
if method_name.is_a? Array
|
113
123
|
method_name.each do |m|
|
114
|
-
add_condition_for :pre, m, preconditions
|
124
|
+
add_condition_for :pre, m, preconditions, options
|
115
125
|
end
|
116
126
|
else
|
117
|
-
add_condition_for :pre, method_name, preconditions
|
127
|
+
add_condition_for :pre, method_name, preconditions, options
|
118
128
|
end
|
119
129
|
end
|
120
130
|
|
data/lib/conditionator.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Conditionator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-18 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: This gem allows you to set pre and post conditions to your methods, in
|
15
15
|
order to assure their successfull excecution
|
@@ -20,7 +20,7 @@ extra_rdoc_files: []
|
|
20
20
|
files:
|
21
21
|
- lib/conditionator.rb
|
22
22
|
- lib/conditionator/hooks.rb
|
23
|
-
homepage: https://github.com/deleteman/
|
23
|
+
homepage: https://github.com/deleteman/conditionator
|
24
24
|
licenses: []
|
25
25
|
post_install_message:
|
26
26
|
rdoc_options: []
|