firefighter 0.2.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d70d5902e9171a3dc50294cd10eb0f65fb855ad2
4
- data.tar.gz: 945163b9cbb335a032c3ade37e37550f19c09ace
2
+ SHA256:
3
+ metadata.gz: 4ebbe214d98c7909950821f879de7c65c5901ac0dfa1594d99251349907bde46
4
+ data.tar.gz: 8cfd532905aa5e07a208bfcda957786de52e1795b5e3f3976c7a44cd4638437b
5
5
  SHA512:
6
- metadata.gz: '08c6c1f4ffa81d6df98c7b70d2f8c053fe17ce1fc3fd835656e2e8a2ae50a6c9bc6915fefd9507e6867b25ef708043d16791e87a5b28539c47650f30b35ccb41'
7
- data.tar.gz: 5200e36e5eb5f86be345824414b2670ed9e1695151f5a44e60933b67230dc362858bbf4f15b8382ccfab75a349ddf389da6c79af1cf7b0be61aacd4c4d4aa73b
6
+ metadata.gz: d148780c482d59e2b13909abe163ba4a80ad013003c2cb16fe075614fa17f62357ac9fabe40269e9995737a0dddf3a918055b05a17fcfcbcffee4b83cb7bacb3
7
+ data.tar.gz: 04ed2e8b446bd4bcf360a44b08c64bc28e279bd6cf90e0ab83fff9bc41f988d674857d88325aa0c4fd27c37d5f5f28550fa3461561c39f17d6f4c233e3b366fd
@@ -4,7 +4,7 @@ jobs:
4
4
  working_directory: ~/repo
5
5
 
6
6
  docker:
7
- - image: circleci/ruby:2.4
7
+ - image: circleci/ruby:2.7
8
8
 
9
9
  steps:
10
10
  - checkout
data/.irbrc ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift File.expand_path('lib')
2
+
3
+ require 'byebug'
4
+ require 'firefighter'
5
+ require_relative 'spec/support/credentials'
6
+
7
+ @client = Firefighter::RealtimeDatabase.from_env
8
+ puts "loaded realtime db, use the @client var"
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ ### 1.2.0
4
+
5
+ - adds `Firefighter::Identitytoolkit#verify_password`
6
+
7
+ ### 1.1.0
8
+
9
+ - compatibility with ruby 2.7.1
10
+
11
+ ### 1.0.0
12
+
13
+ - adds `Firefighter::RealtimeDatabase#listen` (experimental)
14
+ - moves `Firefighter::RealtimeDatabase#fetch_access_token` to `Firefighter::TokenGenerator#fetch_access_token` (breaking)
15
+
16
+ ### 0.3.0
17
+
18
+ - adds `Firefighter::RealtimeDatabase#delete`
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in firefighter.gemspec
6
6
  gemspec
7
+
8
+ gem 'byebug'
@@ -1,68 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- firefighter (0.2.0)
5
- http (~> 3.0)
6
- jwt (~> 2.0)
4
+ firefighter (1.2.0)
5
+ http (> 3.0)
6
+ jwt (> 2.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- addressable (2.5.2)
12
- public_suffix (>= 2.0.2, < 4.0)
11
+ addressable (2.7.0)
12
+ public_suffix (>= 2.0.2, < 5.0)
13
+ byebug (11.1.3)
13
14
  crack (0.4.3)
14
15
  safe_yaml (~> 1.0.0)
15
- diff-lcs (1.3)
16
- domain_name (0.5.20180417)
16
+ diff-lcs (1.4.4)
17
+ domain_name (0.5.20190701)
17
18
  unf (>= 0.0.5, < 1.0.0)
18
- hashdiff (0.3.7)
19
- http (3.3.0)
19
+ ffi (1.13.1)
20
+ ffi-compiler (1.0.1)
21
+ ffi (>= 1.0.0)
22
+ rake
23
+ hashdiff (1.0.1)
24
+ http (4.4.1)
20
25
  addressable (~> 2.3)
21
26
  http-cookie (~> 1.0)
22
- http-form_data (~> 2.0)
23
- http_parser.rb (~> 0.6.0)
27
+ http-form_data (~> 2.2)
28
+ http-parser (~> 1.2.0)
24
29
  http-cookie (1.0.3)
25
30
  domain_name (~> 0.5)
26
- http-form_data (2.1.1)
27
- http_parser.rb (0.6.0)
28
- jwt (2.1.0)
29
- public_suffix (3.0.3)
30
- rake (10.5.0)
31
- rspec (3.8.0)
32
- rspec-core (~> 3.8.0)
33
- rspec-expectations (~> 3.8.0)
34
- rspec-mocks (~> 3.8.0)
35
- rspec-core (3.8.0)
36
- rspec-support (~> 3.8.0)
37
- rspec-expectations (3.8.2)
31
+ http-form_data (2.3.0)
32
+ http-parser (1.2.1)
33
+ ffi-compiler (>= 1.0, < 2.0)
34
+ jwt (2.2.1)
35
+ public_suffix (4.0.5)
36
+ rake (13.0.1)
37
+ rspec (3.9.0)
38
+ rspec-core (~> 3.9.0)
39
+ rspec-expectations (~> 3.9.0)
40
+ rspec-mocks (~> 3.9.0)
41
+ rspec-core (3.9.2)
42
+ rspec-support (~> 3.9.3)
43
+ rspec-expectations (3.9.2)
38
44
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.8.0)
40
- rspec-mocks (3.8.0)
45
+ rspec-support (~> 3.9.0)
46
+ rspec-mocks (3.9.1)
41
47
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.8.0)
43
- rspec-support (3.8.0)
44
- safe_yaml (1.0.4)
48
+ rspec-support (~> 3.9.0)
49
+ rspec-support (3.9.3)
50
+ safe_yaml (1.0.5)
45
51
  timecop (0.9.1)
46
52
  unf (0.1.4)
47
53
  unf_ext
48
- unf_ext (0.0.7.5)
49
- vcr (4.0.0)
50
- webmock (3.4.2)
54
+ unf_ext (0.0.7.7)
55
+ vcr (6.0.0)
56
+ webmock (3.8.3)
51
57
  addressable (>= 2.3.6)
52
58
  crack (>= 0.3.2)
53
- hashdiff
59
+ hashdiff (>= 0.4.0, < 2.0.0)
54
60
 
55
61
  PLATFORMS
56
62
  ruby
57
63
 
58
64
  DEPENDENCIES
59
- bundler (~> 1.16)
65
+ bundler
66
+ byebug
60
67
  firefighter!
61
- rake (~> 10.0)
62
- rspec (~> 3.0)
63
- timecop (~> 0.9)
64
- vcr (~> 4.0)
65
- webmock (~> 3.4)
66
-
67
- BUNDLED WITH
68
- 1.16.1
68
+ rake
69
+ rspec
70
+ timecop
71
+ vcr
72
+ webmock
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 phoet
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Talk to Firebase API from Ruby:
4
4
 
5
- - signup
6
- - read, write, add data
7
- - generate JWT tokens for token-auth
5
+ - identity: signup, account_info, accounts_download, verify_password
6
+ - realtime: read, listen, write, add, delete data
7
+ - tokens: generate JWT tokens for token-auth
8
8
 
9
9
  ## Installation
10
10
 
@@ -24,7 +24,60 @@ Or install it yourself as:
24
24
 
25
25
  ## Usage
26
26
 
27
- TODO: Write usage instructions here
27
+ ```ruby
28
+ # Firefighter::Identitytoolkit
29
+ # from_env uses environment variables:
30
+ # - FIREBASE_WEB_API_KEY
31
+ # - FIREBASE_SERVICE_ACCOUNT_EMAIL
32
+ identitytoolkit = Firefighter::Identitytoolkit.from_env
33
+
34
+ account = identitytoolkit.signup('test@test.de', 'totalgeheimespasswort')
35
+
36
+ account = identitytoolkit.account_info(account['idToken'])
37
+
38
+ accounts = identitytoolkit.download_accounts
39
+
40
+ account = identitytoolkit.verify_password('test@test.de', 'totalgeheimespasswort')
41
+ ```
42
+
43
+ ```ruby
44
+ # Firefighter::RealtimeDatabase
45
+ # from_env uses environment variables:
46
+ # - FIREBASE_WEB_DB_NAME
47
+ # - FIREBASE_WEB_DB_SECRET
48
+ realtime_database = Firefighter::RealtimeDatabase.from_env
49
+
50
+ realtime_database.write("some-path/key", {some: 'data'})
51
+
52
+ hash = realtime_database.read("some-path/key")
53
+
54
+ realtime_database.add("some-path/list", {some: 'data'})
55
+
56
+ list = realtime_database.read("some-path/list")
57
+
58
+ realtime_database.delete("some-path/list")
59
+
60
+ realtime_database.listen("some-test/write/") do |connection, event, path, data|
61
+ puts event, path, data
62
+ connection.close
63
+ end
64
+ ```
65
+
66
+ ```ruby
67
+ # Firefighter::TokenGenerator
68
+ # from_env uses environment variables:
69
+ # - FIREBASE_SERVICE_ACCOUNT_EMAIL
70
+ # - FIREBASE_SERVICE_ACCOUNT_PRIVATE_KEY
71
+ token_generator = Firefighter::TokenGenerator.from_env
72
+
73
+ access_token = token_generator.create_access_token
74
+
75
+ custom_token = token_generator.create_custom_token('someUid', data: {some: 'payload'})
76
+
77
+ payload = token_generator.read_token(custom_token)
78
+
79
+ token = token_generator.fetch_access_token
80
+ ```
28
81
 
29
82
  ## Development
30
83
 
@@ -34,8 +87,12 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
34
87
 
35
88
  ## Contributing
36
89
 
37
- Bug reports and pull requests are welcome on GitHub at https://github.com/phoet/firefighter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
90
+ Bug reports and pull requests are welcome on GitHub at https://github.com/penseo/firefighter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
38
91
 
39
92
  ## Code of Conduct
40
93
 
41
- Everyone interacting in the Firefighter project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/phoet/firefighter/blob/master/CODE_OF_CONDUCT.md).
94
+ Everyone interacting in the Firefighter project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/penseo/firefighter/blob/master/CODE_OF_CONDUCT.md).
95
+
96
+ ## Changelog
97
+
98
+ [changelog](https://github.com/penseo/firefighter/blob/master/CHANGELOG.md)
@@ -28,13 +28,13 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency "http", "~> 3.0"
32
- spec.add_dependency "jwt", "~> 2.0"
31
+ spec.add_dependency "http", "> 3.0"
32
+ spec.add_dependency "jwt", "> 2.0"
33
33
 
34
- spec.add_development_dependency "bundler", "~> 1.16"
35
- spec.add_development_dependency "rake", "~> 10.0"
36
- spec.add_development_dependency "rspec", "~> 3.0"
37
- spec.add_development_dependency "vcr", "~> 4.0"
38
- spec.add_development_dependency "webmock", "~> 3.4"
39
- spec.add_development_dependency "timecop", "~> 0.9"
34
+ spec.add_development_dependency "bundler"
35
+ spec.add_development_dependency "rake"
36
+ spec.add_development_dependency "rspec"
37
+ spec.add_development_dependency "vcr"
38
+ spec.add_development_dependency "webmock"
39
+ spec.add_development_dependency "timecop"
40
40
  end
@@ -3,19 +3,25 @@ module Firefighter
3
3
  include Web
4
4
 
5
5
  def self.from_env
6
- config = {
6
+ new(
7
7
  api_key: ENV['FIREBASE_WEB_API_KEY'],
8
8
  service_account_email: ENV['FIREBASE_SERVICE_ACCOUNT_EMAIL'],
9
- service_account_private_key_data: ENV['FIREBASE_PRIVATE_KEY_DATA'],
10
- }
11
- new(config)
9
+ )
12
10
  end
13
11
 
14
- def initialize(api_key:, service_account_email:, service_account_private_key_data:, token_generator: TokenGenerator.from_env)
12
+ def initialize(api_key:, service_account_email:)
15
13
  @api_key = api_key
16
14
  @service_account_email = service_account_email
17
- @service_account_private_key_data = service_account_private_key_data
18
- @token_generator = token_generator
15
+ end
16
+
17
+ def verify_password(email, password)
18
+ url = endpoint('verifyPassword')
19
+ data = {
20
+ email: email,
21
+ password: password,
22
+ returnSecureToken: true
23
+ }
24
+ call(:post, url, data)
19
25
  end
20
26
 
21
27
  def signup(email, password)
@@ -38,24 +44,14 @@ module Firefighter
38
44
  call(:post, url, data)
39
45
  end
40
46
 
41
- def download_accounts
42
- url = endpoint('downloadAccount')
43
-
44
- headers = {Authorization: "Bearer #{fetch_access_token}" }
45
-
47
+ def download_accounts(access_token = TokenGenerator.from_env.fetch_access_token)
46
48
  users = []
49
+
50
+ headers = {Authorization: "Bearer #{access_token}" }
51
+ url = endpoint('downloadAccount')
47
52
  paginate(url, headers: headers) { |data| users << data['users'] }
48
- users.flatten.compact
49
- end
50
53
 
51
- def fetch_access_token
52
- url = 'https://accounts.google.com/o/oauth2/token'
53
- data = {
54
- assertion: @token_generator.create_access_token,
55
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer'
56
- }
57
- response = call(:post, url, data)
58
- response['access_token']
54
+ users.flatten.compact
59
55
  end
60
56
 
61
57
  private
@@ -3,11 +3,10 @@ module Firefighter
3
3
  include Web
4
4
 
5
5
  def self.from_env
6
- config = {
6
+ new(
7
7
  db_name: ENV['FIREBASE_WEB_DB_NAME'],
8
8
  db_secret: ENV['FIREBASE_WEB_DB_SECRET']
9
- }
10
- new(config)
9
+ )
11
10
  end
12
11
 
13
12
  def initialize(db_name:, db_secret:)
@@ -15,6 +14,19 @@ module Firefighter
15
14
  @db_secret = db_secret
16
15
  end
17
16
 
17
+ def listen(path)
18
+ url = endpoint(path)
19
+ sse(url) do |connection, event, payload|
20
+ data = JSON.parse(payload)
21
+ yield connection, event, data['path'], data['data']
22
+ end
23
+ end
24
+
25
+ def read(path)
26
+ url = endpoint(path)
27
+ call(:get, url)
28
+ end
29
+
18
30
  def write(path, data)
19
31
  url = endpoint(path)
20
32
  call(:put, url, data)
@@ -25,9 +37,9 @@ module Firefighter
25
37
  call(:post, url, data)
26
38
  end
27
39
 
28
- def read(path)
40
+ def delete(path)
29
41
  url = endpoint(path)
30
- call(:get, url)
42
+ call(:delete, url)
31
43
  end
32
44
 
33
45
  private
@@ -3,20 +3,30 @@ require 'jwt'
3
3
  # https://firebase.google.com/docs/auth/admin/create-custom-tokens
4
4
  module Firefighter
5
5
  class TokenGenerator
6
+ include Web
7
+
6
8
  def self.from_env
7
- config = {
9
+ new(
8
10
  service_account_email: ENV['FIREBASE_SERVICE_ACCOUNT_EMAIL'],
9
- private_key: OpenSSL::PKey::RSA.new(ENV['FIREBASE_PRIVATE_KEY_DATA']),
10
- }
11
- new(config)
11
+ service_account_private_key: ENV['FIREBASE_SERVICE_ACCOUNT_PRIVATE_KEY'],
12
+ )
12
13
  end
13
14
 
14
- def initialize(service_account_email:, private_key:, algorithm: 'RS256')
15
+ def initialize(service_account_email:, service_account_private_key:, algorithm: 'RS256')
15
16
  @service_account_email = service_account_email
16
- @private_key = private_key
17
17
  @algorithm = algorithm
18
+ @private_key = OpenSSL::PKey::RSA.new(service_account_private_key)
18
19
  end
19
20
 
21
+ def fetch_access_token
22
+ url = 'https://accounts.google.com/o/oauth2/token'
23
+ data = {
24
+ assertion: create_access_token,
25
+ grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer'
26
+ }
27
+ response = call(:post, url, data)
28
+ response['access_token']
29
+ end
20
30
 
21
31
  def create_access_token(expiration: 60 * 60)
22
32
  now_seconds = Time.now.to_i
@@ -1,3 +1,3 @@
1
1
  module Firefighter
2
- VERSION = "0.2.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -8,10 +8,31 @@ module Firefighter
8
8
  @logger ||= Logger.new(STDOUT)
9
9
  end
10
10
 
11
+ def sse(url, headers = {})
12
+ response = HTTP.get(url, headers: headers.merge(Accept: 'text/event-stream'))
13
+ if response.status == 200
14
+ body = response.body
15
+ while part = body.readpartial do
16
+ part = part.to_s.strip
17
+ next if part.empty?
18
+
19
+ lines = part.split("\n")
20
+ event = lines.grep(/event: (.+)/) { $1 }[0]
21
+ payload = lines.grep(/data: (.+)/) { $1 }[0]
22
+ yield response.connection, event, payload
23
+ end
24
+ end
25
+ ensure
26
+ response.connection.close if response
27
+ end
28
+
11
29
  def call(method, url, data = {}, headers = {})
12
- if method == :get
30
+ case method
31
+ when :get
13
32
  response = HTTP.get(url, headers: headers)
14
- elsif method == :form
33
+ when :delete
34
+ response = HTTP.delete(url, headers: headers)
35
+ when :form
15
36
  response = HTTP.send(:post, url, form: data, headers: headers)
16
37
  else
17
38
  response = HTTP.send(method, url, json: data, headers: headers)
metadata CHANGED
@@ -1,127 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firefighter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - phoet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: jwt
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: vcr
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '4.0'
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '4.0'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: webmock
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '3.4'
103
+ version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '3.4'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: timecop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '0.9'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '0.9'
124
+ version: '0'
125
125
  description: Firebase API Wrapper
126
126
  email:
127
127
  - phoetmail@googlemail.com
@@ -131,10 +131,13 @@ extra_rdoc_files: []
131
131
  files:
132
132
  - ".circleci/config.yml"
133
133
  - ".gitignore"
134
+ - ".irbrc"
134
135
  - ".rspec"
136
+ - CHANGELOG.md
135
137
  - CODE_OF_CONDUCT.md
136
138
  - Gemfile
137
139
  - Gemfile.lock
140
+ - LICENSE.txt
138
141
  - README.md
139
142
  - Rakefile
140
143
  - bin/console
@@ -165,8 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
168
  - !ruby/object:Gem::Version
166
169
  version: '0'
167
170
  requirements: []
168
- rubyforge_project:
169
- rubygems_version: 2.6.13
171
+ rubygems_version: 3.0.3
170
172
  signing_key:
171
173
  specification_version: 4
172
174
  summary: Firebase API Wrapper