@@ -31,7 +31,11 @@ public extension ParseHookTriggerable {
31
31
- parameter trigger: The `ParseHookTriggerType` type.
32
32
- parameter url: The endpoint of the hook.
33
33
*/
34
- init ( className: String , trigger: ParseHookTriggerType , url: URL ) {
34
+ init (
35
+ className: String ,
36
+ trigger: ParseHookTriggerType ,
37
+ url: URL
38
+ ) {
35
39
self . init ( )
36
40
self . className = className
37
41
self . triggerName = trigger
@@ -45,7 +49,11 @@ public extension ParseHookTriggerable {
45
49
- parameter url: The endpoint of the hook.
46
50
*/
47
51
@available ( * , deprecated, message: " Change \" triggerName \" to \" trigger \" " )
48
- init ( className: String , triggerName: ParseHookTriggerType , url: URL ) {
52
+ init (
53
+ className: String ,
54
+ triggerName: ParseHookTriggerType ,
55
+ url: URL
56
+ ) {
49
57
self . init ( className: className, trigger: triggerName, url: url)
50
58
}
51
59
@@ -55,7 +63,11 @@ public extension ParseHookTriggerable {
55
63
- parameter trigger: The `ParseHookTriggerType` type.
56
64
- parameter url: The endpoint of the hook.
57
65
*/
58
- init < T> ( object: T . Type , trigger: ParseHookTriggerType , url: URL ) where T: ParseObject {
66
+ init < T> (
67
+ object: T . Type ,
68
+ trigger: ParseHookTriggerType ,
69
+ url: URL
70
+ ) where T: ParseObject {
59
71
self . init ( className: object. className, trigger: trigger, url: url)
60
72
}
61
73
@@ -65,7 +77,11 @@ public extension ParseHookTriggerable {
65
77
- parameter trigger: The `ParseHookTriggerType` type.
66
78
- parameter url: The endpoint of the hook.
67
79
*/
68
- init < T> ( object: T , trigger: ParseHookTriggerType , url: URL ) where T: ParseObject {
80
+ init < T> (
81
+ object: T ,
82
+ trigger: ParseHookTriggerType ,
83
+ url: URL
84
+ ) where T: ParseObject {
69
85
self . init ( className: T . className, trigger: trigger, url: url)
70
86
}
71
87
@@ -76,27 +92,129 @@ public extension ParseHookTriggerable {
76
92
- parameter url: The endpoint of the hook.
77
93
*/
78
94
@available ( * , deprecated, message: " Change \" triggerName \" to \" trigger \" " )
79
- init < T> ( object: T , triggerName: ParseHookTriggerType , url: URL ) where T: ParseObject {
95
+ init < T> (
96
+ object: T ,
97
+ triggerName: ParseHookTriggerType ,
98
+ url: URL
99
+ ) where T: ParseObject {
80
100
self . init ( object: object, trigger: triggerName, url: url)
81
101
}
82
102
103
+ /**
104
+ Creates a new Parse hook trigger for any supported `ParseHookTriggerObject`.
105
+ - parameter object: The `ParseHookTriggerObject` the trigger should act on.
106
+ - parameter trigger: The `ParseHookTriggerType` type.
107
+ - parameter url: The endpoint of the hook.
108
+ */
109
+ init ( // swiftlint:disable:this cyclomatic_complexity function_body_length
110
+ object: ParseHookTriggerObject ,
111
+ trigger: ParseHookTriggerType ,
112
+ url: URL
113
+ ) throws {
114
+
115
+ let notSupportedError = ParseError (
116
+ code: . otherCause,
117
+ message: " This object \" \( object) \" currently does not support the hook trigger \" \( trigger) \" "
118
+ )
119
+
120
+ switch object {
121
+ case . objectType( let parseObject) :
122
+ switch trigger {
123
+ case . beforeLogin, . afterLogin, . afterLogout:
124
+ guard parseObject is ( any ParseUser . Type ) else {
125
+ throw notSupportedError
126
+ }
127
+ case . beforeSave, . afterSave, . beforeDelete,
128
+ . afterDelete, . beforeFind, . afterFind,
129
+ . beforeSubscribe, . afterEvent:
130
+ break // No op
131
+ default :
132
+ throw notSupportedError
133
+ }
134
+ self . init (
135
+ className: object. className,
136
+ trigger: trigger,
137
+ url: url
138
+ )
139
+ case . object( let parseObject) :
140
+ switch trigger {
141
+ case . beforeLogin, . afterLogin, . afterLogout:
142
+ guard parseObject is ( any ParseUser ) else {
143
+ throw notSupportedError
144
+ }
145
+ case . beforeSave, . afterSave, . beforeDelete,
146
+ . afterDelete, . beforeFind, . afterFind,
147
+ . beforeSubscribe, . afterEvent:
148
+ break // No op
149
+ default :
150
+ throw notSupportedError
151
+ }
152
+ self . init (
153
+ className: object. className,
154
+ trigger: trigger,
155
+ url: url
156
+ )
157
+ case . file:
158
+ switch trigger {
159
+ case . beforeSave, . afterSave, . beforeDelete, . afterDelete:
160
+ break // No op
161
+ default :
162
+ throw notSupportedError
163
+ }
164
+ self . init (
165
+ className: object. className,
166
+ trigger: trigger,
167
+ url: url
168
+ )
169
+ case . config:
170
+ switch trigger {
171
+ case . beforeSave, . afterSave:
172
+ break // No op
173
+ default :
174
+ throw notSupportedError
175
+ }
176
+ self . init (
177
+ className: object. className,
178
+ trigger: trigger,
179
+ url: url
180
+ )
181
+ case . liveQueryConnect:
182
+ guard trigger == . beforeConnect else {
183
+ throw notSupportedError
184
+ }
185
+ self . init (
186
+ className: object. className,
187
+ trigger: trigger,
188
+ url: url
189
+ )
190
+ }
191
+ }
192
+
83
193
/**
84
194
Creates a new `ParseFile` or `ParseHookTriggerType.beforeConnect` hook trigger.
85
195
- parameter trigger: The `ParseHookTriggerType` type.
86
196
- parameter url: The endpoint of the hook.
87
197
*/
198
+ @available ( * , deprecated, message: " Add \" object \" as the first argument " )
88
199
init ( trigger: ParseHookTriggerType , url: URL ) throws {
89
- self . init ( )
90
- self . triggerName = trigger
91
- self . url = url
92
- switch triggerName {
200
+ switch trigger {
93
201
case . beforeSave, . afterSave, . beforeDelete, . afterDelete:
94
- self . className = " @File "
202
+ self . init (
203
+ className: ParseHookTriggerObject . file. className,
204
+ trigger: trigger,
205
+ url: url
206
+ )
95
207
case . beforeConnect:
96
- self . className = " @Connect "
208
+ self . init (
209
+ className: ParseHookTriggerObject . liveQueryConnect. className,
210
+ trigger: trigger,
211
+ url: url
212
+ )
97
213
default :
98
- throw ParseError ( code: . otherCause,
99
- message: " This initializer should only be used for \" ParseFile \" and \" beforeConnect \" " )
214
+ throw ParseError (
215
+ code: . otherCause,
216
+ message: " This initializer should only be used for \" ParseFile \" and \" beforeConnect \" "
217
+ )
100
218
}
101
219
}
102
220
0 commit comments