firebase 0.1.0

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,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'typhoeus'
7
+ gem 'json'
8
+
9
+ # Add dependencies to develop your gem here.
10
+ # Include everything needed to run rake, tests, features, etc.
11
+ group :development do
12
+ gem "rspec"
13
+ gem "jeweler", "~> 1.8.3"
14
+ end
@@ -0,0 +1,34 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ git (1.2.5)
6
+ jeweler (1.8.3)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rdoc
11
+ json (1.7.0)
12
+ mime-types (1.18)
13
+ rake (0.9.2.2)
14
+ rdoc (3.12)
15
+ json (~> 1.4)
16
+ rspec (2.9.0)
17
+ rspec-core (~> 2.9.0)
18
+ rspec-expectations (~> 2.9.0)
19
+ rspec-mocks (~> 2.9.0)
20
+ rspec-core (2.9.0)
21
+ rspec-expectations (2.9.1)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-mocks (2.9.0)
24
+ typhoeus (0.3.3)
25
+ mime-types
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ jeweler (~> 1.8.3)
32
+ json
33
+ rspec
34
+ typhoeus
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Oscar Del Ben
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,40 @@
1
+ # firebase
2
+
3
+ Ruby wrapper for the Firebase backend API.
4
+
5
+ Changes are sent to all subscribed clients automatically, so you can
6
+ update your clients **in realtime from the backend**.
7
+
8
+ ```
9
+ gem install firebase
10
+ ```
11
+
12
+ ```ruby
13
+ Firebase.base_uri = 'http://gamma.firebase.com/youruser'
14
+
15
+ response = Firebase.push("todos", { :name => 'Pick the milk', :priority => 1)
16
+ response.success? # => true
17
+ response.code # => 200
18
+ response.body # => { 'name' => "-INOQPH-aV_psbk3ZXEX" }
19
+ response.raw_body # => '{"name":"-INOQPH-aV_psbk3ZXEX"}'
20
+ ```
21
+
22
+ So far, supported methods are:
23
+
24
+ ```ruby
25
+ Firebase.set(path, data)
26
+ Firebase.get(path)
27
+ Firebase.push(path, data)
28
+ Firebase.delete(path)
29
+ ```
30
+
31
+ More features are coming soon.
32
+
33
+ More information about Firebase and the Firebase API is available at the
34
+ [official website](http://www.firebase.com/)
35
+
36
+ ### Copyright
37
+
38
+ Copyright (c) 2012 Oscar Del Ben. See LICENSE.txt for
39
+ further details.
40
+
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "firebase"
18
+ gem.homepage = "http://github.com/oscardelben/firebase-ruby"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Firebase wrapper for Ruby}
21
+ gem.description = %Q{Firebase wrapper for Ruby}
22
+ gem.email = "info@oscardelben.com"
23
+ gem.authors = ["Oscar Del Ben"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rdoc/task'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "firebase #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,36 @@
1
+
2
+ module Firebase
3
+
4
+ autoload :Request, 'firebase/request'
5
+
6
+ class << self
7
+ attr_accessor :base_uri
8
+
9
+ def base_uri=(other)
10
+ other = other + "/" if other[-1] != "/"
11
+ @base_uri = other
12
+ end
13
+
14
+ # Writes and returns the data
15
+ # Firebase.set('users/info', { 'name' => 'Oscar' }) => { 'name' => 'Oscar' }
16
+ def set(path, data)
17
+ Firebase::Request.put(path, data)
18
+ end
19
+
20
+ # Returns the data at path
21
+ def get(path)
22
+ Firebase::Request.get(path)
23
+ end
24
+
25
+ # Writes the data, returns the key name of the data added
26
+ # Firebase.push('users', { 'age' => 18}) => {"name":"-INOQPH-aV_psbk3ZXEX"}
27
+ def push(path, data)
28
+ Firebase::Request.post(path, data)
29
+ end
30
+
31
+ # Deletes the data at path and returs true
32
+ def delete(path)
33
+ Firebase::Request.delete(path)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,67 @@
1
+ require 'typhoeus'
2
+ require 'json'
3
+
4
+ module Firebase
5
+ class Request
6
+
7
+ class << self
8
+
9
+ def get(path)
10
+ process(:get, path)
11
+ end
12
+
13
+ def put(path, value)
14
+ process(:put, path, :body => value.to_json)
15
+ end
16
+
17
+ def post(path, value)
18
+ process(:post, path, :body => value.to_json)
19
+ end
20
+
21
+ def delete(path)
22
+ process(:delete, path)
23
+ end
24
+
25
+ private
26
+
27
+ def process(method, path, options={})
28
+ raise "Please set Firebase.base_uri before making requests" unless Firebase.base_uri
29
+
30
+ url = URI.join(Firebase.base_uri, path)
31
+
32
+ request = Typhoeus::Request.new(url.to_s,
33
+ :body => options[:body],
34
+ :method => method)
35
+ hydra = Typhoeus::Hydra.new
36
+ hydra.queue(request)
37
+ hydra.run
38
+
39
+ new request.response
40
+ end
41
+
42
+ end
43
+
44
+ attr_accessor :response
45
+
46
+ def initialize(response)
47
+ @response = response
48
+ end
49
+
50
+ def body
51
+ JSON.parse(response.body)
52
+ end
53
+
54
+ def raw_body
55
+ response.body
56
+ end
57
+
58
+ def success?
59
+ response.code.in? [200, 204]
60
+ end
61
+
62
+ def code
63
+ response.code
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Firebase" do
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
+ let (:data) do
12
+ { 'name' => 'Oscar' }
13
+ end
14
+
15
+ describe "set" do
16
+ it "writes and returns the data" do
17
+ Firebase::Request.should_receive(:put).with('users/info', data)
18
+ Firebase.set('users/info', data)
19
+ end
20
+ end
21
+
22
+ describe "get" do
23
+ it "returns the data" do
24
+ Firebase::Request.should_receive(:get).with('users/info')
25
+ Firebase.get('users/info')
26
+ end
27
+ end
28
+
29
+ describe "push" do
30
+ it "writes the data" do
31
+ Firebase::Request.should_receive(:post).with('users', data)
32
+ Firebase.push('users', data)
33
+ end
34
+ end
35
+
36
+ describe "delete" do
37
+ it "returns true" do
38
+ Firebase::Request.should_receive(:delete).with('users/info')
39
+ Firebase.delete('users/info')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'firebase'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: firebase
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Oscar Del Ben
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: typhoeus
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.3
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.3
78
+ description: Firebase wrapper for Ruby
79
+ email: info@oscardelben.com
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files:
83
+ - LICENSE.txt
84
+ - README.md
85
+ files:
86
+ - .document
87
+ - .rspec
88
+ - Gemfile
89
+ - Gemfile.lock
90
+ - LICENSE.txt
91
+ - README.md
92
+ - Rakefile
93
+ - VERSION
94
+ - lib/firebase.rb
95
+ - lib/firebase/request.rb
96
+ - spec/firebase_spec.rb
97
+ - spec/spec_helper.rb
98
+ homepage: http://github.com/oscardelben/firebase-ruby
99
+ licenses:
100
+ - MIT
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ segments:
112
+ - 0
113
+ hash: -3148004848148024895
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 1.8.21
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Firebase wrapper for Ruby
126
+ test_files: []