motion-firebase 1.0.5 → 1.0.6
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/.gitignore +1 -0
- data/README.md +31 -356
- data/app/app_delegate.rb +2 -2
- data/lib/firebase/firebase.rb +18 -76
- data/lib/firebase/fquery.rb +76 -0
- data/lib/firebase/version.rb +1 -1
- metadata +3 -2
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@ motion-firebase
|
|
3
3
|
|
4
4
|
A RubyMotion wrapper for the Firebase SDK.
|
5
5
|
|
6
|
-
|
6
|
+
Adds more rubyesque methods to the built-in classes.
|
7
7
|
|
8
8
|
Versioning
|
9
9
|
-------
|
@@ -16,17 +16,6 @@ SDK
|
|
16
16
|
|
17
17
|
# Firebase Class Reference
|
18
18
|
|
19
|
-
## Overview
|
20
|
-
|
21
|
-
A `Firebase` reference represents a particular location in your Firebase and can
|
22
|
-
be used for reading or writing data to that Firebase location.
|
23
|
-
|
24
|
-
This class is the starting point for all Firebase operations. After you’ve
|
25
|
-
initialized it with `Firebase.new` you can use it to read data (ie. `on() {}`),
|
26
|
-
write data (ie. `[key]=`), and to create new Firebase references (ie. `[]`).
|
27
|
-
|
28
|
-
## Tasks
|
29
|
-
|
30
19
|
##### Initializing a Firebase object
|
31
20
|
|
32
21
|
Firebase.new(url)
|
@@ -133,6 +122,7 @@ write data (ie. `[key]=`), and to create new Firebase references (ie. `[]`).
|
|
133
122
|
##### Retrieving String Representation
|
134
123
|
|
135
124
|
firebase.to_s
|
125
|
+
firebase.inspect
|
136
126
|
|
137
127
|
##### Properties
|
138
128
|
|
@@ -146,366 +136,51 @@ write data (ie. `[key]=`), and to create new Firebase references (ie. `[]`).
|
|
146
136
|
Firebase.sdkVersion
|
147
137
|
|
148
138
|
|
149
|
-
|
150
|
-
|
151
|
-
#### name
|
152
|
-
|
153
|
-
Gets last token in a Firebase location (e.g. ‘fred’ in https://SampleChat.firebaseIO-demo.com/users/fred))
|
154
|
-
|
155
|
-
###### Return Value
|
156
|
-
|
157
|
-
The name of the location this reference points to.
|
158
|
-
|
159
|
-
|
160
|
-
#### parent
|
161
|
-
|
162
|
-
Get a Firebase reference for the parent location. If this instance refers to the
|
163
|
-
root of your Firebase, it has no parent, and therefore parent( ) will return `nil`.
|
164
|
-
|
165
|
-
###### Return Value
|
166
|
-
|
167
|
-
A Firebase reference for the parent location.
|
168
|
-
|
169
|
-
|
170
|
-
#### root
|
171
|
-
|
172
|
-
Get a Firebase reference for the root location
|
173
|
-
|
174
|
-
###### Return Value
|
175
|
-
|
176
|
-
A new Firebase reference to root location.
|
177
|
-
|
178
|
-
|
179
|
-
## Class Methods
|
180
|
-
|
181
|
-
#### sdkVersion
|
182
|
-
|
183
|
-
Retrieve the Firebase SDK version.
|
184
|
-
|
185
|
-
|
186
|
-
#### dispatch_queue=(queue)
|
187
|
-
|
188
|
-
Set the default dispatch queue for event blocks.
|
189
|
-
|
190
|
-
###### Parameters
|
191
|
-
|
192
|
-
queue
|
193
|
-
*The queue to set as the default for running blocks for all Firebase event
|
194
|
-
types.*
|
195
|
-
|
196
|
-
## Instance Methods
|
197
|
-
|
198
|
-
|
199
|
-
#### auth(credential, options={}, &and_then) { |error| }
|
200
|
-
|
201
|
-
###### Parameters
|
202
|
-
|
203
|
-
Authenticate access to this Firebase using the provided credentials. The
|
204
|
-
completion block will be called with the results of the authenticated attempt,
|
205
|
-
and the disconnect block will be called if the credentials become invalid at
|
206
|
-
some point after authentication has succeeded.
|
207
|
-
|
208
|
-
credential
|
209
|
-
*The Firebase authentication JWT generated by a secure code on a remote server.*
|
210
|
-
|
211
|
-
and_then || options[:completion]
|
212
|
-
*This block will be called with the results of the authentication attempt*
|
213
|
-
|
214
|
-
options[:disconnect]
|
215
|
-
*This block will be called if at any time in the future the credentials become
|
216
|
-
invalid*
|
217
|
-
|
218
|
-
|
219
|
-
#### cancel_disconnect(&and_then)
|
220
|
-
|
221
|
-
Cancel any operations that are set to run on disconnect. If you previously
|
222
|
-
called `on_disconnect`, and no longer want the values updated when the
|
223
|
-
connection is lost, call `cancel_disconnect`
|
224
|
-
|
225
|
-
###### Parameters
|
226
|
-
|
227
|
-
and_then
|
228
|
-
*A block that will be triggered once the Firebase servers have acknowledged the
|
229
|
-
cancel request.*
|
230
|
-
|
231
|
-
|
232
|
-
#### [](*children)
|
233
|
-
|
234
|
-
Get a Firebase reference for the location at the specified relative path. The
|
235
|
-
relative path can either be a simple child name (e.g. ‘fred’) or a deeper
|
236
|
-
slash-separated path (e.g. ‘fred/name/first’).
|
237
|
-
|
238
|
-
firebase['fred']
|
239
|
-
firebase['fred/name/first']
|
240
|
-
firebase['fred', 'name', 'first']
|
241
|
-
|
242
|
-
###### Parameters
|
243
|
-
|
244
|
-
children
|
245
|
-
*A relative path from this location to the desired child location(s).*
|
246
|
-
|
247
|
-
###### Return Value
|
248
|
-
|
249
|
-
A Firebase reference for the specified relative path.
|
250
|
-
|
251
|
-
|
252
|
-
#### []
|
253
|
-
|
254
|
-
`firebase[]` generates a new child location using a unique name and returns a
|
255
|
-
Firebase reference to it. This is useful when the children of a Firebase
|
256
|
-
location represent a list of items.
|
257
|
-
|
258
|
-
The unique name generated by `firebase[]` is prefixed with a client-generated
|
259
|
-
timestamp so that the resulting list will be chronologically-sorted.
|
260
|
-
|
261
|
-
###### Return Value
|
262
|
-
|
263
|
-
A Firebase reference for the generated location.
|
264
|
-
|
265
|
-
|
266
|
-
#### to_s
|
267
|
-
|
268
|
-
Gets the absolute URL of this Firebase location.
|
269
|
-
|
270
|
-
|
271
|
-
#### Firebase.new(url)
|
272
|
-
|
273
|
-
Initialize this Firebase reference with an absolute URL.
|
274
|
-
|
275
|
-
###### Parameters
|
139
|
+
# FirebaseAuthClient Class Reference
|
276
140
|
|
277
|
-
|
278
|
-
*The Firebase URL (ie: https://SampleChat.firebaseIO-demo.com)*
|
141
|
+
##### Initializing a FirebaseAuthClient instance
|
279
142
|
|
143
|
+
ref = Firebase.new(url)
|
144
|
+
auth = FirebaseAuthClient.new(ref)
|
280
145
|
|
281
|
-
|
282
|
-
#### on(event_type, options, &and_then) { |snapshot, previous_sibling_name| }
|
146
|
+
##### Checking current authentication status
|
283
147
|
|
284
|
-
|
285
|
-
primary way to read data from Firebase. Your block will be triggered for the
|
286
|
-
initial data and again whenever the data changes.
|
148
|
+
auth.check { |error, user| }
|
287
149
|
|
288
|
-
|
289
|
-
`:changed` will be passed the name of the previous node by priority order.
|
150
|
+
##### Removing any existing authentication
|
290
151
|
|
291
|
-
|
152
|
+
auth.logout
|
292
153
|
|
293
|
-
|
154
|
+
##### Email/password authentication methods
|
294
155
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
:moved # fired when a child node moves relative to the other child nodes at a location
|
299
|
-
:value # fired when any data changes at a location and, recursively, any children
|
156
|
+
`credentials` for `create,remove,login` should include `:email` and `:password`.
|
157
|
+
For `update`, `credentials` should include `:email`, `:old_password` and
|
158
|
+
`:new_password`.
|
300
159
|
|
301
|
-
|
160
|
+
auth.create(email: 'hello@example.com', password: '12345') { |error, user| }
|
161
|
+
auth.remove(email: 'hello@example.com', password: '12345') { |error, user| }
|
162
|
+
auth.login(email: 'hello@example.com', password: '12345') { |error, user| }
|
163
|
+
auth.update(email: 'hello@example.com', old_password: '12345', new_password: '54321') { |error, success| }
|
302
164
|
|
303
|
-
|
304
|
-
*The type of event to listen for.*
|
165
|
+
##### Facebook authentication methods
|
305
166
|
|
306
|
-
|
307
|
-
*The block that should be called with initial data and updates as a
|
308
|
-
`FDataSnapshot`, and optionally the previous child’s name.*
|
167
|
+
`credentials` should include `:app_id` and `:permissions`
|
309
168
|
|
310
|
-
|
311
|
-
*The block that should be called if this client no longer has permission to
|
312
|
-
receive these events*
|
169
|
+
auth.login_facebook(app_id: '123abc', permissions: ['email']) { |error, user| }
|
313
170
|
|
314
|
-
|
171
|
+
##### Twitter authentication methdos
|
315
172
|
|
316
|
-
|
173
|
+
`credentials` should include `:app_id` and `:on_multiple` block. The
|
174
|
+
`:on_multiple` block is called when more than one account is found. It is
|
175
|
+
passed an array of usernames and should return an index or `NSNotFound`.
|
317
176
|
|
177
|
+
auth.login_to_twitter(app_id: '123abc', on_multiple: ->(usernames) { return 0 }) { |error, user| }
|
318
178
|
|
319
|
-
|
320
|
-
#### once(event_type, options, &and_then) { |snapshot, previous_sibling_name| }
|
321
|
-
|
322
|
-
#### observeSingleEventOfType:andPreviousSiblingNameWithBlock:
|
323
|
-
|
324
|
-
This is equivalent to `on()`, except the block is immediately canceled after the
|
325
|
-
initial data is returned.
|
326
|
-
|
327
|
-
If the block accepts two arguments, events of type `:added`, `:moved`, and
|
328
|
-
`:changed` will be passed the name of the previous node by priority order.
|
329
|
-
|
330
|
-
###### Parameters
|
331
|
-
|
332
|
-
event_type
|
333
|
-
*The type of event to listen for.*
|
334
|
-
|
335
|
-
and_then || options[:completion]
|
336
|
-
*The block that should be called with initial data and updates as a
|
337
|
-
`FDataSnapshot`, and optionally the previous child’s name.*
|
338
|
-
|
339
|
-
options[:disconnect]
|
340
|
-
*The block that should be called if this client no longer has permission to
|
341
|
-
receive these events*
|
342
|
-
|
343
|
-
|
344
|
-
#### on_disconnect(nil, &and_then) { |error| }
|
345
|
-
#### on_disconnect(value, &and_then) { |error| }
|
346
|
-
#### on_disconnect(values, &and_then) { |error| }
|
347
|
-
#### on_disconnect(value, priority:priority, &and_then) { |error| }
|
348
|
-
|
349
|
-
Ensure the data at this location is removed when the client is disconnected (due
|
350
|
-
to closing the app, navigating to a new page, or network issues).
|
351
|
-
|
352
|
-
`on_disconnect` is especially useful for implementing “presence” systems.
|
353
|
-
|
354
|
-
###### Parameters
|
355
|
-
value
|
356
|
-
*The value to be set after the connection is lost. Special value `nil` will
|
357
|
-
remove the value, and a dictionary can be sent to update multiple child node
|
358
|
-
names and the values to set them to.*
|
359
|
-
|
360
|
-
priority
|
361
|
-
*The priority to be set after the connection is lost.*
|
362
|
-
|
363
|
-
and_then
|
364
|
-
*Block to be triggered when the operation has been queued up on the Firebase
|
365
|
-
servers*
|
366
|
-
|
367
|
-
|
368
|
-
#### off
|
369
|
-
#### off(handle)
|
370
|
-
|
371
|
-
Detach a block previously attached with `on()`, or remove all observer events.
|
372
|
-
|
373
|
-
###### Parameters
|
374
|
-
handle
|
375
|
-
The handle returned by the call to observeEventType:withBlock: which we are
|
376
|
-
trying to remove. If no handle is passed, all ovservers are removed.
|
377
|
-
|
378
|
-
|
379
|
-
#### clear!(&and_then) { |error| }
|
380
|
-
|
381
|
-
Remove the data at this Firebase location. Any data at child locations will also
|
382
|
-
be deleted.
|
383
|
-
|
384
|
-
The effect of the delete will be visible immediately and the corresponding
|
385
|
-
events will be triggered. Synchronization of the delete to the Firebase servers
|
386
|
-
will also be started.
|
387
|
-
|
388
|
-
`clear!` is equivalent to calling `value(nil)`
|
389
|
-
|
390
|
-
###### Parameters
|
391
|
-
and_then
|
392
|
-
*The block to be called after the remove has been committed to the Firebase
|
393
|
-
servers.*
|
394
|
-
|
395
|
-
#### run(options={}, &transaction) { |data| }
|
396
|
-
|
397
|
-
Performs an optimistic-concurrency transactional update to the data at this
|
398
|
-
location. Your block will be called with an FMutableData instance that contains
|
399
|
-
the current data at this location. Your block should update this data to the
|
400
|
-
value you wish to write to this location, and then return an instance of
|
401
|
-
FTransactionResult with the new data.
|
402
|
-
|
403
|
-
If, when the operation reaches the server, it turns out that this client had
|
404
|
-
stale data, your block will be run again with the latest data from the server.
|
405
|
-
|
406
|
-
When your block is run, you may decide to abort the transaction by return
|
407
|
-
`FTransactionResult.abort`.
|
408
|
-
|
409
|
-
Since your block may be run multiple times, this client could see several
|
410
|
-
immediate states that don’t exist on the server. You can suppress those
|
411
|
-
immediate states until the server confirms the final state of the transaction.
|
412
|
-
|
413
|
-
###### Parameters
|
414
|
-
transaction || options[:transaction]
|
415
|
-
*This block receives the current data at this location and must return an
|
416
|
-
instance of FTransactionResult*
|
417
|
-
|
418
|
-
options[:completion]
|
419
|
-
*This block will be triggered once the transaction is complete, whether it was
|
420
|
-
successful or not. It will indicate if there was an error, whether or not the
|
421
|
-
data was committed, and what the current value of the data at this location is.*
|
422
|
-
|
423
|
-
options[:local]
|
424
|
-
*Set this to `false` to suppress events raised for intermediate states, and only
|
425
|
-
get events based on the final state of the transaction.*
|
426
|
-
|
427
|
-
|
428
|
-
#### priority=(priority)
|
429
|
-
#### priority(priority, &and_then) { |error| }
|
430
|
-
|
431
|
-
Set a priority for the data at this Firebase location. Priorities can be used to
|
432
|
-
provide a custom ordering for the children at a location (if no priorities are
|
433
|
-
specified, the children are ordered by name).
|
434
|
-
|
435
|
-
You cannot set a priority on an empty location. For this reason
|
436
|
-
`value(priority:)` should be used when setting initial data with a specific
|
437
|
-
priority and `priority()` should be used when updating the priority of existing
|
438
|
-
data.
|
439
|
-
|
440
|
-
Children are sorted based on this priority using the following rules:
|
441
|
-
|
442
|
-
Children with no priority (a `nil` priority) come first. They are ordered
|
443
|
-
lexicographically by name. Children with a priority that is parsable as a number
|
444
|
-
come next. They are sorted numerically by priority first (small to large) and
|
445
|
-
lexicographically by name second (A to z). Children with non-numeric priorities
|
446
|
-
come last. They are sorted lexicographically by priority first and
|
447
|
-
lexicographically by name second. Setting the priority to `nil` removes any
|
448
|
-
existing priority. Note that priorities are parsed and ordered as IEEE 754
|
449
|
-
double-precision floating-point numbers.
|
450
|
-
|
451
|
-
###### Parameters
|
452
|
-
priority
|
453
|
-
*The priority to set at the specified location.*
|
454
|
-
|
455
|
-
and_then
|
456
|
-
*The block that is triggered after the priority has been written on the
|
457
|
-
servers.*
|
458
|
-
|
459
|
-
|
460
|
-
#### value=(value)
|
461
|
-
#### value(value)
|
462
|
-
|
463
|
-
Write data to this Firebase location.
|
464
|
-
|
465
|
-
This will overwrite any data at this location and all child locations.
|
466
|
-
|
467
|
-
Data types that can be set are:
|
468
|
-
|
469
|
-
String, 'Hello World'
|
470
|
-
Numeric, Boolean — true, 43, 4.333
|
471
|
-
Hash, {'key' => 'value', 'nested' => {'another': 'value' => }
|
472
|
-
Array, []
|
473
|
-
|
474
|
-
The effect of the write will be visible immediately and the corresponding events
|
475
|
-
will be triggered. Synchronization of the data to the Firebase servers will also
|
476
|
-
be started.
|
477
|
-
|
478
|
-
Passing `nil` for the new value is equivalent to calling `clear!` all data at
|
479
|
-
this location or any child location will be deleted.
|
480
|
-
|
481
|
-
Note that `value` will remove any priority stored at this location, so if
|
482
|
-
priority is meant to be preserved, you should use `value(priority:)` instead.
|
483
|
-
|
484
|
-
Priorities are used to order items.
|
485
|
-
|
486
|
-
###### Parameters
|
487
|
-
value
|
488
|
-
*The value to be written.*
|
489
|
-
|
490
|
-
priority
|
491
|
-
*The priority to be attached to that data.*
|
492
|
-
|
493
|
-
|
494
|
-
#### unauth
|
495
|
-
|
496
|
-
Removes any credentials associated with this Firebase
|
497
|
-
|
498
|
-
|
499
|
-
#### update(values)
|
500
|
-
#### update(values, &and_then) { |error| }
|
501
|
-
|
502
|
-
Update changes the values of the keys specified in the dictionary without
|
503
|
-
overwriting other keys at this location.
|
179
|
+
##### Global configuration and settings
|
504
180
|
|
505
|
-
|
506
|
-
values
|
507
|
-
*A dictionary of the keys to change and their new values*
|
181
|
+
FirebaseAuthClient.sdkVersion
|
508
182
|
|
509
|
-
|
510
|
-
*The block that is triggered after the update has been written on the Firebase servers*
|
183
|
+
##### Retrieving String Representation
|
511
184
|
|
185
|
+
firebase.to_s
|
186
|
+
firebase.inspect
|
data/app/app_delegate.rb
CHANGED
@@ -54,7 +54,7 @@ class MyController < UIViewController
|
|
54
54
|
self.chat = []
|
55
55
|
|
56
56
|
# Initialize the root of our Firebase namespace.
|
57
|
-
self.firebase = Firebase.
|
57
|
+
self.firebase = Firebase.new(FirechatNS)
|
58
58
|
|
59
59
|
# Pick a random number between 1-1000 for our username.
|
60
60
|
self.title = "Guest0x#{(rand * 1000).round.to_s(16).upcase}"
|
@@ -76,7 +76,7 @@ class MyController < UIViewController
|
|
76
76
|
|
77
77
|
# This will also add the message to our local array self.chat because
|
78
78
|
# the FEventTypeChildAdded event will be immediately fired.
|
79
|
-
self.firebase
|
79
|
+
self.firebase << {'name' => self.title, 'text' => text_field.text}
|
80
80
|
|
81
81
|
text_field.text = ''
|
82
82
|
false
|
data/lib/firebase/firebase.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
class Firebase
|
2
2
|
|
3
|
+
def self.convert_event_type(event_type)
|
4
|
+
case event_type
|
5
|
+
when :child_added, :added
|
6
|
+
return FEventTypeChildAdded
|
7
|
+
when :child_moved, :moved
|
8
|
+
FEventTypeChildMoved
|
9
|
+
when :child_changed, :changed
|
10
|
+
return FEventTypeChildChanged
|
11
|
+
when :child_removed, :removed
|
12
|
+
return FEventTypeChildRemoved
|
13
|
+
when :value
|
14
|
+
return FEventTypeValue
|
15
|
+
else
|
16
|
+
NSLog("Unknown event type #{event_type.inspect}")
|
17
|
+
end
|
18
|
+
return event_type
|
19
|
+
end
|
20
|
+
|
3
21
|
def self.new(url)
|
4
22
|
alloc.initWithUrl(url)
|
5
23
|
end
|
@@ -120,63 +138,6 @@ class Firebase
|
|
120
138
|
return self
|
121
139
|
end
|
122
140
|
|
123
|
-
def on(event_type, options={}, &and_then)
|
124
|
-
and_then = and_then || options[:completion]
|
125
|
-
raise "event handler is required" unless and_then
|
126
|
-
raise "event handler must accept one or two arguments" unless and_then.arity == 1 || and_then.arity == 2
|
127
|
-
|
128
|
-
event_type = Firebase._convert_event_type(event_type)
|
129
|
-
disconnect_block = options[:disconnect]
|
130
|
-
raise ":disconnect handler must not accept any arguments" if disconnect_block && disconnect_block.arity > 0
|
131
|
-
|
132
|
-
if and_then.arity == 1
|
133
|
-
if disconnect_block
|
134
|
-
observeEventType(event_type, withBlock:and_then, withCancelBlock:disconnect_block)
|
135
|
-
else
|
136
|
-
observeEventType(event_type, withBlock:and_then)
|
137
|
-
end
|
138
|
-
else
|
139
|
-
if disconnect_block
|
140
|
-
observeEventType(event_type, andPreviousSiblingNameWithBlock:and_then, withCancelBlock:disconnect_block)
|
141
|
-
else
|
142
|
-
observeEventType(event_type, andPreviousSiblingNameWithBlock:and_then)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def once(event_type, options={}, &and_then)
|
148
|
-
and_then = and_then || options[:completion]
|
149
|
-
raise "event handler is required" unless and_then
|
150
|
-
raise "event handler must accept one or two arguments" unless and_then.arity == 1 || and_then.arity == 2
|
151
|
-
|
152
|
-
event_type = Firebase._convert_event_type(event_type)
|
153
|
-
disconnect_block = options[:disconnect]
|
154
|
-
raise ":disconnect handler must not accept any arguments" if disconnect_block && disconnect_block.arity > 0
|
155
|
-
|
156
|
-
if and_then.arity == 1
|
157
|
-
if disconnect_block
|
158
|
-
observeSingleEventOfType(event_type, withBlock:and_then, withCancelBlock:disconnect_block)
|
159
|
-
else
|
160
|
-
observeSingleEventOfType(event_type, withBlock:and_then)
|
161
|
-
end
|
162
|
-
else
|
163
|
-
if disconnect_block
|
164
|
-
observeSingleEventOfType(event_type, andPreviousSiblingNameWithBlock:and_then, withCancelBlock:disconnect_block)
|
165
|
-
else
|
166
|
-
observeSingleEventOfType(event_type, andPreviousSiblingNameWithBlock:and_then)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def off(handle=nil)
|
172
|
-
if handle
|
173
|
-
removeObserverWithHandle(handle)
|
174
|
-
else
|
175
|
-
removeAllObservers
|
176
|
-
end
|
177
|
-
return self
|
178
|
-
end
|
179
|
-
|
180
141
|
def cancel_disconnect(&and_then)
|
181
142
|
if and_then
|
182
143
|
cancelDisconnectOperationsWithCompletionBlock(and_then)
|
@@ -220,23 +181,4 @@ class Firebase
|
|
220
181
|
"#<#{self.class}:0x#{self.object_id.to_s(16)}>"
|
221
182
|
end
|
222
183
|
|
223
|
-
private
|
224
|
-
def self._convert_event_type(event_type)
|
225
|
-
case event_type
|
226
|
-
when :child_added, :added
|
227
|
-
return FEventTypeChildAdded
|
228
|
-
when :child_moved, :moved
|
229
|
-
FEventTypeChildMoved
|
230
|
-
when :child_changed, :changed
|
231
|
-
return FEventTypeChildChanged
|
232
|
-
when :child_removed, :removed
|
233
|
-
return FEventTypeChildRemoved
|
234
|
-
when :value
|
235
|
-
return FEventTypeValue
|
236
|
-
else
|
237
|
-
NSLog("Unknown event type #{event_type.inspect}")
|
238
|
-
end
|
239
|
-
return event_type
|
240
|
-
end
|
241
|
-
|
242
184
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
class FQuery
|
2
|
+
|
3
|
+
def on(event_type, options={}, &and_then)
|
4
|
+
and_then = and_then || options[:completion]
|
5
|
+
raise "event handler is required" unless and_then
|
6
|
+
raise "event handler must accept one or two arguments" unless and_then.arity == 1 || and_then.arity == 2
|
7
|
+
|
8
|
+
event_type = Firebase.convert_event_type(event_type)
|
9
|
+
disconnect_block = options[:disconnect]
|
10
|
+
raise ":disconnect handler must not accept any arguments" if disconnect_block && disconnect_block.arity > 0
|
11
|
+
|
12
|
+
if and_then.arity == 1
|
13
|
+
if disconnect_block
|
14
|
+
return observeEventType(event_type, withBlock:and_then, withCancelBlock:disconnect_block)
|
15
|
+
else
|
16
|
+
return observeEventType(event_type, withBlock:and_then)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
if disconnect_block
|
20
|
+
return observeEventType(event_type, andPreviousSiblingNameWithBlock:and_then, withCancelBlock:disconnect_block)
|
21
|
+
else
|
22
|
+
return observeEventType(event_type, andPreviousSiblingNameWithBlock:and_then)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def once(event_type, options={}, &and_then)
|
28
|
+
and_then = and_then || options[:completion]
|
29
|
+
raise "event handler is required" unless and_then
|
30
|
+
raise "event handler must accept one or two arguments" unless and_then.arity == 1 || and_then.arity == 2
|
31
|
+
|
32
|
+
event_type = Firebase.convert_event_type(event_type)
|
33
|
+
disconnect_block = options[:disconnect]
|
34
|
+
raise ":disconnect handler must not accept any arguments" if disconnect_block && disconnect_block.arity > 0
|
35
|
+
|
36
|
+
if and_then.arity == 1
|
37
|
+
if disconnect_block
|
38
|
+
return observeSingleEventOfType(event_type, withBlock:and_then, withCancelBlock:disconnect_block)
|
39
|
+
else
|
40
|
+
return observeSingleEventOfType(event_type, withBlock:and_then)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
if disconnect_block
|
44
|
+
return observeSingleEventOfType(event_type, andPreviousSiblingNameWithBlock:and_then, withCancelBlock:disconnect_block)
|
45
|
+
else
|
46
|
+
return observeSingleEventOfType(event_type, andPreviousSiblingNameWithBlock:and_then)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def off(handle=nil)
|
52
|
+
if handle
|
53
|
+
removeObserverWithHandle(handle)
|
54
|
+
else
|
55
|
+
removeAllObservers
|
56
|
+
end
|
57
|
+
return self
|
58
|
+
end
|
59
|
+
|
60
|
+
def start_at(priority)
|
61
|
+
queryStartingAtPriority(priority)
|
62
|
+
end
|
63
|
+
|
64
|
+
def start_at(priority, child:child)
|
65
|
+
queryStartingAtPriority(priority, andChildName:child)
|
66
|
+
end
|
67
|
+
|
68
|
+
def end_at(priority)
|
69
|
+
queryEndingAtPriority(priority)
|
70
|
+
end
|
71
|
+
|
72
|
+
def end_at(priority, child:child)
|
73
|
+
queryEndingAtPriority(priority, andChildName:child)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
data/lib/firebase/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-firebase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
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: 2013-04-
|
12
|
+
date: 2013-04-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- app/app_delegate.rb
|
46
46
|
- lib/firebase/firebase.rb
|
47
47
|
- lib/firebase/firebase_auth_client.rb
|
48
|
+
- lib/firebase/fquery.rb
|
48
49
|
- lib/firebase/version.rb
|
49
50
|
- lib/motion-firebase-auth.rb
|
50
51
|
- lib/motion-firebase-facebook.rb
|