Skip to content

Commit

Permalink
Refactor to remove Request proxy class, expose http client
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentwoo committed Nov 10, 2015
1 parent 863674e commit 138b1e1
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 61 deletions.
35 changes: 20 additions & 15 deletions lib/firebase.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
require 'uri'
require 'firebase/request'
require 'firebase/response'
require 'firebase/server_value'
require 'httpclient'
require 'json'
require 'uri'

module Firebase
class Client
Expand All @@ -12,47 +13,51 @@ def initialize(base_uri, auth=nil)
raise ArgumentError.new('base_uri must be a valid https uri')
end
base_uri += '/' unless base_uri.end_with?('/')
@request = Firebase::Request.new(base_uri)
@request = HTTPClient.new({
:base_url => base_uri,
:default_header => {
'Content-Type' => 'application/json'
}
})
@auth = auth
end

# Writes and returns the data
# Firebase.set('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
def set(path, data, query={})
request.put(path, data, query_options(query))
process :put, path, data, query
end

# Returns the data at path
def get(path, query={})
request.get(path, query_options(query))
process :get, path, query
end

# Writes the data, returns the key name of the data added
# Firebase.push('users', { 'age' => 18}) => {"name":"-INOQPH-aV_psbk3ZXEX"}
def push(path, data, query={})
request.post(path, data, query_options(query))
process :post, path, data, query
end

# Deletes the data at path and returs true
def delete(path, query={})
request.delete(path, query_options(query))
process :delete, path, query
end

# Write the data at path but does not delete ommited children. Returns the data
# Firebase.update('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
def update(path, data, query={})
request.patch(path, data, query_options(query))
process :patch, path, data, query
end

private

def query_options(query)
if auth
{ :auth => auth }.merge(query)
else
query
end
def process(verb, path, data=nil, query={})
Firebase::Response.new @request.request(verb, "#{path}.json", {
:body => (data && data.to_json),
:query => (auth ? { :auth => auth }.merge(query) : query),
:follow_redirect => true
})
end
end
end

38 changes: 0 additions & 38 deletions lib/firebase/request.rb

This file was deleted.

20 changes: 12 additions & 8 deletions spec/firebase_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@

describe "set" do
it "writes and returns the data" do
@req.should_receive(:put).with('users/info', data, {})
@firebase.should_receive(:process).with(:put, 'users/info', data, {})
@firebase.set('users/info', data)
end
end

describe "get" do
it "returns the data" do
@req.should_receive(:get).with('users/info', {})
@firebase.should_receive(:process).with(:get, 'users/info', {})
@firebase.get('users/info')
end

Expand Down Expand Up @@ -60,29 +60,33 @@

describe "push" do
it "writes the data" do
@req.should_receive(:post).with('users', data, {})
@firebase.should_receive(:process).with(:post, 'users', data, {})
@firebase.push('users', data)
end
end

describe "delete" do
it "returns true" do
@req.should_receive(:delete).with('users/info', {})
@firebase.should_receive(:process).with(:delete, 'users/info', {})
@firebase.delete('users/info')
end
end

describe "update" do
it "updates and returns the data" do
@req.should_receive(:patch).with('users/info', data, {})
@firebase.should_receive(:process).with(:patch, 'users/info', data, {})
@firebase.update('users/info', data)
end
end

describe "options" do
it "passes custom options" do
describe "http processing" do
it "sends custom auth" do
firebase = Firebase::Client.new('https://test.firebaseio.com', 'secret')
firebase.request.should_receive(:get).with('todos', {:auth => 'secret', :foo => 'bar'})
firebase.request.should_receive(:request).with(:get, "todos.json", {
:body => {:foo => 'bar'}.to_json,
:query => {:auth => "secret"},
:follow_redirect => true
})
firebase.get('todos', :foo => 'bar')
end
end
Expand Down

0 comments on commit 138b1e1

Please sign in to comment.