Skip to content

Instantly share code, notes, and snippets.

View davideast's full-sized avatar
💜
Working on Project IDX (and Firebase too)

David East davideast

💜
Working on Project IDX (and Firebase too)
View GitHub Profile
@davideast
davideast / incrementViews.js
Last active January 7, 2017 22:03
Guillermo Views Transaction
/**
* Increases view count by one.
* @param: db {FirebaseDatabase} - Firebase Database instance
* @param: id {String} - id of post
* @return: Promise<{committed: boolean, snapshot: nullable firebase.database.DataSnapshot}>
* @docs: https://firebase.google.com/docs/reference/js/firebase.database.Reference#transaction
*/
const incrementViews = (db, id) => {
const ref = db.ref('views').child(id)
return ref.transaction(currentViews => {
@davideast
davideast / example.js
Last active April 20, 2021 17:19
Push and return Firebase
const ref = new Firebase('<my-firebase-app>/items');
// Create a push reference (no data has been sent to the server, just a generated id)
const childRef = ref.push();
// create an object and with they push-id
const data = { name: 'David': key: childRef.key() };
// save it
childRef.set(data);
// Listen for the update
childRef.on('value', (snap) => console.log(snap.val()));
@davideast
davideast / transfer.js
Last active April 20, 2021 17:19
Transfer data from one Firebase database to another
var client = require('firebase-tools');
function transfer(path, options) {
var fromDb = options.fromDb;
var toDb = options.toDb;
var output = options.output;
client.data.get(path, { firebase: fromDb, output: output })
.then(function(data) {
return client.data.set(path, output, { firebase: toDb, confirm: true });
})
@davideast
davideast / rules.bolt
Last active December 15, 2015 18:33
Securing user data - Bolt rules
isUser(uid) = auth != null && auth.uid == uid;
type Post {
uid: String;
title: String;
description: String;
timestamp: Number;
}
type User {
@davideast
davideast / rules.json
Last active April 20, 2021 17:19
Bolt output
{
"rules": {
"users": {
"$uid": {
".validate": "newData.hasChildren(['uid', 'name', 'username'])",
"uid": {
".validate": "newData.isString()"
},
"name": {
".validate": "newData.isString()"
@davideast
davideast / MyViewController.swift
Last active December 27, 2017 05:19
Using Firebase references in a UIViewController
import UIKit
class MyViewController: UIViewController {
// Store ref and handle as implicitly unwrapped optionals
var ref: Firebase!
var handle: UInt!
override func viewDidLoad() {
super.viewDidLoad()
@davideast
davideast / SyncPath.js
Last active April 20, 2021 17:19
Firebase Social Network Client Fanout
export class SyncPath {
constructor(rootRef, path) {
this._rootRef = rootRef;
this.user = this._rootRef.getAuth();
this._userDataRef = this._rootRef.child(path).child(this.user.uid);
this.data = {};
this._userDataRef.on('value', (snap) => this.data = snap.val() || {});
}
keys() {
return Object.keys(this.data);
interface IFetchResponse {
text: () => Promise<string>;
json: () => Promise<string>;
}
declare var fetch: (url: string) => Promise<IFetchResponse>;
@Pipe({
name: 'fetch'
})
class FetchJsonPipe {
@davideast
davideast / push.js
Last active April 20, 2021 17:19
Send push notifications with node-apn and Firebase
var apn = require("apn");
var Firebase = require("firebase");
var service = new apn.connection({ production: false }); // true for production pipeline
// Create a reference to the push notification queue
var pushRef = new Firebase("<your-firebase>.firebaseio.com/notificationQueue");
// listen for items added to the queue
pushRef.on("child_added", function(snapshot) {
@davideast
davideast / index.ts
Created April 15, 2015 17:25
Simple Angular 2 Forms with Firebase
import {bootstrap, Component, Decorator, View, If, For, EventEmitter} from 'angular2/angular2';
import {FormBuilder, Validators, FormDirectives, ControlGroup} from 'angular2/forms';
@Component({
selector: 'app',
injectables: [FormBuilder]
})
@View({
template: `
<div class="container" [control-group]="myForm">