restiny 3.0.0 → 5.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64bba6028ea7ef4119e6019011b4d35cf1fb850903b446387b3aae0ba47c03e7
4
- data.tar.gz: 629969c98d6d518c3cefb7f9c85d177a404408f6d88dd8d979be5e2be75c1027
3
+ metadata.gz: 366f1afb92a72c9adbc817eb5e8651fcd2df0656584c138660708525343b8407
4
+ data.tar.gz: 7fa7f9df35a0ee12206627a43c7ffb4d299819c5d26340c83186f520e30de99e
5
5
  SHA512:
6
- metadata.gz: 65a76e2738de6da2e4e3dfaf6015f689d8c95d8fea9daa952d153fdf251feec6a145fa16b627bfd2baea1eb3c05cc7d83058e1670b1715d9ea21c18409f081c5
7
- data.tar.gz: 70565f0ddc5c22d76f32cb1e4883261e3bbf181bd7e330a125a3c6982db1b95f6e14342aae7600379ded28697eef9f369ce4b50896b6388de984eea520aec971
6
+ metadata.gz: 8c71e268039ac692949adf704883eda27bc2da5d747dab7d610a09621921ef3e64e4909bca9456431f404a0ff4211a19f31efbdf7eb57701bf852bacf360cf90
7
+ data.tar.gz: 77c6af1bf576b0e590a6659565af7739316cbc3a72b159a26c8b3077308c3713f1cb8cf45c103d3a0993c2012957feaeb372c6bdaec0436b85b4af0b2f290261
@@ -1,21 +1,23 @@
1
- require "faraday"
2
- require "restiny/errors"
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'restiny/errors'
3
5
 
4
6
  module Faraday
5
7
  module Restiny
6
- Faraday::Response.register_middleware(destiny_api: "Faraday::Restiny::Api")
8
+ Faraday::Response.register_middleware(destiny_api: 'Faraday::Restiny::Api')
7
9
 
8
10
  class Api < Middleware
9
11
  def on_complete(env)
10
- return if env["response_body"].empty? || !env["response_body"].dig("ErrorCode")
12
+ return if env['response_body'].empty? || !env['response_body']['ErrorCode']
11
13
 
12
- if env["response_body"]["ErrorCode"] == 1
13
- env[:body] = env["response_body"].dig("Response")
14
+ if env['response_body']['ErrorCode'] == 1
15
+ env[:body] = env['response_body']['Response']
14
16
  return
15
17
  end
16
18
 
17
19
  klass =
18
- case env["status"]
20
+ case env['status']
19
21
  when 400..499
20
22
  ::Restiny::RequestError
21
23
  when 500..599
@@ -24,7 +26,7 @@ module Faraday
24
26
  ::Restiny::Error
25
27
  end
26
28
 
27
- raise klass.new(env["response_body"]["Message"], env["response_body"]["ErrorStatus"])
29
+ raise klass.new(env['response_body']['Message'], env['response_body']['ErrorStatus'])
28
30
  end
29
31
  end
30
32
  end
@@ -1,20 +1,22 @@
1
- require "faraday"
2
- require "restiny/errors"
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'restiny/errors'
3
5
 
4
6
  module Faraday
5
7
  module Restiny
6
- Faraday::Response.register_middleware(destiny_auth: "Faraday::Restiny::Auth")
8
+ Faraday::Response.register_middleware(destiny_auth: 'Faraday::Restiny::Auth')
7
9
 
8
10
  class Auth < Middleware
9
11
  def on_complete(env)
10
- return if env["response_body"].empty? || env["url"].to_s !~ /oauth/
12
+ return if env['response_body'].empty? || env['url'].to_s !~ /oauth/
13
+
14
+ return unless env['response_body']['error']
11
15
 
12
- if env["response_body"]["error"]
13
- raise ::Restiny::AuthenticationError.new(
14
- env["response_body"]["error_description"],
15
- env["response_body"]["error"]
16
- )
17
- end
16
+ raise ::Restiny::AuthenticationError.new(
17
+ env['response_body']['error_description'],
18
+ env['response_body']['error']
19
+ )
18
20
  end
19
21
  end
20
22
  end
@@ -56,16 +56,16 @@ module Restiny
56
56
  end
57
57
 
58
58
  module ComponentType
59
- CHARACTERS = "Characters"
60
- CHARACTER_EQUIPMENT = "CharacterEquipment"
61
- CHARACTER_INVENTORIES = "CharacterInventories"
62
- CHARACTER_LOADOUTS = "CharacterLoadouts"
63
- PROFILES = "Profiles"
64
- PROFILE_INVENTORIES = "ProfileInventories"
65
- ITEM_INSTANCES = "ItemInstances"
66
- ITEM_SOCKETS = "ItemSockets"
67
- ITEM_COMMON_DATA = "ItemCommonData"
68
- ITEM_PLUG_STATES = "ItemPlugStates"
69
- ITEM_REUSABLE_PLUGS = "ItemReusablePlugs"
59
+ CHARACTERS = 'Characters'
60
+ CHARACTER_EQUIPMENT = 'CharacterEquipment'
61
+ CHARACTER_INVENTORIES = 'CharacterInventories'
62
+ CHARACTER_LOADOUTS = 'CharacterLoadouts'
63
+ PROFILES = 'Profiles'
64
+ PROFILE_INVENTORIES = 'ProfileInventories'
65
+ ITEM_INSTANCES = 'ItemInstances'
66
+ ITEM_SOCKETS = 'ItemSockets'
67
+ ITEM_COMMON_DATA = 'ItemCommonData'
68
+ ITEM_PLUG_STATES = 'ItemPlugStates'
69
+ ITEM_REUSABLE_PLUGS = 'ItemReusablePlugs'
70
70
  end
71
71
  end
@@ -8,6 +8,9 @@ module Restiny
8
8
  end
9
9
  end
10
10
 
11
+ class NetworkError < Error
12
+ end
13
+
11
14
  class RequestError < Error
12
15
  end
13
16
 
@@ -1,6 +1,6 @@
1
- # frozen_string/literal: true
1
+ # frozen_string_literal: true
2
2
 
3
- require "sqlite3"
3
+ require 'sqlite3'
4
4
 
5
5
  module Restiny
6
6
  class Manifest
@@ -68,49 +68,36 @@ module Restiny
68
68
  Unlock: %w[unlock unlocks],
69
69
  Vendor: %w[vendor vendors],
70
70
  VendorGroup: %w[vendor_group vendor_groups]
71
- }
71
+ }.freeze
72
72
 
73
- attr_reader :file_path, :version
73
+ attr_reader :version
74
74
 
75
75
  ENTITIES.each do |entity, method_names|
76
76
  full_table_name = "Destiny#{entity}Definition"
77
77
  single_method_name, plural_method_name = method_names
78
78
 
79
- define_method single_method_name do |id|
80
- fetch_item(table_name: full_table_name, id: id)
81
- end
82
-
83
- define_method plural_method_name do |limit: nil|
84
- fetch_items(table_name: full_table_name, limit: limit)
85
- end
79
+ define_method(single_method_name) { |id| fetch_item(table_name: full_table_name, id: id) }
80
+ define_method(plural_method_name) { |limit: nil| fetch_items(table_name: full_table_name, limit: limit) }
86
81
  end
87
82
 
88
83
  def initialize(file_path, version)
89
84
  if file_path.empty? || !File.exist?(file_path) || !File.file?(file_path)
90
- raise Restiny::InvalidParamsError.new("You must provide a valid path for the manifest file")
85
+ raise Restiny::InvalidParamsError, 'You must provide a valid path for the manifest file'
91
86
  end
92
87
 
93
88
  @database = SQLite3::Database.new(file_path, results_as_hash: true)
94
- @file_path = file_path
95
89
  @version = version
96
90
  end
97
91
 
98
92
  private
99
93
 
100
- def get_entity_names
101
- query = "SELECT name from sqlite_schema WHERE name LIKE 'Destiny%'"
102
- @database.execute(query).map { |row| row["name"].gsub(/(Destiny|Definition)/, "") }
103
- end
104
-
105
94
  def fetch_item(table_name:, id:)
106
95
  query = "SELECT json FROM #{table_name} WHERE json_extract(json, '$.hash')=?"
107
96
  result = @database.execute(query, id)
108
97
 
109
- return nil if result.nil? || result.count < 1 || !result[0].include?("json")
110
-
111
- JSON.parse(result[0]["json"])
98
+ JSON.parse(result[0]['json']) unless result.nil? || result.count < 1 || !result[0].include?('json')
112
99
  rescue SQLite3::Exception => e
113
- raise Restiny::RequestError.new("Error while fetching item (#{e})")
100
+ raise Restiny::RequestError, "Error while fetching item (#{e})"
114
101
  end
115
102
 
116
103
  def fetch_items(table_name:, limit: nil)
@@ -119,14 +106,14 @@ module Restiny
119
106
  query = "SELECT json FROM #{table_name} ORDER BY json_extract(json, '$.index')"
120
107
 
121
108
  if limit
122
- query << " LIMIT ?"
109
+ query << ' LIMIT ?'
123
110
  bindings << limit
124
111
  end
125
112
 
126
113
  items = []
127
114
 
128
115
  @database.execute(query, bindings) do |row|
129
- item = JSON.parse(row["json"])
116
+ item = JSON.parse(row['json'])
130
117
  yield item if block_given?
131
118
 
132
119
  items << item
@@ -134,7 +121,7 @@ module Restiny
134
121
 
135
122
  items unless block_given?
136
123
  rescue SQLite3::Exception => e
137
- raise Restiny::RequestError.new("Error while fetching items (#{e})")
124
+ raise Restiny::RequestError, "Error while fetching items (#{e})"
138
125
  end
139
126
  end
140
127
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restiny
4
- VERSION = "3.0.0"
4
+ VERSION = '5.0.0'
5
5
  end
data/lib/restiny.rb CHANGED
@@ -2,28 +2,28 @@
2
2
 
3
3
  $LOAD_PATH.unshift(__dir__)
4
4
 
5
- require "restiny/version"
6
- require "restiny/constants"
7
- require "restiny/errors"
8
- require "restiny/manifest"
9
-
10
- require "faraday"
11
- require "faraday/follow_redirects"
12
- require "faraday/destiny/api"
13
- require "faraday/destiny/auth"
14
-
15
- require "down"
16
- require "json"
17
- require "securerandom"
18
- require "zip"
5
+ require 'restiny/version'
6
+ require 'restiny/constants'
7
+ require 'restiny/errors'
8
+ require 'restiny/manifest'
9
+
10
+ require 'down'
11
+ require 'faraday'
12
+ require 'faraday/follow_redirects'
13
+ require 'faraday/destiny/api'
14
+ require 'faraday/destiny/auth'
15
+ require 'json'
16
+ require 'securerandom'
17
+ require 'tmpdir'
18
+ require 'zip'
19
19
 
20
20
  module Restiny
21
21
  extend self
22
22
 
23
- BUNGIE_URL = "https://www.bungie.net"
24
- API_BASE_URL = BUNGIE_URL + "/platform"
23
+ BUNGIE_URL = 'https://www.bungie.net'
24
+ API_BASE_URL = "#{BUNGIE_URL}/platform".freeze
25
25
 
26
- attr_accessor :api_key, :oauth_state, :oauth_client_id, :access_token
26
+ attr_accessor :api_key, :oauth_state, :oauth_client_id, :access_token, :user_agent
27
27
 
28
28
  # OAuth methods
29
29
 
@@ -32,58 +32,63 @@ module Restiny
32
32
 
33
33
  @oauth_state = state || SecureRandom.hex(15)
34
34
 
35
- params = { response_type: "code", client_id: @oauth_client_id, state: @oauth_state }
36
- params["redirect_url"] = redirect_url unless redirect_url.nil?
35
+ params = { response_type: 'code', client_id: @oauth_client_id, state: @oauth_state }
36
+ params['redirect_url'] = redirect_url unless redirect_url.nil?
37
37
 
38
- auth_connection.build_url(BUNGIE_URL + "/en/oauth/authorize/", params).to_s
38
+ auth_connection.build_url("#{BUNGIE_URL}/en/oauth/authorize/", params).to_s
39
39
  end
40
40
 
41
41
  def request_access_token(code:, redirect_url: nil)
42
42
  check_oauth_client_id
43
43
 
44
- params = { code: code, grant_type: "authorization_code", client_id: @oauth_client_id }
45
- params["redirect_url"] = redirect_url unless redirect_url.nil?
44
+ params = { code: code, grant_type: 'authorization_code', client_id: @oauth_client_id }
45
+ params['redirect_url'] = redirect_url unless redirect_url.nil?
46
46
 
47
- auth_post("app/oauth/token/", params)
47
+ auth_connection.post('app/oauth/token/', params).body
48
48
  end
49
49
 
50
50
  # Manifest methods
51
51
 
52
- def get_manifest(locale: "en", force_download: false)
53
- result = api_get("Destiny2/Manifest/")
54
- raise Restiny::ResponseError.new("Unable to determine manifest details") if result.nil?
52
+ def download_manifest(locale: 'en', force_download: false)
53
+ result = api_get('Destiny2/Manifest/')
54
+ raise Restiny::ResponseError, 'Unable to determine manifest details' if result.nil?
55
55
 
56
- live_version = result.dig("version")
56
+ live_version = result['version']
57
57
 
58
- if force_download || @manifest.nil? || @manifest_version != live_version
59
- url = BUNGIE_URL + result.dig("mobileWorldContentPaths", locale)
58
+ @manifests ||= {}
59
+ @manifest_versions ||= {}
60
60
 
61
- zipped_file = Down.download(url)
62
- database_file_path = zipped_file.path + ".db"
61
+ if force_download || @manifests[locale].nil? || @manifest_versions[locale] != live_version
62
+ manifest_db_url = result.dig('mobileWorldContentPaths', locale)
63
+ raise Restiny::RequestError, 'Unknown locale' if manifest_db_url.nil?
63
64
 
64
- Zip::File.open(zipped_file) { |file| file.first.extract(database_file_path) }
65
+ database_file_path = Zip::File.open(Down.download(BUNGIE_URL + manifest_db_url)) do |zip_file|
66
+ File.join(Dir.tmpdir, "#{live_version}.en.content.db").tap do |path|
67
+ zip_file.first.extract(path) unless File.exist?(path)
68
+ end
69
+ end
65
70
 
66
- @manifest = Manifest.new(database_file_path, live_version)
67
- @manifest_version = live_version
71
+ @manifests[locale] = Manifest.new(database_file_path, live_version)
72
+ @manifest_versions[locale] = live_version
68
73
  end
69
74
 
70
- @manifest
75
+ @manifests[locale]
71
76
  rescue Down::Error => e
72
- raise Restiny::NetworkError.new("Unable to download the manifest file", error.response.code)
73
- rescue Zip::Error => error
74
- raise Restiny::Error.new("Unable to unzip the manifest file (#{error})")
77
+ raise Restiny::NetworkError.new('Unable to download the manifest file', e.response.code)
78
+ rescue Zip::Error => e
79
+ raise Restiny::Error, "Unable to unzip the manifest file (#{e})"
75
80
  end
76
81
 
77
82
  # Profile and related methods
78
83
 
79
84
  def get_profile(membership_id:, membership_type:, components:, type_url: nil)
80
85
  if !components.is_a?(Array) || components.empty?
81
- raise Restiny::InvalidParamsError.new("Please provide at least one component")
86
+ raise Restiny::InvalidParamsError, 'Please provide at least one component'
82
87
  end
83
88
 
84
89
  url = "Destiny2/#{membership_type}/Profile/#{membership_id}/"
85
90
  url += type_url if type_url
86
- url += "?components=#{components.join(",")}"
91
+ url += "?components=#{components.join(',')}"
87
92
 
88
93
  api_get(url)
89
94
  end
@@ -109,14 +114,26 @@ module Restiny
109
114
  # User methods.
110
115
 
111
116
  def get_user_memberships_by_id(membership_id, membership_type: Platform::ALL)
112
- raise Restiny::InvalidParamsError.new("Please provide a membership ID") if membership_id.nil?
117
+ raise Restiny::InvalidParamsError, 'Please provide a membership ID' if membership_id.nil?
118
+
113
119
  api_get("User/GetMembershipsById/#{membership_id}/#{membership_type}/")
114
120
  end
115
121
 
122
+ def get_user_primary_membership(parent_membership_id, use_fallback: true)
123
+ result = get_user_memberships_by_id(parent_membership_id)
124
+ return nil if result.nil? || result['primaryMembershipId'].nil?
125
+
126
+ result['destinyMemberships'].each do |membership|
127
+ return membership if membership['membershipID'] == result['primaryMembershipId']
128
+ end
129
+
130
+ result['destinyMemberships'][0] if use_fallback
131
+ end
132
+
116
133
  def search_player_by_bungie_name(name, membership_type: Platform::ALL)
117
- display_name, display_name_code = name.split("#")
134
+ display_name, display_name_code = name.split('#')
118
135
  if display_name.nil? || display_name_code.nil?
119
- raise Restiny::InvalidParamsError.new("You must provide a valid Bungie name")
136
+ raise Restiny::InvalidParamsError, 'You must provide a valid Bungie name'
120
137
  end
121
138
 
122
139
  api_post(
@@ -128,7 +145,7 @@ module Restiny
128
145
  )
129
146
  end
130
147
 
131
- def search_users_by_global_name(name:, page: 0)
148
+ def search_users_by_global_name(name, page: 0)
132
149
  api_post("User/Search/GlobalName/#{page}/", params: { displayNamePrefix: name })
133
150
  end
134
151
 
@@ -142,29 +159,24 @@ module Restiny
142
159
  api_connection.post(url, params, token_header).body
143
160
  end
144
161
 
145
- def auth_post(url, params)
146
- auth_connection.post(url, params, "Content-Type" => "application/x-www-form-urlencoded").body
147
- end
148
-
149
162
  private
150
163
 
151
164
  def check_oauth_client_id
152
- raise Restiny::RequestError.new("You need to set an OAuth client ID") unless @oauth_client_id
165
+ raise Restiny::RequestError, 'You need to set an OAuth client ID' unless @oauth_client_id
153
166
  end
154
167
 
155
168
  def default_headers
156
- { "User-Agent": "restiny v#{Restiny::VERSION}" }
169
+ { 'User-Agent': @user_agent || "restiny v#{Restiny::VERSION}" }
157
170
  end
158
171
 
159
172
  def api_connection
160
- raise Restiny::InvalidParamsError.new("You need to set an API key") unless @api_key
173
+ raise Restiny::InvalidParamsError, 'You need to set an API key' unless @api_key
161
174
 
162
175
  @connection ||=
163
176
  Faraday.new(
164
177
  url: API_BASE_URL,
165
- headers: default_headers.merge("X-API-KEY": @api_key)
178
+ headers: default_headers.merge('X-API-KEY': @api_key)
166
179
  ) do |faraday|
167
- faraday.request :url_encoded
168
180
  faraday.request :json
169
181
  faraday.response :follow_redirects
170
182
  faraday.response :destiny_api
@@ -176,7 +188,6 @@ module Restiny
176
188
  @auth_connection ||=
177
189
  Faraday.new(url: API_BASE_URL, headers: default_headers) do |faraday|
178
190
  faraday.request :url_encoded
179
- faraday.request :json
180
191
  faraday.response :follow_redirects
181
192
  faraday.response :destiny_auth
182
193
  faraday.response :json
@@ -184,6 +195,6 @@ module Restiny
184
195
  end
185
196
 
186
197
  def token_header
187
- {}.tap { |headers| headers["authorization"] = "Bearer #{@oauth_token}" if @oauth_token }
198
+ {}.tap { |headers| headers['authorization'] = "Bearer #{@access_token}" if @access_token }
188
199
  end
189
200
  end
metadata CHANGED
@@ -1,71 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restiny
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bogan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-11 00:00:00.000000000 Z
11
+ date: 2023-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: faraday
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: faraday-follow_redirects
14
+ name: down
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '0.3'
19
+ version: '5.4'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '0.3'
26
+ version: '5.4'
41
27
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
28
+ name: faraday
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '1.3'
33
+ version: '2.0'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '1.3'
40
+ version: '2.0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: down
42
+ name: faraday-follow_redirects
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '5.4'
47
+ version: '0.3'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '5.4'
54
+ version: '0.3'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rubyzip
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -81,75 +67,19 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '2.3'
83
69
  - !ruby/object:Gem::Dependency
84
- name: rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '13.0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '13.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.12'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.12'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop-rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '2.22'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '2.22'
125
- - !ruby/object:Gem::Dependency
126
- name: standard
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.28'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.28'
139
- - !ruby/object:Gem::Dependency
140
- name: vcr
70
+ name: sqlite3
141
71
  requirement: !ruby/object:Gem::Requirement
142
72
  requirements:
143
73
  - - "~>"
144
74
  - !ruby/object:Gem::Version
145
- version: '6.1'
146
- type: :development
75
+ version: '1.3'
76
+ type: :runtime
147
77
  prerelease: false
148
78
  version_requirements: !ruby/object:Gem::Requirement
149
79
  requirements:
150
80
  - - "~>"
151
81
  - !ruby/object:Gem::Version
152
- version: '6.1'
82
+ version: '1.3'
153
83
  description: A gem for interacting with Bungie's Destiny API.
154
84
  email:
155
85
  - d+restiny@waferbaby.com
@@ -167,24 +97,25 @@ files:
167
97
  homepage: http://github.com/waferbaby/restiny
168
98
  licenses:
169
99
  - MIT
170
- metadata: {}
171
- post_install_message:
100
+ metadata:
101
+ rubygems_mfa_required: 'true'
102
+ post_install_message:
172
103
  rdoc_options: []
173
104
  require_paths:
174
105
  - lib
175
106
  required_ruby_version: !ruby/object:Gem::Requirement
176
107
  requirements:
177
- - - ">="
108
+ - - ">"
178
109
  - !ruby/object:Gem::Version
179
- version: '0'
110
+ version: '3.0'
180
111
  required_rubygems_version: !ruby/object:Gem::Requirement
181
112
  requirements:
182
113
  - - ">="
183
114
  - !ruby/object:Gem::Version
184
115
  version: '0'
185
116
  requirements: []
186
- rubygems_version: 3.3.7
187
- signing_key:
117
+ rubygems_version: 3.2.33
118
+ signing_key:
188
119
  specification_version: 4
189
120
  summary: A Destiny API gem
190
121
  test_files: []