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 +4 -4
- data/lib/faraday/destiny/api.rb +10 -8
- data/lib/faraday/destiny/auth.rb +12 -10
- data/lib/restiny/constants.rb +11 -11
- data/lib/restiny/errors.rb +3 -0
- data/lib/restiny/manifest.rb +12 -25
- data/lib/restiny/version.rb +1 -1
- data/lib/restiny.rb +66 -55
- metadata +23 -92
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 366f1afb92a72c9adbc817eb5e8651fcd2df0656584c138660708525343b8407
|
|
4
|
+
data.tar.gz: 7fa7f9df35a0ee12206627a43c7ffb4d299819c5d26340c83186f520e30de99e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8c71e268039ac692949adf704883eda27bc2da5d747dab7d610a09621921ef3e64e4909bca9456431f404a0ff4211a19f31efbdf7eb57701bf852bacf360cf90
|
|
7
|
+
data.tar.gz: 77c6af1bf576b0e590a6659565af7739316cbc3a72b159a26c8b3077308c3713f1cb8cf45c103d3a0993c2012957feaeb372c6bdaec0436b85b4af0b2f290261
|
data/lib/faraday/destiny/api.rb
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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:
|
|
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[
|
|
12
|
+
return if env['response_body'].empty? || !env['response_body']['ErrorCode']
|
|
11
13
|
|
|
12
|
-
if env[
|
|
13
|
-
env[:body] = env[
|
|
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[
|
|
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[
|
|
29
|
+
raise klass.new(env['response_body']['Message'], env['response_body']['ErrorStatus'])
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
end
|
data/lib/faraday/destiny/auth.rb
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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:
|
|
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[
|
|
12
|
+
return if env['response_body'].empty? || env['url'].to_s !~ /oauth/
|
|
13
|
+
|
|
14
|
+
return unless env['response_body']['error']
|
|
11
15
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
data/lib/restiny/constants.rb
CHANGED
|
@@ -56,16 +56,16 @@ module Restiny
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
module ComponentType
|
|
59
|
-
CHARACTERS =
|
|
60
|
-
CHARACTER_EQUIPMENT =
|
|
61
|
-
CHARACTER_INVENTORIES =
|
|
62
|
-
CHARACTER_LOADOUTS =
|
|
63
|
-
PROFILES =
|
|
64
|
-
PROFILE_INVENTORIES =
|
|
65
|
-
ITEM_INSTANCES =
|
|
66
|
-
ITEM_SOCKETS =
|
|
67
|
-
ITEM_COMMON_DATA =
|
|
68
|
-
ITEM_PLUG_STATES =
|
|
69
|
-
ITEM_REUSABLE_PLUGS =
|
|
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
|
data/lib/restiny/errors.rb
CHANGED
data/lib/restiny/manifest.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
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 :
|
|
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
|
|
80
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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 <<
|
|
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[
|
|
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
|
|
124
|
+
raise Restiny::RequestError, "Error while fetching items (#{e})"
|
|
138
125
|
end
|
|
139
126
|
end
|
|
140
127
|
end
|
data/lib/restiny/version.rb
CHANGED
data/lib/restiny.rb
CHANGED
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
$LOAD_PATH.unshift(__dir__)
|
|
4
4
|
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
14
|
-
|
|
15
|
-
require
|
|
16
|
-
require
|
|
17
|
-
require
|
|
18
|
-
require
|
|
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 =
|
|
24
|
-
API_BASE_URL = BUNGIE_URL
|
|
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:
|
|
36
|
-
params[
|
|
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
|
|
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:
|
|
45
|
-
params[
|
|
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
|
-
|
|
47
|
+
auth_connection.post('app/oauth/token/', params).body
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Manifest methods
|
|
51
51
|
|
|
52
|
-
def
|
|
53
|
-
result = api_get(
|
|
54
|
-
raise Restiny::ResponseError
|
|
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
|
|
56
|
+
live_version = result['version']
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
@manifests ||= {}
|
|
59
|
+
@manifest_versions ||= {}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
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(
|
|
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
|
-
@
|
|
67
|
-
@
|
|
71
|
+
@manifests[locale] = Manifest.new(database_file_path, live_version)
|
|
72
|
+
@manifest_versions[locale] = live_version
|
|
68
73
|
end
|
|
69
74
|
|
|
70
|
-
@
|
|
75
|
+
@manifests[locale]
|
|
71
76
|
rescue Down::Error => e
|
|
72
|
-
raise Restiny::NetworkError.new(
|
|
73
|
-
rescue Zip::Error =>
|
|
74
|
-
raise Restiny::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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
{
|
|
169
|
+
{ 'User-Agent': @user_agent || "restiny v#{Restiny::VERSION}" }
|
|
157
170
|
end
|
|
158
171
|
|
|
159
172
|
def api_connection
|
|
160
|
-
raise Restiny::InvalidParamsError
|
|
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(
|
|
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[
|
|
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:
|
|
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-
|
|
11
|
+
date: 2023-11-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
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: '
|
|
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: '
|
|
26
|
+
version: '5.4'
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
28
|
+
name: faraday
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
44
30
|
requirements:
|
|
45
31
|
- - "~>"
|
|
46
32
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
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: '
|
|
40
|
+
version: '2.0'
|
|
55
41
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
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: '
|
|
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: '
|
|
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:
|
|
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: '
|
|
146
|
-
type: :
|
|
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: '
|
|
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
|
-
|
|
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.
|
|
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: []
|