swgoh_comlink 0.1.0 → 0.2.1

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: c9c4144173f292a053e64ace25b86b5f3937db8cd4de91c95420414f7edb942b
4
- data.tar.gz: 3f194112a1082053ff9cea729522efca2ee1c7e0fc770d4666964eaaec6360b2
3
+ metadata.gz: 6d9ab9df1c6ba126ac356fc328ebb1a9812ae2080006fd1bc1c4c6db612245f3
4
+ data.tar.gz: 2134410dbb94e2e2db173780a74b52b8b13de99e4b50a8b45c6f0564fc0c29a9
5
5
  SHA512:
6
- metadata.gz: 261e30c5d1efbd7732d9d1c63495850611a1e53e1a1cf104b5f259b9784d64086edb6290c86fdd6d7fcbc7c3f54d2b00bd0997f9afdb8aea2c5e711a029e63e6
7
- data.tar.gz: 334865c1ac341fdaea813ae8071ba92cf94f31a9eca900471f4352f6f0163e5d9e9a59df8c9a80d2db504f110d0394e183dba4e3b785abd77a73969222310ad1
6
+ metadata.gz: 8380ebb8ec604aad5b4b3cfe7126601774a40b76647d1f730881dc30daa73754add6119292af4ac10417cdc6018cf4b751eb20c23d99805c709eea66ad00a917
7
+ data.tar.gz: 62b0abcbe2064e9483aea47c7bb8a02938ee3cdd8f33f2b55cbee888908b83ee824ab981a72811f40e5503e68896908c721d3eeb00b09337d248da76e6586965
@@ -3,7 +3,6 @@ require 'digest'
3
3
  require 'json'
4
4
  require 'net/http'
5
5
  require 'uri'
6
- require 'active_support/core_ext/hash/indifferent_access'
7
6
 
8
7
  class ComlinkApiRequest
9
8
  attr_accessor :hmac_enabled, :comlink_url
@@ -13,9 +12,9 @@ class ComlinkApiRequest
13
12
  @hmac_enabled = false
14
13
  return if keys.empty?
15
14
 
16
- keys = keys.with_indifferent_access
17
- @secret_key = keys['secret_key']
18
- @access_key = keys['access_key']
15
+ keys = keys.transform_keys(&:to_sym)
16
+ @secret_key = keys[:secret_key]
17
+ @access_key = keys[:access_key]
19
18
 
20
19
  raise ArgumentError, 'Secret key missing' unless @secret_key
21
20
  raise ArgumentError, 'Access key missing' unless @access_key
@@ -24,12 +23,7 @@ class ComlinkApiRequest
24
23
  end
25
24
 
26
25
  def get(path)
27
- uri = URI.parse("#{@comlink_url}#{path}")
28
- http = Net::HTTP.new(uri.host, uri.port)
29
- http.use_ssl = true
30
- request = Net::HTTP::Get.new(uri.request_uri)
31
-
32
- http.request(request).body
26
+ Net::HTTP.get_response(URI("#{@comlink_url}#{path}")).body
33
27
  end
34
28
 
35
29
  def post(path, body)
data/lib/swgoh_comlink.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/hash'
4
- require 'active_support/core_ext/string'
5
3
  require_relative 'comlink_api_request'
6
4
 
7
5
  # Base class for the gem, a wrapper for Comlink
8
6
  # See https://github.com/swgoh-utils/swgoh-comlink for more info on Comlink
9
7
  class SwgohComlink
10
- def initialize(comlink_url, keys = {})
8
+ def initialize(comlink_url, **keys)
11
9
  @api_requester = ComlinkApiRequest.new(comlink_url, keys)
12
10
  end
13
11
 
@@ -16,56 +14,51 @@ class SwgohComlink
16
14
  end
17
15
 
18
16
  def localization(id, unzip = false, enums = false)
19
- body = {
20
- payload: {
21
- id: id
22
- },
23
- unzip: unzip,
24
- enums: enums
25
- }
17
+ body = { payload: { id: }, unzip:, enums: }
26
18
 
27
- JSON.parse(@api_requester.post('/localization', body.to_json))
19
+ parse_post_response('/localization', body)
28
20
  end
29
21
 
30
22
  def metadata(client_specs = {}, enums = false)
31
23
  body = {}
32
- body['payload'] = { "clientSpecs" => verify_parameters(client_specs, ['platform', 'bundleId', 'externalVersion', 'internalVersion', 'region']) } unless client_specs.empty?
33
- body['enums'] = false
24
+ unless client_specs.empty?
25
+ body['payload'] = {
26
+ clientSpecs: verify_parameters(client_specs, [:platform, :bundleId, :externalVersion, :internalVersion, :region])
27
+ }
28
+ end
29
+ body['enums'] = enums
34
30
 
35
- JSON.parse(@api_requester.post('/metadata', body.to_json))
31
+ parse_post_response('/metadata', body)
36
32
  end
37
33
 
38
34
  def data(version, include_pve_units = true, request_segment = 0, enums = false)
39
35
  body = {
40
36
  payload: {
41
- version: version,
37
+ version:,
42
38
  includePveUnits: include_pve_units,
43
39
  requestSegment: request_segment
44
40
  },
45
- enums: enums
41
+ enums:
46
42
  }
47
43
 
48
44
  body_validation(body, [ { validation: (0..4), error_message: 'Request segment must be between 0 and 4', path: [:payload, :requestSegment] } ])
49
45
 
50
- JSON.parse(@api_requester.post('/data', body.to_json))
46
+ parse_post_response('/data', body)
51
47
  end
52
48
 
53
49
  def player(player_id, enums = false)
54
- body = {
55
- payload: format_player_id_hash(player_id),
56
- enums: enums
57
- }
50
+ body = { payload: format_player_id_hash(player_id), enums: }
58
51
 
59
- JSON.parse(@api_requester.post('/player', body.to_json))
52
+ parse_post_response('/player', body)
60
53
  end
61
54
 
62
55
  def player_arena(player_id, enums = false)
63
56
  body = {
64
57
  payload: format_player_id_hash(player_id),
65
- enums: enums
58
+ enums:
66
59
  }
67
60
 
68
- JSON.parse(@api_requester.post('/playerArena', body.to_json))
61
+ parse_post_response('/playerArena', body)
69
62
  end
70
63
 
71
64
  def guild(guild_id, include_recent_guild_activity = false, enums = false)
@@ -74,18 +67,18 @@ class SwgohComlink
74
67
  guildId: guild_id,
75
68
  includeRecentGuildActivityInfo: include_recent_guild_activity
76
69
  },
77
- enums: enums
70
+ enums:
78
71
  }
79
72
 
80
- JSON.parse(@api_requester.post('/guild', body.to_json))
73
+ parse_post_response('/guild', body)
81
74
  end
82
75
 
83
76
  def get_guilds(filter_type, name = nil, search_criteria = nil, count = 10, enums = false)
84
77
  body = {
85
78
  payload: {
86
79
  filterType: filter_type,
87
- count: count,
88
- enums: enums
80
+ count:,
81
+ enums:
89
82
  }
90
83
  }
91
84
 
@@ -95,50 +88,45 @@ class SwgohComlink
95
88
  body[:payload][:name] = name
96
89
  validations << { error_message: 'Name is required when filterType is 4', path: [:payload, :name], required: true }
97
90
  elsif filter_type == 5
98
- body[:payload][:searchCriteria] = search_criteria && verify_parameters(search_criteria, ['minMemberCount', 'maxMemberCount', 'includeInviteOnly', 'minGuildGalacticPower', 'maxGuildGalacticPower', 'recentTbParticipatedIn'])
91
+ body[:payload][:searchCriteria] = search_criteria && verify_parameters(search_criteria, [:minMemberCount, :maxMemberCount, :includeInviteOnly, :minGuildGalacticPower, :maxGuildGalacticPower, :recentTbParticipatedIn])
99
92
  validations << { error_message: 'searchCriteria is required when filterType is 5', path: [:payload, :searchCriteria], required: true }
100
93
  end
101
94
 
102
95
  body_validation(body, validations)
103
96
 
104
- JSON.parse(@api_requester.post('/getGuilds', body.to_json))
97
+ parse_post_response('/getGuilds', body)
105
98
  end
106
99
 
107
100
  def get_events(enums = false)
108
- body = {
109
- enums: enums
110
- }
101
+ body = { enums: }
111
102
 
112
- JSON.parse(@api_requester.post('/getEvents', body.to_json))
103
+ parse_post_response('/getEvents', body)
113
104
  end
114
105
 
115
106
  def get_leaderboard(payload, enums = false)
116
107
  body_validation(payload, [ { validation: [4, 6], error_message: 'leaderboardType must be 4 or 6', path: [:leaderboardType] } ])
117
108
 
118
109
  if payload[:leaderboardType] == 4 || payload[:leaderboard_type] == 4
119
- payload = verify_parameters(payload, ['leaderboardType', 'eventInstanceId', 'groupId'])
110
+ payload = verify_parameters(payload, [:leaderboardType, :eventInstanceId, :groupId])
120
111
  body_validation(payload, [
121
112
  { error_message: 'eventInstanceId must be present', path: [:eventInstanceId], required: true },
122
113
  { error_message: 'groupId must be present', path: [:groupId], required: true }
123
114
  ])
124
115
  else
125
- payload = verify_parameters(payload, ['leaderboardType', 'league', 'division'])
116
+ payload = verify_parameters(payload, [:leaderboardType, :league, :division])
126
117
  body_validation(payload, [
127
118
  { validation: [20, 40, 60, 80, 100], error_message: 'league must be in [20, 40, 60, 80, 100]', path: [:league], required: true },
128
119
  { validation: [5, 10, 15, 20, 25], error_message: 'division must be in [5, 10, 15, 20, 25]', path: [:division], required: true }
129
120
  ])
130
121
  end
131
122
 
132
- body = {
133
- payload: payload,
134
- enums: false
135
- }
123
+ body = { payload:, enums: }
136
124
 
137
- JSON.parse(@api_requester.post('/getLeaderboard', body.to_json))
125
+ parse_post_response('/getLeaderboard', body)
138
126
  end
139
127
 
140
128
  def get_guild_leaderboard(leaderboards, count, enums = false)
141
- def_ids = [
129
+ valid_def_ids = [
142
130
  'sith_raid',
143
131
  'rancor',
144
132
  'aat',
@@ -161,10 +149,10 @@ class SwgohComlink
161
149
  ]
162
150
 
163
151
  leaderboards.each do |leaderboard|
164
- payload = verify_parameters(leaderboard, ['leaderboardType', 'defId', 'monthOffset'])
152
+ payload = verify_parameters(leaderboard, [:leaderboardType, :defId, :monthOffset])
165
153
  body_validation(leaderboard, [
166
154
  { validation: [0, 2, 3, 4, 5, 6], error_message: 'leaderboardType must in [0, 2, 3, 4, 5, 6]', path: [:leaderboardType], required: true },
167
- { validation: def_ids, error_message: 'defId must be certain values, see docs', path: [:defId], required: [2, 4, 5, 6].include?(leaderboard.with_indifferent_access[:leaderboardType]) },
155
+ { validation: valid_def_ids, error_message: 'defId must be certain values, see docs', path: [:defId], required: [2, 4, 5, 6].include?(leaderboard.transform_keys(&:to_sym)[:leaderboardType]) },
168
156
  { validation: [0, 1], error_message: 'monthOffset must 0 or 1', path: [:monthOffset] }
169
157
  ])
170
158
  end
@@ -172,12 +160,12 @@ class SwgohComlink
172
160
  body = {
173
161
  payload: {
174
162
  leaderboardId: leaderboards,
175
- count: count
163
+ count:
176
164
  },
177
- enums: enums
165
+ enums:
178
166
  }
179
167
 
180
- JSON.parse(@api_requester.post('/getGuildLeaderboard', body.to_json))
168
+ parse_post_response('/getGuildLeaderboard', body)
181
169
  end
182
170
 
183
171
  private
@@ -185,18 +173,18 @@ class SwgohComlink
185
173
  def format_player_id_hash(player_id_original)
186
174
  # This can accept the 9 digit ally code (ex: 123-456-789)
187
175
  # OR it can accept the full playerId (ex: HFuvf-OURK202WASUgpayw)
176
+ return { allyCode: player_id_original.to_s } if player_id_original.kind_of?(Integer)
177
+
188
178
  player_id = player_id_original.dup
189
179
  player_id.gsub!('-', '') if player_id.length == 11
190
180
  player_id.length == 9 ? { allyCode: player_id } : { playerID: player_id }
191
181
  end
192
182
 
193
183
  def verify_parameters(original_hash, permitted_keys)
194
- original_hash = original_hash.with_indifferent_access
195
-
196
- original_hash.transform_keys! { |key| key.to_s.camelize(:lower) }
197
- original_hash.slice!(*permitted_keys)
184
+ original_hash = original_hash.transform_keys(&:to_sym)
198
185
 
199
- original_hash
186
+ original_hash.transform_keys! { |key| camelize(key.to_s).to_sym }
187
+ original_hash.select { |key| permitted_keys.include?(key) }
200
188
  end
201
189
 
202
190
  def body_validation(body, requirements)
@@ -210,4 +198,12 @@ class SwgohComlink
210
198
 
211
199
  true
212
200
  end
201
+
202
+ def parse_post_response(route, body)
203
+ JSON.parse(@api_requester.post(route, body.to_json))
204
+ end
205
+
206
+ def camelize(string)
207
+ string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
208
+ end
213
209
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swgoh_comlink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Moses
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-09 00:00:00.000000000 Z
11
+ date: 2024-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -72,14 +72,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 2.7.0
75
+ version: 3.1.0
76
76
  required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
81
  requirements: []
82
- rubygems_version: 3.5.18
82
+ rubygems_version: 3.5.11
83
83
  signing_key:
84
84
  specification_version: 4
85
85
  summary: 'Created to connect with deployed Star Wars: Galaxy of Heroes Comlink APIs.