Ruby wrapper for the Firebase REST API.
Changes are sent to all subscribed clients automatically, so you can update your clients in realtime from the backend.
See a video demo of what's possible.
gem install firebase
base_uri = 'https://<your-firebase>.firebaseio.com/'
firebase = Firebase::Client.new(base_uri)
response = firebase.push("todos", { :name => 'Pick the milk', :'.priority' => 1 })
response.success? # => true
response.code # => 200
response.body # => { 'name' => "-INOQPH-aV_psbk3ZXEX" }
response.raw_body # => '{"name":"-INOQPH-aV_psbk3ZXEX"}'
If you have a read-only namespace, you need to authenticate your Firebase client. firebase-ruby
will attempt to determine if you are using the old or new authentication method by whether your auth string is a valid JSON string or not.
# Using Firebase Database Secret (deprecated)
firebase = Firebase::Client.new(base_uri, db_secret)
Go to the Firebase console and under Project Settings
-> Service Accounts
-> Firebase Admin SDK
click on GENERATE NEW PRIVATE KEY
. Save the json file and use it like this:
# Using Firebase Admin SDK private key
private_key_json_string = File.open('/path/to/your/generated/json').read
firebase = Firebase::Client.new(base_uri, private_key_json_string)
You can now pass custom query options to firebase:
response = firebase.push("todos", :limit => 1)
To populate a value with a Firebase server timestamp, you can set Firebase::ServerValue::TIMESTAMP
as a normal value. This is analogous to passing Firebase.ServerValue.TIMESTAMP
in the official JavaScript client.
response = firebase.push("todos", {
:name => 'Pick the milk',
:created => Firebase::ServerValue::TIMESTAMP
})
To update multiple values that are not direct descendants, supply their paths as keys in the payload to update:
# note the empty path string here as the first argument
firebase.update('', {
"users/posts/#{postID}" => true,
"posts/#{postID}" => text
})
So far, supported methods are:
set(path, data, query_options)
get(path, query_options)
push(path, data, query_options)
delete(path, query_options)
update(path, data, query_options)
Faraday is used under the covers to make HTTP requests.
firebase = Firebase::Client.new(base_uri)
# firebase.request is a regular httpclient object
firebase.request.connect_timeout = 30
More information about Firebase and the Firebase API is available at the official website.
Copyright (c) 2013 Oscar Del Ben. See LICENSE.txt for further details.