class Firebase::Client
Attributes
auth[R]
request[R]
Public Class Methods
new(base_uri, auth=nil)
click to toggle source
# File lib/firebase.rb, line 12 def initialize(base_uri, auth=nil) if base_uri !~ URI::regexp(%w(https)) raise ArgumentError.new('base_uri must be a valid https uri') end base_uri += '/' unless base_uri.end_with?('/') @request = HTTPClient.new({ :base_url => base_uri, :default_header => { 'Content-Type' => 'application/json' } }) if auth && valid_json?(auth) # Using Admin SDK service account @credentials = Google::Auth::DefaultCredentials.make_creds( json_key_io: StringIO.new(auth), scope: %w(https://www.googleapis.com/auth/firebase.database https://www.googleapis.com/auth/userinfo.email) ) @credentials.apply!(@request.default_header) @expires_at = @credentials.issued_at + 0.95 * @credentials.expires_in else # Using deprecated Database Secret @secret = auth end end
Public Instance Methods
delete(path, query={})
click to toggle source
Deletes the data at path and returs true
# File lib/firebase.rb, line 55 def delete(path, query={}) process :delete, path, nil, query end
get(path, query={})
click to toggle source
Returns the data at path
# File lib/firebase.rb, line 44 def get(path, query={}) process :get, path, nil, query end
push(path, data, query={})
click to toggle source
Writes the data, returns the key name of the data added
Firebase.push('users', { 'age' => 18}) => {"name":"-INOQPH-aV_psbk3ZXEX"}
# File lib/firebase.rb, line 50 def push(path, data, query={}) process :post, path, data, query end
set(path, data, query={})
click to toggle source
Writes and returns the data
Firebase.set('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
# File lib/firebase.rb, line 39 def set(path, data, query={}) process :put, path, data, query end
update(path, data, query={})
click to toggle source
Write the data at path but does not delete ommited children. Returns the data
Firebase.update('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
# File lib/firebase.rb, line 61 def update(path, data, query={}) process :patch, path, data, query end
Private Instance Methods
process(verb, path, data=nil, query={})
click to toggle source
# File lib/firebase.rb, line 67 def process(verb, path, data=nil, query={}) if path[0] == '/' raise(ArgumentError.new("Invalid path: #{path}. Path must be relative")) end if @expires_at && Time.now > @expires_at @credentials.refresh! @credentials.apply! @request.default_header @expires_at = @credentials.issued_at + 0.95 * @credentials.expires_in end Firebase::Response.new @request.request(verb, "#{path}.json", { :body => (data && data.to_json), :query => (@secret ? { :auth => @secret }.merge(query) : query), :follow_redirect => true }) end
valid_json?(json)
click to toggle source
# File lib/firebase.rb, line 85 def valid_json?(json) begin JSON.parse(json) return true rescue JSON::ParserError return false end end