restiny 0.3.0 → 0.4.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
2
  SHA256:
3
- metadata.gz: 9ad23e571d4f6b91fc296e0578074983f8d6883518ffe94743a6003bbf20dfd0
4
- data.tar.gz: 6aba22d2cfb3a8bc2f8c93d0a11ccfef63a55eaa8aaec008a3b769710d4b3ff5
3
+ metadata.gz: 741ac894abe43506371ddd982baddc4fc151742a1b60a7d7c0fdf702d69c5a46
4
+ data.tar.gz: 2bde117539309611f7bb2f7f859903195352cad1ba1158546238876496d3efa3
5
5
  SHA512:
6
- metadata.gz: e600c2e4a0552420404dd6aa11692613e65cd6ee7efddc7a5200f8750569e39f259d5156b25fb8baca7175f7575b870794827213548e74877c7faeea23c18e75
7
- data.tar.gz: 2e319308c54b1e793862400bc5ff362d0570924edf372d1f07a1f06766210e031dda2c79b7db8d171588d8dc8b849c482f6bb4d0ca86902e7d739bd6c831a410
6
+ metadata.gz: c301404d8149756a2cfab53a871fdbb8e1f68dd3cecd0a9d52698c54d421d6547588ea9dd8bc0f34584b9f9471d59a46df8af3f3d8c7603a13205fee619a9202
7
+ data.tar.gz: dae32ebf9a7646304782d6f3ccaca965d704bd0d62f0a8429abd1820877570deeb4054cc4ccbd9f77f58800d366cda30589e1e6d912b6d6576e3cae6f682f026
@@ -6,7 +6,7 @@ PLATFORM_PSN = 2
6
6
  PLATFORM_STEAM = 3
7
7
  PLATFORM_EPIC = 6
8
8
 
9
- COMPONENT_TYPE_PROFILES = 'Profiles'.freeze
10
- COMPONENT_TYPE_PROFILE_INVENTORIES = 'ProfileInventories'.freeze
11
- COMPONENT_TYPE_CHARACTERS = 'Characters'.freeze
12
- COMPONENT_TYPE_CHARACTER_INVENTORIES = 'CharacterInventories'.freeze
9
+ COMPONENT_TYPE_PROFILES = "Profiles"
10
+ COMPONENT_TYPE_PROFILE_INVENTORIES = "ProfileInventories"
11
+ COMPONENT_TYPE_CHARACTERS = "Characters"
12
+ COMPONENT_TYPE_CHARACTER_INVENTORIES = "CharacterInventories"
@@ -1,19 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restiny
4
- class Error < StandardError; end
5
- class RequestError < Error; end
6
- class InvalidParamsError < RequestError; end
7
- class RateLimitedError < RequestError
8
- end
9
-
10
- class ResponseError < Error; end
11
- class NetworkError < Error
12
- attr_accessor :status_code
13
-
14
- def initialize(message, status_code = nil)
15
- @status_code = status_code
4
+ class Error < StandardError
5
+ def initialize(message, details = nil)
6
+ @details = details
16
7
  super(message)
17
8
  end
18
9
  end
10
+
11
+ class RequestError < Error; end
12
+
13
+ class InvalidParamsError < RequestError; end
14
+
15
+ class RateLimitedError < RequestError; end
16
+
17
+ class ResponseError < Error; end
19
18
  end
@@ -1,68 +1,67 @@
1
1
  # frozen_string/literal: true
2
- require 'down'
3
- require 'json'
4
- require 'sqlite3'
5
- require 'zip'
2
+ require "down"
3
+ require "json"
4
+ require "sqlite3"
5
+ require "zip"
6
6
 
7
7
  module Restiny
8
8
  class Manifest
9
9
  TABLES = {
10
- 'Achievement': { item: 'achievement', items: 'achievements' },
11
- 'Activity': { item: 'activity', items: 'activities' },
12
- 'ActivityGraph': { item: 'activity_graph', items: 'activity_graphs' },
13
- 'ActivityMode': { item: 'activity_modes', items: 'activity_modes' },
14
- 'ActivityModifier': { item: 'activity_modifier', items: 'activity_modifiers' },
15
- 'ActivityType': { item: 'activity_type', items: 'activity_types' },
16
- 'Artifact': { item: 'artifact', items: 'artifacts' },
17
- 'Bond': { item: 'bond', items: 'bonds' },
18
- 'BreakerType': { item: 'breaker_type', items: 'breaker_types' },
19
- 'Checklist': { item: 'checklist', items: 'checklists' },
20
- 'Class': { item: 'class', items: 'classes' },
21
- 'Collectible': { item: 'collectible', items: 'collectibles' },
22
- 'DamageType': { item: 'damage_type', items: 'damage_types' },
23
- 'Destination': { item: 'destination', items: 'destinations' },
24
- 'EnergyType': { item: 'energy_type', items: 'energy_types' },
25
- 'EquipmentSlot': { item: 'equipment_slot', items: 'equipment_slots' },
26
- 'EventCard': { item: 'event_card', items: 'event_cards' },
27
- 'Faction': { item: 'faction', items: 'factions' },
28
- 'Gender': { item: 'gender', items: 'genders' },
29
- 'HistoricalStats': { item: 'historical_stat', items: 'historical_stats' },
30
- 'InventoryBucket': { item: 'inventory_bucket', items: 'inventory_buckets' },
31
- 'InventoryItem': { item: 'inventory_item', items: 'inventory_items' },
32
- 'ItemCategory': { item: 'item_category', items: 'item_categories' },
33
- 'ItemTierType': { item: 'item_tier_type', items: 'item_tier_types' },
34
- 'Location': { item: 'location', items: 'locations' },
35
- 'Lore': { item: 'lore', items: 'lore_entries' },
36
- 'MaterialRequirementSet': { item: 'material_requirement_set', items: 'material_requirement_sets' },
37
- 'MedalTier': { item: 'medal_tier', items: 'medal_tiers' },
38
- 'Metric': { item: 'metric', items: 'metrics' },
39
- 'Milestone': { item: 'milestone', items: 'milestones' },
40
- 'Objective': { item: 'objective', items: 'objectives' },
41
- 'Place': { item: 'place', items: 'places' },
42
- 'PlugSet': { item: 'plug_set', items: 'plug_sets' },
43
- 'PowerCap': { item: 'power_cap', items: 'power_caps' },
44
- 'PresentationNode': { item: 'presentation_node', items: 'presentation_nodes' },
45
- 'Progression': { item: 'progression', items: 'progression_data' },
46
- 'ProgressionLevelRequirement': { item: 'progression_level_requirement', items: 'progression_level_requirements' },
47
- 'Race': { item: 'race', items: 'races' },
48
- 'Record': { item: 'record', items: 'records' },
49
- 'ReportReasonCategory': { item: 'report_reason_category', items: 'report_reason_categories' },
50
- 'RewardSource': { item: 'reward_source', items: 'reward_sources' },
51
- 'SackRewardItemList': { item: 'sack_reward_item_list', items: 'sack_reward_item_lists' },
52
- 'SandboxPattern': { item: 'sandbox_pattern', items: 'sandbox_patterns' },
53
- 'SandboxPerk': { item: 'sandbox_perk', items: 'sandbox_perks' },
54
- 'Season': { item: 'season', items: 'seasons' },
55
- 'SeasonPass': { item: 'season_pass', items: 'season_passes' },
56
- 'SocketCategory': { item: 'socket_category', items: 'socket_categories' },
57
- 'SocketType': { item: 'socket_type', items: 'socket_types' },
58
- 'Stat': { item: 'stat', items: 'stats' },
59
- 'StatGroup': { item: 'stat_group', items: 'stat_groups' },
60
- 'TalentGrid': { item: 'talent_grid', items: 'talent_grids' },
61
- 'TraitCategory': { item: 'trait_category', items: 'trait_categories' },
62
- 'Trait': { item: 'trait', items: 'traits' },
63
- 'Unlock': { item: 'unlock', items: 'unlocks' },
64
- 'Vendor': { item: 'vendor', items: 'vendors' },
65
- 'VendorGroup': { item: 'vendor_group', items: 'vendor_groups' }
10
+ Achievement: {item: "achievement", items: "achievements"},
11
+ Activity: {item: "activity", items: "activities"},
12
+ ActivityGraph: {item: "activity_graph", items: "activity_graphs"},
13
+ ActivityMode: {item: "activity_mode", items: "activity_modes"},
14
+ ActivityModifier: {item: "activity_modifier", items: "activity_modifiers"},
15
+ ActivityType: {item: "activity_type", items: "activity_types"},
16
+ Artifact: {item: "artifact", items: "artifacts"},
17
+ Bond: {item: "bond", items: "bonds"},
18
+ BreakerType: {item: "breaker_type", items: "breaker_types"},
19
+ Checklist: {item: "checklist", items: "checklists"},
20
+ Class: {item: "guardian_class", items: "guardian_classes"},
21
+ Collectible: {item: "collectible", items: "collectibles"},
22
+ DamageType: {item: "damage_type", items: "damage_types"},
23
+ Destination: {item: "destination", items: "destinations"},
24
+ EnergyType: {item: "energy_type", items: "energy_types"},
25
+ EquipmentSlot: {item: "equipment_slot", items: "equipment_slots"},
26
+ EventCard: {item: "event_card", items: "event_cards"},
27
+ Faction: {item: "faction", items: "factions"},
28
+ Gender: {item: "gender", items: "genders"},
29
+ HistoricalStats: {item: "historical_stat", items: "historical_stats"},
30
+ InventoryBucket: {item: "inventory_bucket", items: "inventory_buckets"},
31
+ InventoryItem: {item: "inventory_item", items: "inventory_items"},
32
+ ItemCategory: {item: "item_category", items: "item_categories"},
33
+ ItemTierType: {item: "item_tier_type", items: "item_tier_types"},
34
+ Location: {item: "location", items: "locations"},
35
+ Lore: {item: "lore", items: "lore_entries"},
36
+ MaterialRequirementSet: {item: "material_requirement_set", items: "material_requirement_sets"},
37
+ MedalTier: {item: "medal_tier", items: "medal_tiers"},
38
+ Metric: {item: "metric", items: "metrics"},
39
+ Milestone: {item: "milestone", items: "milestones"},
40
+ Objective: {item: "objective", items: "objectives"},
41
+ Place: {item: "place", items: "places"},
42
+ PlugSet: {item: "plug_set", items: "plug_sets"},
43
+ PowerCap: {item: "power_cap", items: "power_caps"},
44
+ PresentationNode: {item: "presentation_node", items: "presentation_nodes"},
45
+ Progression: {item: "progression", items: "progression_data"},
46
+ ProgressionLevelRequirement: {item: "progression_level_requirement", items: "progression_level_requirements"},
47
+ Race: {item: "race", items: "races"},
48
+ Record: {item: "record", items: "records"},
49
+ ReportReasonCategory: {item: "report_reason_category", items: "report_reason_categories"},
50
+ RewardSource: {item: "reward_source", items: "reward_sources"},
51
+ SackRewardItemList: {item: "sack_reward_item_list", items: "sack_reward_item_lists"},
52
+ SandboxPattern: {item: "sandbox_pattern", items: "sandbox_patterns"},
53
+ SandboxPerk: {item: "sandbox_perk", items: "sandbox_perks"},
54
+ Season: {item: "season", items: "seasons"},
55
+ SeasonPass: {item: "season_pass", items: "season_passes"},
56
+ SocketCategory: {item: "socket_category", items: "socket_categories"},
57
+ SocketType: {item: "socket_type", items: "socket_types"},
58
+ Stat: {item: "stat", items: "stats"},
59
+ StatGroup: {item: "stat_group", items: "stat_groups"},
60
+ TalentGrid: {item: "talent_grid", items: "talent_grids"},
61
+ Trait: {item: "trait", items: "traits"},
62
+ Unlock: {item: "unlock", items: "unlocks"},
63
+ Vendor: {item: "vendor", items: "vendors"},
64
+ VendorGroup: {item: "vendor_group", items: "vendor_groups"}
66
65
  }
67
66
 
68
67
  attr_reader :file_path
@@ -71,41 +70,25 @@ module Restiny
71
70
  full_table_name = "Destiny#{table_name}Definition"
72
71
 
73
72
  define_method method_names[:item] do |hash|
74
- query = "SELECT json FROM #{full_table_name} WHERE json_extract(json, '$.hash')=?"
75
-
76
- result = perform_query(query, [hash])
77
- result = JSON.parse(result[0]['json']) unless result.nil?
73
+ fetch_item(full_table_name, hash)
78
74
  end
79
75
 
80
- define_method method_names[:items] do |limit: nil, filter_empty: false, &block|
81
- query = "SELECT json_extract(json, '$.hash') AS hash, json_extract(json, '$.displayProperties.name') AS name
82
- FROM #{full_table_name} "
83
-
84
- query << "WHERE json_extract(json, '$.displayProperties.name') IS NOT NULL " if filter_empty
85
- query << "ORDER BY json_extract(json, '$.index')"
86
-
87
- bindings = []
88
-
89
- if limit
90
- query << " LIMIT ?"
91
- bindings << limit
92
- end
93
-
94
- perform_query(query, bindings)
76
+ define_method method_names[:items] do |options = {}|
77
+ fetch_items(full_table_name, options)
95
78
  end
96
79
  end
97
80
 
98
81
  def self.download(url)
99
82
  zipped_file = Down.download(url)
100
- manifest_path = zipped_file.path + ".db"
83
+ manifest_path = zipped_file.path + ".db"
101
84
 
102
85
  Zip::File.open(zipped_file) { |file| file.first.extract(manifest_path) }
103
86
 
104
- self.new(manifest_path)
87
+ new(manifest_path)
105
88
  rescue Down::ResponseError => error
106
89
  raise Restiny::NetworkError.new("Unable to download the manifest file", error.response.code)
107
90
  rescue Zip::Error => error
108
- raise Restiny::Error.new("Unable to unzip the manifest file (#{e})")
91
+ raise Restiny::Error.new("Unable to unzip the manifest file (#{error})")
109
92
  end
110
93
 
111
94
  def initialize(file_path)
@@ -119,10 +102,44 @@ module Restiny
119
102
 
120
103
  private
121
104
 
122
- def perform_query(query, bindings, &block)
123
- @database.execute(query, bindings)
105
+ def fetch_item(table_name, hash)
106
+ query = "SELECT json FROM #{table_name} WHERE json_extract(json, '$.hash')=?"
107
+ result = @database.execute(query, hash)
108
+
109
+ return nil if result.nil? || result.count < 1 || !result[0].include?("json")
110
+
111
+ JSON.parse(result[0]["json"])
112
+ rescue SQLite3::Exception => e
113
+ raise Restiny::RequestError.new("Error while fetching item (#{e})")
114
+ end
115
+
116
+ def fetch_items(table_name, options = {})
117
+ bindings = []
118
+
119
+ query = "SELECT json FROM #{table_name} "
120
+ query << "WHERE json_extract(json, '$.displayProperties.name') != '' " if options[:filter_empty]
121
+ query << "ORDER BY json_extract(json, '$.index')"
122
+
123
+ if options[:limit]
124
+ query << " LIMIT ?"
125
+ bindings << options[:limit]
126
+ end
127
+
128
+ result = []
129
+
130
+ @database.execute(query, bindings) do |row|
131
+ item = JSON.parse(row["json"])
132
+
133
+ if block_given?
134
+ yield item
135
+ else
136
+ result << item
137
+ end
138
+ end
139
+
140
+ result unless block_given?
124
141
  rescue SQLite3::Exception => e
125
- raise Restiny::RequestError.new("Error while querying the manifest (#{e})")
142
+ raise Restiny::RequestError.new("Error while fetching item (#{e})")
126
143
  end
127
144
  end
128
145
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restiny
4
- VERSION = '0.3.0'
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/restiny.rb CHANGED
@@ -2,17 +2,14 @@
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
- require 'restiny/user'
10
- require 'restiny/membership'
11
- require 'restiny/character'
12
-
13
- require 'faraday'
14
- require 'faraday/follow_redirects'
15
- require 'securerandom'
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 "securerandom"
16
13
 
17
14
  module Restiny
18
15
  extend self
@@ -30,7 +27,7 @@ module Restiny
30
27
  @oauth_state = state || SecureRandom.hex(15)
31
28
 
32
29
  params = {
33
- response_type: 'code',
30
+ response_type: "code",
34
31
  client_id: @oauth_client_id,
35
32
  state: @oauth_state
36
33
  }
@@ -45,24 +42,21 @@ module Restiny
45
42
 
46
43
  params = {
47
44
  code: code,
48
- grant_type: 'authorization_code',
45
+ grant_type: "authorization_code",
49
46
  client_id: @oauth_client_id
50
47
  }
51
48
 
52
49
  params[:redirect_url] = redirect_url unless redirect_url.nil?
53
50
 
54
- post('/platform/app/oauth/token/', params, "Content-Type" => "application/x-www-form-urlencoded")
55
- end
56
-
57
- def request_refresh_token
51
+ post("/platform/app/oauth/token/", params, "Content-Type" => "application/x-www-form-urlencoded")
58
52
  end
59
53
 
60
54
  # Manifest methods
61
55
 
62
- def download_manifest(locale = 'en')
56
+ def download_manifest(locale = "en")
63
57
  response = get("/platform/Destiny2/Manifest/")
64
58
 
65
- manifest_path = response.dig('Response', 'mobileWorldContentPaths', locale)
59
+ manifest_path = response.dig("Response", "mobileWorldContentPaths", locale)
66
60
  raise Restiny::ResponseError.new("Unable to determine manifest URL") if manifest_path.nil?
67
61
 
68
62
  Manifest.download(BUNGIE_URL + manifest_path)
@@ -72,39 +66,18 @@ module Restiny
72
66
 
73
67
  def get_profile(membership_id, membership_type, components = [])
74
68
  raise Restiny::InvalidParamsError.new("You must provide at least one component") if components.empty?
75
-
76
- component_query = components.join(",")
77
- response = get("/platform/Destiny2/#{membership_type}/Profile/#{membership_id}?components=#{component_query}")
78
-
79
- {}.tap do |output|
80
- components.each do |component|
81
- case component.downcase
82
- when 'characters'
83
- output[:characters] = parse_profile_characters_response(response)
84
- end
85
- end
86
- end
69
+ get("/platform/Destiny2/#{membership_type}/Profile/#{membership_id}?components=#{components.join(",")}")
87
70
  end
88
71
 
89
72
  # Account methods
90
73
 
91
74
  def get_user_by_membership_id(membership_id, membership_type = PLATFORM_ALL)
92
75
  raise Restiny::InvalidParamsError.new("You must provide a valid membership ID") if membership_id.nil?
93
-
94
- response = get("/platform/User/GetMembershipsById/#{membership_id}/#{membership_type}/")
95
- results = response.dig('Response')
96
-
97
- return nil if results.nil?
98
-
99
- Restiny::User.new(
100
- display_name: results['bungieNetUser']['cachedBungieGlobalDisplayName'],
101
- display_name_code: results['bungieNetUser']['cachedBungieGlobalDisplayNameCode'],
102
- memberships: results['destinyMemberships']
103
- )
76
+ get("/platform/User/GetMembershipsById/#{membership_id}/#{membership_type}/")
104
77
  end
105
78
 
106
79
  def get_user_by_bungie_name(full_display_name, membership_type = PLATFORM_ALL)
107
- display_name, display_name_code = full_display_name.split('#')
80
+ display_name, display_name_code = full_display_name.split("#")
108
81
  raise Restiny::InvalidParamsError.new("You must provide a valid Bungie name") if display_name.nil? || display_name_code.nil?
109
82
 
110
83
  params = {
@@ -112,30 +85,11 @@ module Restiny
112
85
  displayNameCode: display_name_code
113
86
  }
114
87
 
115
- response = post("/platform/Destiny2/SearchDestinyPlayerByBungieName/#{membership_type}/", params)
116
- result = response.dig('Response')
117
-
118
- return nil if result.nil?
119
-
120
- Restiny::User.new(
121
- display_name: result[0]['bungieGlobalDisplayName'],
122
- display_name_code: result[0]['bungieGlobalDisplayNameCode'],
123
- memberships: result
124
- )
88
+ post("/platform/Destiny2/SearchDestinyPlayerByBungieName/#{membership_type}/", params)
125
89
  end
126
90
 
127
91
  def search_users(name, page = 0)
128
- response = post("/platform/User/Search/GlobalName/#{page}", displayNamePrefix: name)
129
- search_results = response.dig('Response', 'searchResults')
130
- return [] if search_results.nil?
131
-
132
- search_results.map do |user|
133
- Restiny::User.new(
134
- display_name: user['bungieGlobalDisplayName'],
135
- display_name_code: user['bungieGlobalDisplayNameCode'],
136
- memberships: user['destinyMemberships']
137
- )
138
- end
92
+ post("/platform/User/Search/GlobalName/#{page}", displayNamePrefix: name)
139
93
  end
140
94
 
141
95
  private
@@ -154,45 +108,28 @@ module Restiny
154
108
  headers[:authorization] = "Bearer #{@oauth_token}" if @oauth_token
155
109
 
156
110
  response = case type
157
- when :get
158
- connection.get(url, params, headers)
159
- when :post
160
- connection.post(url, params, headers)
161
- end
111
+ when :get
112
+ connection.get(url, params, headers)
113
+ when :post
114
+ connection.post(url, params, headers)
115
+ end
162
116
 
163
- response.body
117
+ response.body&.dig("Response")
164
118
  rescue Faraday::Error => error
165
- message = if error.response_body && error.response_headers['content-type'] =~ /application\/json;/i
166
- JSON.parse(error.response_body)['Message']
119
+ message = if error.response_body && error.response_headers["content-type"] =~ /application\/json;/i
120
+ error_response = JSON.parse(error.response_body)
121
+ "#{error_response["error_description"]} (#{error_response["error"]})"
167
122
  else
168
123
  error.message
169
124
  end
170
125
 
171
126
  case error
172
- when Faraday::ClientError, Faraday::ServerError, Faraday::ConnectionFailed
173
- raise Restiny::NetworkError.new(message, error.response_status)
127
+ when Faraday::ClientError
128
+ raise Restiny::RequestError.new(message, error.response_status)
129
+ when Faraday::ServerError
130
+ raise Restiny::ResponseError.new(message, error.response_status)
174
131
  else
175
- end
176
- end
177
-
178
- def parse_profile_characters_response(response)
179
- characters = response.dig('Response', 'characters', 'data')
180
- return [] if characters.nil?
181
-
182
- result = []
183
-
184
- [].tap do |result|
185
- characters.each_value do |character|
186
- result << Restiny::Character.new(
187
- id: character['characterId'],
188
- session_playtime: character['minutesPlayedThisSession'],
189
- total_playtime: character['minutesPlayedTotal'],
190
- light_level: character['light'],
191
- stats: [],
192
- emblem: [],
193
- progression: character['progression']
194
- )
195
- end
132
+ raise Restiny::Error.new(message)
196
133
  end
197
134
  end
198
135
 
@@ -202,8 +139,8 @@ module Restiny
202
139
 
203
140
  def default_headers
204
141
  {
205
- 'User-Agent': "restiny v#{Restiny::VERSION}",
206
- 'X-API-KEY': @api_key
142
+ "User-Agent": "restiny v#{Restiny::VERSION}",
143
+ "X-API-KEY": @api_key
207
144
  }
208
145
  end
209
146
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restiny
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.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-05-15 00:00:00.000000000 Z
11
+ date: 2023-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -86,42 +86,70 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 12.3.3
89
+ version: '13.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: 12.3.3
96
+ version: '13.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.10'
103
+ version: '3.12'
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.10'
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'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: vcr
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - ">="
143
+ - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: '0'
145
+ version: '6.1'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - ">="
150
+ - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: '0'
152
+ version: '6.1'
125
153
  description: A gem for interacting with Bungie's Destiny API.
126
154
  email:
127
155
  - d+restiny@waferbaby.com
@@ -130,18 +158,16 @@ extensions: []
130
158
  extra_rdoc_files: []
131
159
  files:
132
160
  - lib/restiny.rb
133
- - lib/restiny/character.rb
134
161
  - lib/restiny/constants.rb
135
162
  - lib/restiny/errors.rb
136
163
  - lib/restiny/manifest.rb
137
164
  - lib/restiny/membership.rb
138
- - lib/restiny/user.rb
139
165
  - lib/restiny/version.rb
140
166
  homepage: http://github.com/waferbaby/restiny
141
167
  licenses:
142
168
  - MIT
143
169
  metadata: {}
144
- post_install_message:
170
+ post_install_message:
145
171
  rdoc_options: []
146
172
  require_paths:
147
173
  - lib
@@ -156,8 +182,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
182
  - !ruby/object:Gem::Version
157
183
  version: '0'
158
184
  requirements: []
159
- rubygems_version: 3.1.6
160
- signing_key:
185
+ rubygems_version: 3.3.7
186
+ signing_key:
161
187
  specification_version: 4
162
188
  summary: A Destiny API gem
163
189
  test_files: []
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Restiny
4
- class Character
5
- attr_accessor :id, :playtime, :light_level, :stats, :emblem, :progression
6
-
7
- def initialize(id:, session_playtime:, total_playtime:, light_level:, stats:, emblem:, progression:)
8
- @id = id
9
- @playtime = { session: session_playtime, total: total_playtime }
10
- @light_level = light_level
11
- @stats = stats
12
- @emblem = emblem
13
- @progression = progression
14
- end
15
- end
16
- end
17
-
data/lib/restiny/user.rb DELETED
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Restiny
4
- class User
5
- attr_reader :display_name, :display_name_code, :memberships
6
-
7
- def initialize(display_name:, display_name_code:, memberships:)
8
- @display_name = display_name
9
- @display_name_code = display_name_code
10
-
11
- self.memberships = memberships
12
- end
13
-
14
- def memberships=(raw_memberships)
15
- @memberships = {}
16
-
17
- raw_memberships.each do |ship|
18
- platform = Restiny::Membership.platform(ship['membershipType'])
19
-
20
- @memberships[platform] = Restiny::Membership.new(
21
- id: ship['membershipId'],
22
- type: ship['membershipType'],
23
- cross_save_override: ship['crossSaveOverride'],
24
- icon_path: ship['iconPath'],
25
- is_public: ship['isPublic'],
26
- types: ship['applicableMembershipTypes']
27
- )
28
- end
29
- end
30
- end
31
- end