rest-firebase 0.9.1 → 0.9.2
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.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/Gemfile +1 -1
- data/Rakefile +1 -1
- data/TODO.md +0 -2
- data/lib/rest-firebase.rb +9 -2
- data/rest-firebase.gemspec +4 -4
- data/task/gemgem.rb +0 -4
- data/test/test_api.rb +23 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dca5beda4578735562a476964ad93b23d7b9709
|
4
|
+
data.tar.gz: 4bc1fb75725927cc7f243d6e60175149175580e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a381558128fced5ef49b8a16eef953382357f271f3fd13100face98cdb91cbd4d56f228c818113796eccf84cb3b6ce0726265b172d99e12b57c3f696eef397ad
|
7
|
+
data.tar.gz: f27f1b64f9dc5d91c010a1f3533d9ce12b46af9f2dd94e74b660bbb85a6ec15d507da0dfa2a6bed41df0d8a817572bb4612b905c217ebc6dbedd0670e5998fd6
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ $LOAD_PATH.unshift(File.expand_path("#{dir}/rest-core/lib"))
|
|
10
10
|
|
11
11
|
Gemgem.init(dir) do |s|
|
12
12
|
s.name = 'rest-firebase'
|
13
|
-
s.version = '0.9.
|
13
|
+
s.version = '0.9.2'
|
14
14
|
s.homepage = 'https://github.com/CodementorIO/rest-firebase'
|
15
15
|
|
16
16
|
s.authors = ['Codementor', 'Lin Jen-Shin (godfat)']
|
data/TODO.md
CHANGED
data/lib/rest-firebase.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rest-core'
|
|
3
3
|
|
4
4
|
# https://www.firebase.com/docs/security/custom-login.html
|
5
5
|
# https://www.firebase.com/docs/rest-api.html
|
6
|
-
RestFirebase = RC::Builder.client(:d, :secret, :auth) do
|
6
|
+
RestFirebase = RC::Builder.client(:d, :secret, :auth, :iat) do
|
7
7
|
use RC::Timeout , 10
|
8
8
|
|
9
9
|
use RC::DefaultSite , 'https://SampleChat.firebaseIO-demo.com/'
|
@@ -75,6 +75,8 @@ module RestFirebase::Client
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def request env, app=app
|
78
|
+
check_auth
|
79
|
+
|
78
80
|
path = "#{env[REQUEST_PATH]}.json"
|
79
81
|
payload = if env[REQUEST_PAYLOAD]
|
80
82
|
{REQUEST_PAYLOAD => Json.encode(env[REQUEST_PAYLOAD])}
|
@@ -90,7 +92,7 @@ module RestFirebase::Client
|
|
90
92
|
"Please set your secret") unless secret
|
91
93
|
|
92
94
|
header = {:typ => 'JWT', :alg => 'HS256'}
|
93
|
-
claims = {:v => 0, :iat =>
|
95
|
+
claims = {:v => 0, :iat => iat, :d => d}.merge(opts)
|
94
96
|
# http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-26
|
95
97
|
input = [header, claims].map{ |d| base64url(Json.encode(d)) }.join('.')
|
96
98
|
# http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-20
|
@@ -101,6 +103,11 @@ module RestFirebase::Client
|
|
101
103
|
def base64url str; [str].pack('m').tr('+/', '-_'); end
|
102
104
|
def default_query; {:auth => auth}; end
|
103
105
|
def default_auth ; generate_auth ; end
|
106
|
+
def default_iat ; Time.now.to_i ; end
|
107
|
+
|
108
|
+
def check_auth
|
109
|
+
self.auth = nil if iat && Time.now.to_i - iat > 82800
|
110
|
+
end
|
104
111
|
end
|
105
112
|
|
106
113
|
class RestFirebase
|
data/rest-firebase.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rest-firebase 0.9.
|
2
|
+
# stub: rest-firebase 0.9.2 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rest-firebase"
|
6
|
-
s.version = "0.9.
|
6
|
+
s.version = "0.9.2"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = [
|
11
11
|
"Codementor",
|
12
12
|
"Lin Jen-Shin (godfat)"]
|
13
|
-
s.date = "2014-06
|
13
|
+
s.date = "2014-08-06"
|
14
14
|
s.description = "Ruby Firebase REST API client built on top of [rest-core][].\n\n[rest-core]: https://github.com/godfat/rest-core"
|
15
15
|
s.email = ["help@codementor.io"]
|
16
16
|
s.files = [
|
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"test/test_api.rb"]
|
32
32
|
s.homepage = "https://github.com/CodementorIO/rest-firebase"
|
33
33
|
s.licenses = ["Apache License 2.0"]
|
34
|
-
s.rubygems_version = "2.
|
34
|
+
s.rubygems_version = "2.4.1"
|
35
35
|
s.summary = "Ruby Firebase REST API client built on top of [rest-core][]."
|
36
36
|
s.test_files = ["test/test_api.rb"]
|
37
37
|
|
data/task/gemgem.rb
CHANGED
@@ -227,10 +227,6 @@ end # of gem namespace
|
|
227
227
|
desc 'Run tests'
|
228
228
|
task :test do
|
229
229
|
next if Gemgem.test_files.empty?
|
230
|
-
|
231
|
-
require 'bacon'
|
232
|
-
Bacon.extend(Bacon::TestUnitOutput)
|
233
|
-
Bacon.summary_on_exit
|
234
230
|
Gemgem.test_files.each{ |file| require "#{Gemgem.dir}/#{file[0..-4]}" }
|
235
231
|
end
|
236
232
|
|
data/test/test_api.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'rest-firebase'
|
3
3
|
require 'rest-core/test'
|
4
4
|
|
5
|
-
describe RestFirebase do
|
5
|
+
Pork::API.describe RestFirebase do
|
6
6
|
before do
|
7
7
|
stub(Time).now{ Time.at(0) }
|
8
8
|
end
|
@@ -21,22 +21,22 @@ describe RestFirebase do
|
|
21
21
|
RestFirebase.new(:secret => 'nnf')
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
would 'get true' do
|
25
25
|
stub_request(:get, path).to_return(:body => 'true')
|
26
26
|
firebase.get('https://a').should.eq true
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
would 'put {"status":"ok"}' do
|
30
30
|
stub_request(:put, path).with(:body => json).to_return(:body => json)
|
31
31
|
firebase.put('https://a', rbon).should.eq rbon
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
would 'have no payload for delete' do
|
35
35
|
stub_request(:delete, path).with(:body => nil).to_return(:body => json)
|
36
36
|
firebase.delete('https://a').should.eq rbon
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
would 'parse event source' do
|
40
40
|
stub_request(:get, path).to_return(:body => <<-SSE)
|
41
41
|
event: put
|
42
42
|
data: {}
|
@@ -50,16 +50,27 @@ SSE
|
|
50
50
|
m = [{'event' => 'put' , 'data' => {}},
|
51
51
|
{'event' => 'keep-alive', 'data' => nil}]
|
52
52
|
es = firebase.event_source('https://a')
|
53
|
-
es.should.kind_of RestFirebase::Client::EventSource
|
53
|
+
es.should.kind_of? RestFirebase::Client::EventSource
|
54
54
|
es.onmessage do |event, data|
|
55
55
|
{'event' => event, 'data' => data}.should.eq m.shift
|
56
56
|
end.onerror do |error|
|
57
|
-
error.should.kind_of RC::Json::ParseError
|
57
|
+
error.should.kind_of? RC::Json::ParseError
|
58
58
|
end.start.wait
|
59
|
-
m.should.empty
|
59
|
+
m.should.empty?
|
60
60
|
end
|
61
61
|
|
62
|
-
|
62
|
+
would 'refresh token' do
|
63
|
+
mock(Time).now{ Time.at(1) }
|
64
|
+
auth = firebase.auth
|
65
|
+
Muack.verify(Time)
|
66
|
+
stub(Time).now{ Time.at(0) }
|
67
|
+
|
68
|
+
stub_request(:get, path).to_return(:body => 'true')
|
69
|
+
firebase.get('https://a').should.eq true
|
70
|
+
firebase.auth.should.not.eq auth
|
71
|
+
end
|
72
|
+
|
73
|
+
define_method :check do |status, klass|
|
63
74
|
stub_request(:delete, path).to_return(
|
64
75
|
:body => '{}', :status => status)
|
65
76
|
|
@@ -68,12 +79,12 @@ SSE
|
|
68
79
|
WebMock.reset!
|
69
80
|
end
|
70
81
|
|
71
|
-
|
82
|
+
would 'raise exception when encountering error' do
|
72
83
|
[400, 401, 402, 403, 404, 406, 417].each do |status|
|
73
|
-
check
|
84
|
+
check(status, RestFirebase::Error)
|
74
85
|
end
|
75
86
|
[500, 502, 503].each do |status|
|
76
|
-
check
|
87
|
+
check(status, RestFirebase::Error::ServerError)
|
77
88
|
end
|
78
89
|
end
|
79
90
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-firebase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Codementor
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06
|
12
|
+
date: 2014-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-core
|
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
version: '0'
|
71
71
|
requirements: []
|
72
72
|
rubyforge_project:
|
73
|
-
rubygems_version: 2.
|
73
|
+
rubygems_version: 2.4.1
|
74
74
|
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: Ruby Firebase REST API client built on top of [rest-core][].
|