Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

parroty/exfirebase

Repository files navigation

An elixir library for accessing the Firebase REST API.

Detail of the API is described in https://www.firebase.com/docs/rest-api.html

Prerequisite

Signing up Firebase and getting the access url (https://xxx.firebaseio.com/) is required.

Sample

defmodule Sample do
 def test do
 # acquire your Firebase URL (https://xxx.firebaseio.com/) from the environment variable.
 url = System.get_env("FIREBASE_URL")
 # setup url for ExFirebase module
 ExFirebase.set_url(url)
 # put data in /test path"
 ExFirebase.put("test", ["abc", "def"])
 # get data in /test path" and print
 IO.inspect ExFirebase.get("test") # -> ["abc", "def"]
 end
end
Sample.test
# ["abc", "def"]

Running sample.ex

run_sample.sh calls the sample.ex.

Clone the repository

$ git clone git://github.com/parroty/exfirebase.git

Set environment variable for the script

$ export FIREBASE_URL="your firebase url"

Run the script

$ ./run_sample.sh
["abc", "def"]

Running on iex

Specify environment variables in advance.

$ export FIREBASE_URL="your firebase url"

Then run the "run_iex.sh". It loads up "dot.iex" and related libraries. It has pre-defined alias variables (fb) for API operations.

$ ./run_iex.sh
iex(1)> fb
ExFirebase
iex(2)> fb.put("iex", [1, 3, 5])
[1, 3, 5]
iex(3)> a = fb.get("iex")
[1, 3, 5]
iex(4)> a = a ++ [7, 9]
[1, 3, 5, 7, 9]
iex(5)> fb.put("iex", a)
[1, 3, 5, 7, 9]
iex(6)> fb.get("iex")
[1, 3, 5, 7, 9]
iex(7)> fb.delete("iex")
[]
iex(8)> fb.get("iex")
[]

Running on Dynamo

The following repo is a sample dynamo project for implementing rails-like scaffold page built using exfirebase.

Usage

raw json

iex(1)> IO.puts fb.get_raw_json("pretty_test")
[{"name":"Jack","id":1},{"name":"John","id":2}]
iex(2)> IO.puts fb.get_raw_json("pretty_test", [pretty: true])
[ {
 "name" : "Jack",
 "id" : 1
}, {
 "name" : "John",
 "id" : 2
} ]

auth token

iex(1)> fb.get("login")
[{"error", "Permission denied."}]
iex(2)> fb.set_auth_token("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
:ok
iex(3)> fb.get("login")
[{"last", "Sparrow"}, {"first", "Jack"}]

records

iex(1)> defmodule Test do
...(1)> defstruct id: nil, name: nil
...(1)> end
{:module, Test,
 <<70, 79, 82, 49, 0, 0, 4, 204, 66, 69, 65, 77, 65, 116, 111, 109, 0, 0, 0, 110, 0, 0, 0, 11, 11, 69, 108, 105, 120, 105, 114, 46, 84, 101, 115, 116, 8, 95, 95, 105, 110, 102, 111, 95, 95, 4, 100, 111, 99, 115, ...>>,
 [id: nil, name: nil]}
iex(2)> rec = [%Test{id: 1, name: "Jack"}, %Test{id: 2, name: "John"}]
[%Test{id: 1, name: "Jack"}, %Test{id: 2, name: "John"}]
iex(3)> ExFirebase.Records.put("record", rec)
[%{"id" => 1, "name" => "Jack"}, %{"id" => 2, "name" => "John"}]
iex(4)> ExFirebase.Records.get("record", Test)
[%Test{id: 1, name: "Jack"}, %Test{id: 2, name: "John"}]
iex(5)> IO.puts ExFirebase.get_raw_json("record", [pretty: true])
[ {
 "name" : "Jack",
 "id" : 1
}, {
 "name" : "John",
 "id" : 2
} ]

dicts

ExFirebase.Dict provides a dictionary operation based on the Firebase-assigned name parameter.

iex(1)> alias ExFirebase.Dict
nil
iex(2)> Dict.post("object", [1,2,3])
{"-J4ARC-BzalPwVIbMY9-", [1, 2, 3]}
iex(3)> Dict.post("object", [4,5,6])
{"-J4ARDLsZplq-ZNlFhgD", [4, 5, 6]}
iex(4)> Dict.get("object")
#HashDict<[{"-J4ARC-BzalPwVIbMY9-", [1, 2, 3]},
 {"-J4ARDLsZplq-ZNlFhgD", [4, 5, 6]}]>

ExFirebase.Dict.Records uses the name parameter as "id" field of the record.

iex(1)>
iex(1)> defmodule Weather do
...(1)> defstruct id: "", city: "", temp_lo: 0, temp_hi: 0
...(1)> end
{:module, Weather,
 <<70, 79, 82, 49, 0, 0, 5, 0, 66, 69, 65, 77, 65, 116, 111, 109, 0, 0, 0, 113, 0, 0, 0, 11, 14, 69, 108, 105, 120, 105, 114, 46, 87, 101, 97, 116, 104, 101, 114, 8, 95, 95, 105, 110, 102, 111, 95, 95, 4, 100, ...>>,
 [id: "", city: "", temp_lo: 0, temp_hi: 0]}
iex(2)> alias ExFirebase.Dict.Records
nil
iex(3)> use ExFirebase.Dict.Records
nil
iex(4)> Records.post("dict", %Weather{city: "Tokyo"})
%Weather{city: "Tokyo", id: "-JOMPMelEyQUsdDCnZBj", temp_hi: 0, temp_lo: 0}
iex(5)> Records.post("dict", %Weather{city: "Osaka"})
%Weather{city: "Osaka", id: "-JOMPdn8czXNQPiUWWqq", temp_hi: 0, temp_lo: 0}
iex(6)> Records.get("dict", Weather)
%Weather{city: "Tokyo", id: "-JOMVZwI9zFE4xHBuew2", temp_hi: 0, temp_lo: 0},
 %Weather{city: "Osaka", id: "-JOMV_7ePOHc9eTiqNSO", temp_hi: 0, temp_lo: 0}]
iex(7)> record = Records.get("dict", "-JOMVZwI9zFE4xHBuew2", Weather)
%Weather{city: "Tokyo", id: "-JOMVZwI9zFE4xHBuew2", temp_hi: 0, temp_lo: 0}
iex(8)> record = %{record | temp_lo: 10}
%Weather{city: "Tokyo", id: "-JOMVZwI9zFE4xHBuew2", temp_hi: 0, temp_lo: 10}
iex(9)> Records.patch("dict", record)
%Weather{city: "Tokyo", id: "-JOMVZwI9zFE4xHBuew2", temp_hi: 0, temp_lo: 10}
iex(10)> Records.get("dict", "-JOMVZwI9zFE4xHBuew2", Weather)
Weather[id: "-J4AFJDF2A2cEtJRMhgm", city: "Osaka", temp_lo: 10, temp_hi: 0, prcp: 0]
iex(11)> Records.delete("dict", record)
[]
iex(12)> Records.get("dict", Weather)
[%Weather{city: "Osaka", id: "-JOMV_7ePOHc9eTiqNSO", temp_hi: 0, temp_lo: 0}]

TODO

  • Support push notification using websocket.
  • Support priority attribute.

About

An elixir library for accessing the Firebase REST API.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

AltStyle によって変換されたページ (->オリジナル) /