firebase 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ - UNRELEASED
2
+
3
+ * You can now create instances of Firebase. The old syntax still works but will be removed in version 0,2. - @wannabefro
@@ -1,32 +1,64 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.3)
5
- ethon (0.5.9)
6
- ffi (~> 1.2.0)
4
+ addressable (2.3.5)
5
+ builder (3.2.2)
6
+ diff-lcs (1.2.5)
7
+ ethon (0.6.1)
8
+ ffi (>= 1.3.0)
7
9
  mime-types (~> 1.18)
8
- ffi (1.2.1)
9
- git (1.2.5)
10
- jeweler (1.8.3)
10
+ faraday (0.8.8)
11
+ multipart-post (~> 1.2.0)
12
+ ffi (1.9.3)
13
+ git (1.2.6)
14
+ github_api (0.10.1)
15
+ addressable
16
+ faraday (~> 0.8.1)
17
+ hashie (>= 1.2)
18
+ multi_json (~> 1.4)
19
+ nokogiri (~> 1.5.2)
20
+ oauth2
21
+ hashie (2.0.5)
22
+ highline (1.6.20)
23
+ httpauth (0.2.0)
24
+ jeweler (1.8.8)
25
+ builder
11
26
  bundler (~> 1.0)
12
27
  git (>= 1.2.5)
28
+ github_api (= 0.10.1)
29
+ highline (>= 1.6.15)
30
+ nokogiri (= 1.5.10)
13
31
  rake
14
32
  rdoc
15
- json (1.7.0)
16
- mime-types (1.21)
17
- rake (0.9.2.2)
18
- rdoc (3.12)
33
+ json (1.8.1)
34
+ jwt (0.1.8)
35
+ multi_json (>= 1.5)
36
+ mime-types (1.25)
37
+ multi_json (1.8.2)
38
+ multi_xml (0.5.5)
39
+ multipart-post (1.2.0)
40
+ nokogiri (1.5.10)
41
+ oauth2 (0.9.2)
42
+ faraday (~> 0.8)
43
+ httpauth (~> 0.2)
44
+ jwt (~> 0.1.4)
45
+ multi_json (~> 1.0)
46
+ multi_xml (~> 0.5)
47
+ rack (~> 1.2)
48
+ rack (1.5.2)
49
+ rake (10.1.0)
50
+ rdoc (4.0.1)
19
51
  json (~> 1.4)
20
- rspec (2.9.0)
21
- rspec-core (~> 2.9.0)
22
- rspec-expectations (~> 2.9.0)
23
- rspec-mocks (~> 2.9.0)
24
- rspec-core (2.9.0)
25
- rspec-expectations (2.9.1)
26
- diff-lcs (~> 1.1.3)
27
- rspec-mocks (2.9.0)
28
- typhoeus (0.6.1)
29
- ethon (~> 0.5.9)
52
+ rspec (2.14.1)
53
+ rspec-core (~> 2.14.0)
54
+ rspec-expectations (~> 2.14.0)
55
+ rspec-mocks (~> 2.14.0)
56
+ rspec-core (2.14.7)
57
+ rspec-expectations (2.14.4)
58
+ diff-lcs (>= 1.1.3, < 2.0)
59
+ rspec-mocks (2.14.4)
60
+ typhoeus (0.6.6)
61
+ ethon (~> 0.6.1)
30
62
 
31
63
  PLATFORMS
32
64
  ruby
data/README.md CHANGED
@@ -9,18 +9,17 @@ See a [video demo](https://vimeo.com/41494336?utm_source=internal&utm_medium=ema
9
9
 
10
10
  ### Installation
11
11
 
12
-
13
12
  ```
14
13
  gem install firebase
15
14
  ```
16
-
17
15
  ### Usage
18
16
 
19
-
20
17
  ```ruby
21
- Firebase.base_uri = 'https://<your-firebase>.firebaseio.com/'
18
+ base_uri = 'https://<your-firebase>.firebaseio.com/'
22
19
 
23
- response = Firebase.push("todos", { :name => 'Pick the milk', :priority => 1 })
20
+ firebase = Firebase.new(base_uri)
21
+
22
+ response = firebase.push("todos", { :name => 'Pick the milk', :priority => 1 })
24
23
  response.success? # => true
25
24
  response.code # => 200
26
25
  response.body # => { 'name' => "-INOQPH-aV_psbk3ZXEX" }
@@ -29,20 +28,19 @@ response.raw_body # => '{"name":"-INOQPH-aV_psbk3ZXEX"}'
29
28
 
30
29
  If you have a read-only namespace, set your secret key as follows:
31
30
  ```ruby
32
- Firebase.base_uri = 'https://<your-firebase>.firebaseio.com/'
33
- Firebase.auth = 'yoursecretkey'
31
+ firebase = Firebase.new(base_uri, secret_key)
34
32
 
35
- response = Firebase.push("todos", { :name => 'Pick the milk', :priority => 1 })
33
+ response = firebase.push("todos", { :name => 'Pick the milk', :priority => 1 })
36
34
  ```
37
35
 
38
-
39
36
  So far, supported methods are:
40
37
 
41
38
  ```ruby
42
- Firebase.set(path, data)
43
- Firebase.get(path)
44
- Firebase.push(path, data)
45
- Firebase.delete(path)
39
+ set(path, data)
40
+ get(path)
41
+ push(path, data)
42
+ delete(path)
43
+ update(path, data)
46
44
  ```
47
45
 
48
46
  More features are coming soon.
@@ -52,6 +50,6 @@ More information about Firebase and the Firebase API is available at the
52
50
 
53
51
  ### Copyright
54
52
 
55
- Copyright (c) 2012 Oscar Del Ben. See LICENSE.txt for
53
+ Copyright (c) 2013 Oscar Del Ben. See LICENSE.txt for
56
54
  further details.
57
55
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "firebase"
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oscar Del Ben"]
12
- s.date = "2013-11-10"
12
+ s.date = "2013-11-23"
13
13
  s.description = "Firebase wrapper for Ruby"
14
14
  s.email = "info@oscardelben.com"
15
15
  s.extra_rdoc_files = [
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".rspec",
22
+ "CHANGELOG",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
@@ -28,6 +29,7 @@ Gem::Specification.new do |s|
28
29
  "firebase.gemspec",
29
30
  "lib/firebase.rb",
30
31
  "lib/firebase/request.rb",
32
+ "lib/firebase/response.rb",
31
33
  "spec/firebase_request_spec.rb",
32
34
  "spec/firebase_spec.rb",
33
35
  "spec/spec_helper.rb"
@@ -1,49 +1,95 @@
1
+ class Firebase
1
2
 
2
- module Firebase
3
-
4
- autoload :Request, 'firebase/request'
3
+ require 'firebase/request'
4
+ require 'firebase/response'
5
5
 
6
6
  class << self
7
- attr_accessor :base_uri, :auth
8
7
 
9
- def base_uri=(other)
10
- if other # Guard from nil
11
- other = other + "/" if other[-1] != "/"
8
+ def format_uri(other)
9
+ if other
10
+ other.end_with?("/") ? other : other + '/'
12
11
  end
13
- @base_uri = other
12
+ end
13
+
14
+ def base_uri=(other)
15
+ deprecate
16
+ default_instance.request.base_uri = format_uri(other)
14
17
  end
15
18
 
16
19
  def auth=(auth)
17
- @auth = auth
20
+ deprecate
21
+ default_instance.request.auth = auth
18
22
  end
19
23
 
20
- # Writes and returns the data
21
- # Firebase.set('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
22
24
  def set(path, data)
23
- Firebase::Request.put(path, data)
25
+ deprecate
26
+ default_instance.set(path, data)
24
27
  end
25
28
 
26
- # Returns the data at path
27
29
  def get(path)
28
- Firebase::Request.get(path)
30
+ deprecate
31
+ default_instance.get(path)
29
32
  end
30
33
 
31
- # Writes the data, returns the key name of the data added
32
- # Firebase.push('users', { 'age' => 18}) => {"name":"-INOQPH-aV_psbk3ZXEX"}
33
34
  def push(path, data)
34
- Firebase::Request.post(path, data)
35
+ deprecate
36
+ default_instance.push(path, data)
35
37
  end
36
38
 
37
- # Deletes the data at path and returs true
38
39
  def delete(path)
39
- Firebase::Request.delete(path)
40
+ deprecate
41
+ default_instance.delete(path)
40
42
  end
41
43
 
42
- # Write the data at path but does not delete ommited children. Returns the data
43
- # Firebase.update('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
44
44
  def update(path, data)
45
- Firebase::Request.patch(path, data)
45
+ deprecate
46
+ default_instance.patch(path, data)
46
47
  end
47
48
 
49
+ def default_instance
50
+ @default_instance ||= Firebase.new(nil, nil)
51
+ end
52
+
53
+ def deprecate
54
+ puts "[FIREBASE] This syntax has been deprecated. Please upgrade to the new Firebase.new(...).method syntax"
55
+ end
56
+
57
+ end
58
+
59
+ attr_accessor :request
60
+
61
+ def initialize(base_uri, auth=nil)
62
+ uri = Firebase.format_uri(base_uri)
63
+ @request = Firebase::Request.new(uri, auth)
48
64
  end
65
+
66
+ # Writes and returns the data
67
+ # Firebase.set('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
68
+ def set(path, data)
69
+ request.put(path, data)
70
+ end
71
+
72
+ # Returns the data at path
73
+ def get(path)
74
+ request.get(path)
75
+ end
76
+
77
+ # Writes the data, returns the key name of the data added
78
+ # Firebase.push('users', { 'age' => 18}) => {"name":"-INOQPH-aV_psbk3ZXEX"}
79
+ def push(path, data)
80
+ request.post(path, data)
81
+ end
82
+
83
+ # Deletes the data at path and returs true
84
+ def delete(path)
85
+ request.delete(path)
86
+ end
87
+
88
+ # Write the data at path but does not delete ommited children. Returns the data
89
+ # Firebase.update('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
90
+ def update(path, data)
91
+ request.patch(path, data)
92
+ end
93
+
49
94
  end
95
+
@@ -3,80 +3,55 @@ require 'json'
3
3
  require 'open-uri'
4
4
  require 'uri'
5
5
 
6
- module Firebase
6
+ class Firebase
7
7
  class Request
8
8
 
9
- class << self
10
-
11
- def get(path)
12
- process(:get, path)
13
- end
14
-
15
- def put(path, value)
16
- process(:put, path, :body => value.to_json)
17
- end
18
-
19
- def post(path, value)
20
- process(:post, path, :body => value.to_json)
21
- end
22
-
23
- def delete(path)
24
- process(:delete, path)
25
- end
26
-
27
- def patch(path, value)
28
- process(:patch, path, :body => value.to_json)
29
- end
30
-
31
- def build_url(path)
32
- host = Firebase.base_uri
33
- path = "#{path}.json"
34
- query_string = Firebase.auth ? "?auth=#{Firebase.auth}" : ""
35
- url = URI.join(Firebase.base_uri, path, query_string)
36
-
37
- url.to_s
38
- end
39
-
40
- private
41
-
42
- def process(method, path, options={})
43
- raise "Please set Firebase.base_uri before making requests" unless Firebase.base_uri
44
-
45
- @@hydra ||= Typhoeus::Hydra.new
46
- request = Typhoeus::Request.new(build_url(path),
47
- :body => options[:body],
48
- :method => method)
49
- @@hydra.queue(request)
50
- @@hydra.run
51
-
52
- new request.response
53
- end
9
+ attr_accessor :base_uri, :auth
54
10
 
11
+ def initialize(base_uri, auth=nil)
12
+ @base_uri = base_uri
13
+ @auth = auth
55
14
  end
56
15
 
57
- attr_accessor :response
16
+ def get(path)
17
+ process(:get, path)
18
+ end
58
19
 
59
- def initialize(response)
60
- @response = response
20
+ def put(path, value)
21
+ process(:put, path, :body => value.to_json)
61
22
  end
62
23
 
63
- def body
64
- JSON.parse(response.body, :quirks_mode => true)
65
- rescue JSON::ParserError => e
66
- response.body == 'null' ? nil : raise
24
+ def post(path, value)
25
+ process(:post, path, :body => value.to_json)
67
26
  end
68
27
 
69
- def raw_body
70
- response.body
28
+ def delete(path)
29
+ process(:delete, path)
71
30
  end
72
31
 
73
- def success?
74
- [200, 204].include? response.code
32
+ def patch(path, value)
33
+ process(:patch, path, :body => value.to_json)
75
34
  end
76
35
 
77
- def code
78
- response.code
36
+ def build_url(path)
37
+ path = "#{path}.json"
38
+ query_string = auth ? "?auth=#{auth}" : ""
39
+ url = URI.join(base_uri, path, query_string)
40
+
41
+ url.to_s
79
42
  end
80
43
 
44
+ private
45
+
46
+ def process(method, path, options={})
47
+ @@hydra ||= Typhoeus::Hydra.new
48
+ request = Typhoeus::Request.new(build_url(path),
49
+ :body => options[:body],
50
+ :method => method)
51
+ @@hydra.queue(request)
52
+ @@hydra.run
53
+
54
+ Firebase::Response.new(request.response)
55
+ end
81
56
  end
82
57
  end
@@ -0,0 +1,28 @@
1
+ class Firebase
2
+ class Response
3
+
4
+ attr_accessor :response
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ end
9
+
10
+ def body
11
+ JSON.parse(response.body, :quirks_mode => true)
12
+ rescue JSON::ParserError => e
13
+ response.body == 'null' ? nil : raise
14
+ end
15
+
16
+ def raw_body
17
+ response.body
18
+ end
19
+
20
+ def success?
21
+ [200, 204].include? response.code
22
+ end
23
+
24
+ def code
25
+ response.code
26
+ end
27
+ end
28
+ end
@@ -2,31 +2,27 @@ require 'spec_helper'
2
2
 
3
3
  describe "Firebase Request" do
4
4
 
5
- after do
6
- Firebase.base_uri = nil
7
- end
8
-
9
5
  describe "url_builder" do
6
+ before do
7
+ @req = req = Firebase::Request.new 'https://test.firebaseio.com'
8
+ end
9
+
10
10
  it "should build the correct url when passed no path" do
11
- Firebase.base_uri = 'https://test.firebaseio.com'
12
- Firebase::Request.build_url(nil).should == 'https://test.firebaseio.com/.json'
11
+ @req.build_url(nil).should == 'https://test.firebaseio.com/.json'
13
12
  end
14
- end
15
13
 
16
- describe "url_builder" do
17
14
  it "should build the correct url when passed a path" do
18
- Firebase.base_uri = 'https://test.firebaseio.com'
15
+ req = Firebase::Request.new 'https://test.firebaseio.com'
19
16
 
20
- Firebase::Request.build_url('users/eugene').should == 'https://test.firebaseio.com/users/eugene.json'
17
+ @req.build_url('users/eugene').should == 'https://test.firebaseio.com/users/eugene.json'
21
18
  end
22
19
  end
23
20
 
24
- describe "url_builder" do
21
+ describe 'auth' do
25
22
  it "should include a auth in the query string, if configured" do
26
- Firebase.base_uri = 'https://test.firebaseio.com'
27
- Firebase.auth = 'secretkey'
23
+ req = Firebase::Request.new('https://test.firebaseio.com', 'secretkey')
28
24
 
29
- Firebase::Request.build_url('users/eugene').should == 'https://test.firebaseio.com/users/eugene.json?auth=secretkey'
25
+ req.build_url('users/eugene').should == 'https://test.firebaseio.com/users/eugene.json?auth=secretkey'
30
26
  end
31
27
  end
32
28
  end
@@ -2,73 +2,71 @@ require 'spec_helper'
2
2
 
3
3
  describe "Firebase" do
4
4
 
5
- it 'should have a base_uri attribute' do
6
- Firebase.base_uri.should be_nil
7
- Firebase.base_uri = 'http://example.com/foo'
8
- Firebase.base_uri.should == 'http://example.com/foo/'
9
- end
10
-
11
5
  let (:data) do
12
6
  { 'name' => 'Oscar' }
13
7
  end
14
8
 
9
+ before do
10
+ @firebase = Firebase.new('https://test.firebaseio.com')
11
+ @req = @firebase.request
12
+ end
13
+
15
14
  describe "set" do
16
15
  it "writes and returns the data" do
17
- Firebase::Request.should_receive(:put).with('users/info', data)
18
- Firebase.set('users/info', data)
16
+ @req.should_receive(:put).with('users/info', data)
17
+ @firebase.set('users/info', data)
19
18
  end
20
19
  end
21
20
 
22
21
  describe "get" do
23
22
  it "returns the data" do
24
- Firebase::Request.should_receive(:get).with('users/info')
25
- Firebase.get('users/info')
23
+ @req.should_receive(:get).with('users/info')
24
+ @firebase.get('users/info')
26
25
  end
27
26
 
28
27
  it "return nil if response body contains 'null'" do
29
- mock_response = mock(:body => 'null')
30
- @request = Firebase::Request.new(mock_response)
31
- expect { @request.body }.to_not raise_error(JSON::ParserError)
28
+ mock_response = double(:body => 'null')
29
+ response = Firebase::Response.new(mock_response)
30
+ expect { response.body }.to_not raise_error
32
31
  end
33
32
 
34
33
  it "return true if response body contains 'true'" do
35
- mock_response = mock(:body => 'true')
36
- @request = Firebase::Request.new(mock_response)
37
- @request.body.should eq(true)
34
+ mock_response = double(:body => 'true')
35
+ response = Firebase::Response.new(mock_response)
36
+ response.body.should eq(true)
38
37
  end
39
38
 
40
39
  it "return false if response body contains 'false'" do
41
- mock_response = mock(:body => 'false')
42
- @request = Firebase::Request.new(mock_response)
43
- @request.body.should eq(false)
40
+ mock_response = double(:body => 'false')
41
+ response = Firebase::Response.new(mock_response)
42
+ response.body.should eq(false)
44
43
  end
45
44
 
46
45
  it "raises JSON::ParserError if response body contains invalid JSON" do
47
- mock_response = mock(:body => '{"this is wrong"')
48
- @request = Firebase::Request.new(mock_response)
49
- expect { @request.body }.to raise_error(JSON::ParserError)
46
+ mock_response = double(:body => '{"this is wrong"')
47
+ response = Firebase::Response.new(mock_response)
48
+ expect { response.body }.to raise_error
50
49
  end
51
-
52
50
  end
53
51
 
54
52
  describe "push" do
55
53
  it "writes the data" do
56
- Firebase::Request.should_receive(:post).with('users', data)
57
- Firebase.push('users', data)
54
+ @req.should_receive(:post).with('users', data)
55
+ @firebase.push('users', data)
58
56
  end
59
57
  end
60
58
 
61
59
  describe "delete" do
62
60
  it "returns true" do
63
- Firebase::Request.should_receive(:delete).with('users/info')
64
- Firebase.delete('users/info')
61
+ @req.should_receive(:delete).with('users/info')
62
+ @firebase.delete('users/info')
65
63
  end
66
64
  end
67
65
 
68
66
  describe "update" do
69
67
  it "updates and returns the data" do
70
- Firebase::Request.should_receive(:patch).with('users/info', data)
71
- Firebase.update('users/info', data)
68
+ @req.should_receive(:patch).with('users/info', data)
69
+ @firebase.update('users/info', data)
72
70
  end
73
71
  end
74
72
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: firebase
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.5
5
+ version: 0.1.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Oscar Del Ben
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-10 00:00:00.000000000 Z
12
+ date: 2013-11-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  version_requirements: !ruby/object:Gem::Requirement
@@ -85,6 +85,7 @@ extra_rdoc_files:
85
85
  files:
86
86
  - .document
87
87
  - .rspec
88
+ - CHANGELOG
88
89
  - Gemfile
89
90
  - Gemfile.lock
90
91
  - LICENSE.txt
@@ -94,6 +95,7 @@ files:
94
95
  - firebase.gemspec
95
96
  - lib/firebase.rb
96
97
  - lib/firebase/request.rb
98
+ - lib/firebase/response.rb
97
99
  - spec/firebase_request_spec.rb
98
100
  - spec/firebase_spec.rb
99
101
  - spec/spec_helper.rb
@@ -110,7 +112,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
112
  - !ruby/object:Gem::Version
111
113
  segments:
112
114
  - 0
113
- hash: 675265491536299218
115
+ hash: -3647962587689699515
114
116
  version: '0'
115
117
  none: false
116
118
  required_rubygems_version: !ruby/object:Gem::Requirement